Convert encoding from ISO-8859-1 to UTF-8
iconv -f ISO-8859-1 -t UTF-8 No more broken umlauts!
This commit is contained in:
parent
9f1d3c81d2
commit
9898b3404a
|
@ -102,7 +102,7 @@ CChapter *pChapter=0;
|
||||||
CZipArchive zip;
|
CZipArchive zip;
|
||||||
if (!zip.open(strFileName, CZipArchive::OpenReadOnly))
|
if (!zip.open(strFileName, CZipArchive::OpenReadOnly))
|
||||||
{
|
{
|
||||||
QMessageBox::critical(pParent, pParent->tr("Datei-Fehler"), pParent->tr("Konnte folgende Datei nicht zum Lesen öffnen:\n%1").arg(strFileName));
|
QMessageBox::critical(pParent, pParent->tr("Datei-Fehler"), pParent->tr("Konnte folgende Datei nicht zum Lesen öffnen:\n%1").arg(strFileName));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ QFile file (strFileName);
|
||||||
if (strFileName.isEmpty()) return false;
|
if (strFileName.isEmpty()) return false;
|
||||||
if (!file.open(QIODevice::WriteOnly))
|
if (!file.open(QIODevice::WriteOnly))
|
||||||
{
|
{
|
||||||
QMessageBox::critical(pParent, QString(pParent->tr("Datei-Fehler")), pParent->tr("Konnte folgende Datei nicht zum Schreiben öffnen:\n")+strFileName);
|
QMessageBox::critical(pParent, QString(pParent->tr("Datei-Fehler")), pParent->tr("Konnte folgende Datei nicht zum Schreiben öffnen:\n")+strFileName);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QTextStream out(&file);
|
QTextStream out(&file);
|
||||||
|
@ -315,7 +315,7 @@ int iErrLine, iErrCol;
|
||||||
if (!file.exists()) return true;
|
if (!file.exists()) return true;
|
||||||
if (!file.open (QIODevice::ReadOnly))
|
if (!file.open (QIODevice::ReadOnly))
|
||||||
{
|
{
|
||||||
QMessageBox::critical(pParent, QString(pParent->tr("Datei-Fehler")), pParent->tr("Konnte folgende Datei nicht zum Lesen öffnen:\n")+statisticFileName());
|
QMessageBox::critical(pParent, QString(pParent->tr("Datei-Fehler")), pParent->tr("Konnte folgende Datei nicht zum Lesen öffnen:\n")+statisticFileName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QTextStream in (&file);
|
QTextStream in (&file);
|
||||||
|
@ -375,7 +375,7 @@ QFile file (strFileName);
|
||||||
|
|
||||||
if (!file.open (QIODevice::WriteOnly))
|
if (!file.open (QIODevice::WriteOnly))
|
||||||
{
|
{
|
||||||
QMessageBox::critical (pParent, pParent->tr("Fehler"), pParent->tr("Konnte folgende Datei nicht zum Schreiben öffnen.\n")+strFileName);
|
QMessageBox::critical (pParent, pParent->tr("Fehler"), pParent->tr("Konnte folgende Datei nicht zum Schreiben öffnen.\n")+strFileName);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QTextStream out(&file);
|
QTextStream out(&file);
|
||||||
|
|
|
@ -67,14 +67,14 @@ QVariant CCatalogModel::headerData (int section, Qt::Orientation orientation, in
|
||||||
else if (section == COL_QUESTION)
|
else if (section == COL_QUESTION)
|
||||||
return tr("Fragen");
|
return tr("Fragen");
|
||||||
else if (section == COL_AVG)
|
else if (section == COL_AVG)
|
||||||
return tr("Ø");
|
return tr("Ø");
|
||||||
else if (section == COL_ASSIST)
|
else if (section == COL_ASSIST)
|
||||||
return tr("Lernassistent");
|
return tr("Lernassistent");
|
||||||
}
|
}
|
||||||
else if (role == Qt::ToolTipRole)
|
else if (role == Qt::ToolTipRole)
|
||||||
{
|
{
|
||||||
if (section == COL_CHAPTER)
|
if (section == COL_CHAPTER)
|
||||||
return tr("Kapitelname\nBitte markieren Sie das Kapitel, das Sie lernen möchten.");
|
return tr("Kapitelname\nBitte markieren Sie das Kapitel, das Sie lernen möchten.");
|
||||||
else if (section == COL_QUESTION)
|
else if (section == COL_QUESTION)
|
||||||
return tr("Anzahl d. Fragen inkl. Unterkapitel");
|
return tr("Anzahl d. Fragen inkl. Unterkapitel");
|
||||||
else if (section == COL_AVG)
|
else if (section == COL_AVG)
|
||||||
|
|
42
chapter.cpp
42
chapter.cpp
|
@ -275,14 +275,14 @@ void CChapter::updateStatisticCount()
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
*/
|
*/
|
||||||
// Alle Statistiken zurücksetzen
|
// Alle Statistiken zurücksetzen
|
||||||
m_uNeverAskedCount = 0;
|
m_uNeverAskedCount = 0;
|
||||||
m_bHasLearningNew = false;
|
m_bHasLearningNew = false;
|
||||||
m_bHasKnownQuestions = false;
|
m_bHasKnownQuestions = false;
|
||||||
m_bHasKnownQuestionsRepeatToday = false;
|
m_bHasKnownQuestionsRepeatToday = false;
|
||||||
for (int i=0; i<=LEVEL_MAX; i++) m_uLevelCount[i] = 0;
|
for (int i=0; i<=LEVEL_MAX; i++) m_uLevelCount[i] = 0;
|
||||||
|
|
||||||
// Zuerst Statistiken für Unterkapitel berechnen und integrieren
|
// Zuerst Statistiken für Unterkapitel berechnen und integrieren
|
||||||
for (int i=0; i<m_listChapter.size(); i++)
|
for (int i=0; i<m_listChapter.size(); i++)
|
||||||
{
|
{
|
||||||
CChapter *p = m_listChapter.at(i);
|
CChapter *p = m_listChapter.at(i);
|
||||||
|
@ -295,7 +295,7 @@ void CChapter::updateStatisticCount()
|
||||||
if (p->hasKnownQuestionsRepeatToday()) m_bHasKnownQuestionsRepeatToday = true;
|
if (p->hasKnownQuestionsRepeatToday()) m_bHasKnownQuestionsRepeatToday = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Anschließend Statistiken für eigene Fragen neu berechnen und hinzufügen
|
// Anschließend Statistiken für eigene Fragen neu berechnen und hinzufügen
|
||||||
for (int i=0; i<m_listQuestion.size(); i++)
|
for (int i=0; i<m_listQuestion.size(); i++)
|
||||||
{
|
{
|
||||||
CQuestion *q = m_listQuestion.at(i);
|
CQuestion *q = m_listQuestion.at(i);
|
||||||
|
@ -322,7 +322,7 @@ void CChapter::updateRecommendationStatistic()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Berechnet die Statistik für das Kapitel inkl. aller Unterkapitel neu.
|
Berechnet die Statistik für das Kapitel inkl. aller Unterkapitel neu.
|
||||||
*/
|
*/
|
||||||
void CChapter::updateStatistic()
|
void CChapter::updateStatistic()
|
||||||
{
|
{
|
||||||
|
@ -369,10 +369,10 @@ QString str;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Das empfohlene Wiederholdatum eines Kapitels das frühestete Datum,
|
Das empfohlene Wiederholdatum eines Kapitels das frühestete Datum,
|
||||||
an dem eine Frage des Kapitels oder Unterkapitels wiederholt werden sollte.
|
an dem eine Frage des Kapitels oder Unterkapitels wiederholt werden sollte.
|
||||||
\return Datum, wann das Kapitel wiederholt werden soll.
|
\return Datum, wann das Kapitel wiederholt werden soll.
|
||||||
Gibt es kein solches Datum, so wird ein ungültiges Datum (QDate::isValid()) zurückgegeben.
|
Gibt es kein solches Datum, so wird ein ungültiges Datum (QDate::isValid()) zurückgegeben.
|
||||||
Hinweis: Das Datum kann auch in der Vergangenheit liegen!
|
Hinweis: Das Datum kann auch in der Vergangenheit liegen!
|
||||||
*/
|
*/
|
||||||
QDate CChapter::repeatDate() const
|
QDate CChapter::repeatDate() const
|
||||||
|
@ -392,7 +392,7 @@ QList<CQuestion*> list = questionPool();
|
||||||
/*!
|
/*!
|
||||||
Die Variable m_recomRepeatDate muss up to date sein!
|
Die Variable m_recomRepeatDate muss up to date sein!
|
||||||
|
|
||||||
\return Lernempfehlung dieses Kapitels ohne Berücksichtigung evt. vorhandener ünter- oder übergeordneter Kapitel.
|
\return Lernempfehlung dieses Kapitels ohne Berücksichtigung evt. vorhandener ünter- oder übergeordneter Kapitel.
|
||||||
|
|
||||||
\sa m_recomRepeatDate
|
\sa m_recomRepeatDate
|
||||||
*/
|
*/
|
||||||
|
@ -417,7 +417,7 @@ CChapter::Recommendation CChapter::recommendationIndividual() const
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Aktualisiert die Lernempfehlung für dieses Kapitel und alle Unterkapitel
|
Aktualisiert die Lernempfehlung für dieses Kapitel und alle Unterkapitel
|
||||||
\sa m_recom
|
\sa m_recom
|
||||||
*/
|
*/
|
||||||
void CChapter::updateRecommendation()
|
void CChapter::updateRecommendation()
|
||||||
|
@ -525,7 +525,7 @@ unsigned uDays=0;
|
||||||
case RecommendationSubChapter:
|
case RecommendationSubChapter:
|
||||||
return tr("Zuerst Unterkapitel lernen");
|
return tr("Zuerst Unterkapitel lernen");
|
||||||
case RecommendationParentChapter:
|
case RecommendationParentChapter:
|
||||||
return tr("Übergeordnetes Kapitel lernen");
|
return tr("Übergeordnetes Kapitel lernen");
|
||||||
case RecommendationLearnNew:
|
case RecommendationLearnNew:
|
||||||
return tr("Neue Fragen lernen");
|
return tr("Neue Fragen lernen");
|
||||||
case RecommendationRepeatToday:
|
case RecommendationRepeatToday:
|
||||||
|
@ -592,12 +592,12 @@ QString str;
|
||||||
str = tr("Keine Lernempfehlung");
|
str = tr("Keine Lernempfehlung");
|
||||||
break;
|
break;
|
||||||
case RecommendationSubChapter:
|
case RecommendationSubChapter:
|
||||||
str = tr("Dieses Kapitel enthält Unterkapitel, dessen Fragen Sie noch nicht ausreichend gelernt haben.\nEs wird empohlen in kleinen Etappen zu lernen und damit zuerst die Unterkapitel zu vertiefen.");
|
str = tr("Dieses Kapitel enthält Unterkapitel, dessen Fragen Sie noch nicht ausreichend gelernt haben.\nEs wird empohlen in kleinen Etappen zu lernen und damit zuerst die Unterkapitel zu vertiefen.");
|
||||||
break;
|
break;
|
||||||
case RecommendationParentChapter:
|
case RecommendationParentChapter:
|
||||||
if (levelAvgRounded() >= LEVEL_NORMAL)
|
if (levelAvgRounded() >= LEVEL_NORMAL)
|
||||||
str = tr("Sie können die Fragen dieses Kapitels gut beantworten.\n");
|
str = tr("Sie können die Fragen dieses Kapitels gut beantworten.\n");
|
||||||
str += tr("Es wird empfohlen, alle Fragen des übergeordneten Kapitels gemischt zusammen zu lernen.");
|
str += tr("Es wird empfohlen, alle Fragen des übergeordneten Kapitels gemischt zusammen zu lernen.");
|
||||||
break;
|
break;
|
||||||
case RecommendationLearnNew:
|
case RecommendationLearnNew:
|
||||||
if (!isRecommendedNow(pCatalog))
|
if (!isRecommendedNow(pCatalog))
|
||||||
|
@ -606,23 +606,23 @@ QString str;
|
||||||
str = tr("Bitte beantworten Sie alle neuen Fragen mindestens einmal richtig.");
|
str = tr("Bitte beantworten Sie alle neuen Fragen mindestens einmal richtig.");
|
||||||
break;
|
break;
|
||||||
case RecommendationRepeatToday:
|
case RecommendationRepeatToday:
|
||||||
str = tr("Bitte lernen Sie alle heute zu wiederholenden Fragen, bis sie eine Lernfortschritts-Stufe höher eingestuft sind.");
|
str = tr("Bitte lernen Sie alle heute zu wiederholenden Fragen, bis sie eine Lernfortschritts-Stufe höher eingestuft sind.");
|
||||||
break;
|
break;
|
||||||
case RecommendationRepeatLater:
|
case RecommendationRepeatLater:
|
||||||
uDays = QDate::currentDate().daysTo(m_recomRepeatDate);
|
uDays = QDate::currentDate().daysTo(m_recomRepeatDate);
|
||||||
if (uDays > 1)
|
if (uDays > 1)
|
||||||
str = tr("Die Wiederholung dieses Kapitels ist erst in %1 Tagen geplant.\n").arg(uDays);
|
str = tr("Die Wiederholung dieses Kapitels ist erst in %1 Tagen geplant.\n").arg(uDays);
|
||||||
else
|
else
|
||||||
str = tr("Die Wiederholung dieses Kapitels ist erst für morgen geplant.\n");
|
str = tr("Die Wiederholung dieses Kapitels ist erst für morgen geplant.\n");
|
||||||
if (pCatalog->m_uRecomCount[RecommendationRepeatToday] > 0)
|
if (pCatalog->m_uRecomCount[RecommendationRepeatToday] > 0)
|
||||||
str += tr("Es gibt andere Kapitel, deren Fragen heute wiederholt werden müssen. Bitte lernen Sie diese Kapitel zuerst.");
|
str += tr("Es gibt andere Kapitel, deren Fragen heute wiederholt werden müssen. Bitte lernen Sie diese Kapitel zuerst.");
|
||||||
else if (pCatalog->m_uRecomCount[RecommendationLearnNew] > 0)
|
else if (pCatalog->m_uRecomCount[RecommendationLearnNew] > 0)
|
||||||
str += tr("Bitte lernen Sie zuerst Kapitel mit neuen Fragen.");
|
str += tr("Bitte lernen Sie zuerst Kapitel mit neuen Fragen.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasRecommendedQuestions() && isRecommendedNow(pCatalog))
|
if (hasRecommendedQuestions() && isRecommendedNow(pCatalog))
|
||||||
str += tr("<p>Dafür sind noch %1 Fragen zu lernen.").arg(recommendedQuestionCount());
|
str += tr("<p>Dafür sind noch %1 Fragen zu lernen.").arg(recommendedQuestionCount());
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
@ -634,14 +634,14 @@ QString str;
|
||||||
if (m_recom2 == RecommendationLearnNew || (m_recom == RecommendationLearnNew && !isRecommendedNow(pCatalog)))
|
if (m_recom2 == RecommendationLearnNew || (m_recom == RecommendationLearnNew && !isRecommendedNow(pCatalog)))
|
||||||
{
|
{
|
||||||
//str = tr("Bitte beantworten Sie alle neuen Fragen mindestens einmal richtig.");
|
//str = tr("Bitte beantworten Sie alle neuen Fragen mindestens einmal richtig.");
|
||||||
str = tr("Alternativ können Sie jetzt die neuen Fragen dieses Kapitels lernen (%1 Fragen).").arg(recommendedQuestionCount());
|
str = tr("Alternativ können Sie jetzt die neuen Fragen dieses Kapitels lernen (%1 Fragen).").arg(recommendedQuestionCount());
|
||||||
}
|
}
|
||||||
else if (m_recom2 == RecommendationRepeatToday)
|
else if (m_recom2 == RecommendationRepeatToday)
|
||||||
{
|
{
|
||||||
if (m_recom == RecommendationSubChapter)
|
if (m_recom == RecommendationSubChapter)
|
||||||
str = tr("Bitte lernen Sie alle heute zu wiederholenden Fragen, bis sie eine Lernfortschritts-Stufe höher eingestuft sind (%1 Fragen).").arg(recommendedQuestionCount());
|
str = tr("Bitte lernen Sie alle heute zu wiederholenden Fragen, bis sie eine Lernfortschritts-Stufe höher eingestuft sind (%1 Fragen).").arg(recommendedQuestionCount());
|
||||||
else
|
else
|
||||||
str = tr("Alternativ können Sie jetzt die heute zu wiederholenden Fragen dieses Kapitels lernen (%1 Fragen).").arg(recommendedQuestionCount());
|
str = tr("Alternativ können Sie jetzt die heute zu wiederholenden Fragen dieses Kapitels lernen (%1 Fragen).").arg(recommendedQuestionCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
|
@ -676,7 +676,7 @@ QString CChapter::recommendationIconName(const CCatalog *pCatalog) const
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\return true: Kapitel kann jetzt gelernt werden,
|
\return true: Kapitel kann jetzt gelernt werden,
|
||||||
false: Kapitel sollte überhaupt nicht oder erst später gelernt werden
|
false: Kapitel sollte überhaupt nicht oder erst später gelernt werden
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool CChapter::isRecommendedNow(const CCatalog *pCatalog) const
|
bool CChapter::isRecommendedNow(const CCatalog *pCatalog) const
|
||||||
|
@ -700,7 +700,7 @@ bool CChapter::isRecommendedNow(const CCatalog *pCatalog) const
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
\return true: Das Kapitel enthält noch neue Fragen, die gerade (="heute") gelernt werden
|
\return true: Das Kapitel enthält noch neue Fragen, die gerade (="heute") gelernt werden
|
||||||
bool CChapter::isLearningNew() const
|
bool CChapter::isLearningNew() const
|
||||||
{
|
{
|
||||||
for (int i=0; i<m_listQuestion.size(); i++)
|
for (int i=0; i<m_listQuestion.size(); i++)
|
||||||
|
|
|
@ -139,14 +139,14 @@ QVariant CChapterModel::headerData (int section, Qt::Orientation orientation, in
|
||||||
else if (section == COL_QUESTION)
|
else if (section == COL_QUESTION)
|
||||||
return tr("Fragen");
|
return tr("Fragen");
|
||||||
else if (section == COL_AVG)
|
else if (section == COL_AVG)
|
||||||
return tr("Ø");
|
return tr("Ø");
|
||||||
else if (section == COL_ASSIST)
|
else if (section == COL_ASSIST)
|
||||||
return tr("Lernassistent");
|
return tr("Lernassistent");
|
||||||
}
|
}
|
||||||
else if (role == Qt::ToolTipRole)
|
else if (role == Qt::ToolTipRole)
|
||||||
{
|
{
|
||||||
if (section == COL_CHAPTER)
|
if (section == COL_CHAPTER)
|
||||||
return tr("Kapitelname\nBitte markieren Sie das Kapitel, das Sie lernen möchten.");
|
return tr("Kapitelname\nBitte markieren Sie das Kapitel, das Sie lernen möchten.");
|
||||||
else if (section == COL_QUESTION)
|
else if (section == COL_QUESTION)
|
||||||
return tr("Anzahl d. Fragen inkl. Unterkapitel");
|
return tr("Anzahl d. Fragen inkl. Unterkapitel");
|
||||||
else if (section == COL_AVG)
|
else if (section == COL_AVG)
|
||||||
|
|
12
dlgexam.cpp
12
dlgexam.cpp
|
@ -71,7 +71,7 @@ bool CDlgExam::setup (const CExam& exam)
|
||||||
|
|
||||||
void CDlgExam::init()
|
void CDlgExam::init()
|
||||||
{
|
{
|
||||||
// Zeitbalken & Zeitüberwachung
|
// Zeitbalken & Zeitüberwachung
|
||||||
m_timer.setInterval(1000);
|
m_timer.setInterval(1000);
|
||||||
m_timer.start();
|
m_timer.start();
|
||||||
m_dtStart = QDateTime::currentDateTime();
|
m_dtStart = QDateTime::currentDateTime();
|
||||||
|
@ -141,7 +141,7 @@ unsigned uSecs = m_dtStart.secsTo(dt);
|
||||||
{
|
{
|
||||||
m_bTimeout = true;
|
m_bTimeout = true;
|
||||||
m_timer.stop();
|
m_timer.stop();
|
||||||
QMessageBox::information(this, tr("Information"), tr("Die Zeit ist abgelaufen.\nDie Prüfung wird deswegen beendet."));
|
QMessageBox::information(this, tr("Information"), tr("Die Zeit ist abgelaufen.\nDie Prüfung wird deswegen beendet."));
|
||||||
on_pbFinish_clicked();
|
on_pbFinish_clicked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -273,23 +273,23 @@ unsigned uSecs = m_dtStart.secsTo(dt);
|
||||||
bPassed = false;
|
bPassed = false;
|
||||||
bSaveStat = false;
|
bSaveStat = false;
|
||||||
labResult->setText(tr("Ohne Wertung\n(Nicht bestanden)"));
|
labResult->setText(tr("Ohne Wertung\n(Nicht bestanden)"));
|
||||||
QMessageBox::information(this, tr("Information"), tr("Sie haben weniger als die Hälfte aller Fragen beantwortet.\nDiese Prüfung wird deswegen nicht gewertet."));
|
QMessageBox::information(this, tr("Information"), tr("Sie haben weniger als die Hälfte aller Fragen beantwortet.\nDiese Prüfung wird deswegen nicht gewertet."));
|
||||||
}
|
}
|
||||||
else if (uErrorPoints > m_exam.maxErrorPoints())
|
else if (uErrorPoints > m_exam.maxErrorPoints())
|
||||||
{
|
{
|
||||||
bPassed = false;
|
bPassed = false;
|
||||||
labResult->setText(tr("<font color='red'>Nicht bestanden</font>"));
|
labResult->setText(tr("<font color='red'>Nicht bestanden</font>"));
|
||||||
QMessageBox::information(this, tr("Ergebnis"), tr("Sie haben die Prüfung leider nicht bestanden."));
|
QMessageBox::information(this, tr("Ergebnis"), tr("Sie haben die Prüfung leider nicht bestanden."));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bPassed = true;
|
bPassed = true;
|
||||||
labResult->setText(tr("<font color='green'>Bestanden</font>"));
|
labResult->setText(tr("<font color='green'>Bestanden</font>"));
|
||||||
QMessageBox::information(this, tr("Ergebnis"), tr("<b>Herzlichen Glückwunsch!</b><p>Sie haben die Prüfung bestanden!"));
|
QMessageBox::information(this, tr("Ergebnis"), tr("<b>Herzlichen Glückwunsch!</b><p>Sie haben die Prüfung bestanden!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bSaveStat)
|
if (bSaveStat)
|
||||||
{ // Prüfungsstatistik speichern
|
{ // Prüfungsstatistik speichern
|
||||||
CExamStat es(m_exam);
|
CExamStat es(m_exam);
|
||||||
es.setSecs(uSecs);
|
es.setSecs(uSecs);
|
||||||
es.setQuestions(m_listQuestion, m_listAnswerMask);
|
es.setQuestions(m_listQuestion, m_listAnswerMask);
|
||||||
|
|
|
@ -85,7 +85,7 @@ void CDlgExamSelect::on_buttonBox_accepted()
|
||||||
{
|
{
|
||||||
if (m_iSelectedExam == -1)
|
if (m_iSelectedExam == -1)
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, tr("Information"), tr("Bitte eine Prüfung auswählen!"));
|
QMessageBox::information(this, tr("Information"), tr("Bitte eine Prüfung auswählen!"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
accept();
|
accept();
|
||||||
|
|
|
@ -34,7 +34,7 @@ CDlgExamStatistic::CDlgExamStatistic(QWidget *pParent) : QDialog(pParent)
|
||||||
twExamStat->headerItem()->setText(1, "Ergebnis");
|
twExamStat->headerItem()->setText(1, "Ergebnis");
|
||||||
twExamStat->headerItem()->setText(2, "Fehler");
|
twExamStat->headerItem()->setText(2, "Fehler");
|
||||||
twExamStat->headerItem()->setText(3, "Dauer");
|
twExamStat->headerItem()->setText(3, "Dauer");
|
||||||
twExamStat->headerItem()->setText(4, "Ø pro Frage");
|
twExamStat->headerItem()->setText(4, "Ø pro Frage");
|
||||||
|
|
||||||
twExamStat->header()->resizeSection(0, 130);
|
twExamStat->header()->resizeSection(0, 130);
|
||||||
twExamStat->header()->resizeSection(2, 50);
|
twExamStat->header()->resizeSection(2, 50);
|
||||||
|
@ -47,7 +47,7 @@ void CDlgExamStatistic::go (CCatalog *pCatalog)
|
||||||
|
|
||||||
if (pCatalog->countExamStat() == 0)
|
if (pCatalog->countExamStat() == 0)
|
||||||
{
|
{
|
||||||
QMessageBox::information(parentWidget(), tr("Information"), tr("Es wurden bisher noch keine Prüfungen durchgeführt."));
|
QMessageBox::information(parentWidget(), tr("Information"), tr("Es wurden bisher noch keine Prüfungen durchgeführt."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
12
dlglearn.cpp
12
dlglearn.cpp
|
@ -177,7 +177,7 @@ CQuestion *p = 0;
|
||||||
|
|
||||||
if (m_bAssistantEnable && m_pChapter->hasRecommendedQuestions())
|
if (m_bAssistantEnable && m_pChapter->hasRecommendedQuestions())
|
||||||
{
|
{
|
||||||
// if (afu_random (0, 99) >= 0) // hier kann ggf. das Verhältnis zwischen RecommendedQuestion und Zufalls-Question ausgewählt werden
|
// if (afu_random (0, 99) >= 0) // hier kann ggf. das Verhältnis zwischen RecommendedQuestion und Zufalls-Question ausgewählt werden
|
||||||
// {
|
// {
|
||||||
p = findNextTargetQuestion();
|
p = findNextTargetQuestion();
|
||||||
// Wichtig: p kann hier immernoch 0 sein! Dies bedeutet, dass keine passende Frage im TargetPool gefunden wurde.
|
// Wichtig: p kann hier immernoch 0 sein! Dies bedeutet, dass keine passende Frage im TargetPool gefunden wurde.
|
||||||
|
@ -202,7 +202,7 @@ unsigned uRnd=0;
|
||||||
{
|
{
|
||||||
if (list.at(0) == m_pQuestion)
|
if (list.at(0) == m_pQuestion)
|
||||||
// Regel: Niemals die gleiche Frage mehrfach hintereinander
|
// Regel: Niemals die gleiche Frage mehrfach hintereinander
|
||||||
// -> kann hier nicht erfüllt werden -> 0 zurückgeben -> hole Frage aus allg. Pool (siehe findNextQuestion)
|
// -> kann hier nicht erfüllt werden -> 0 zurückgeben -> hole Frage aus allg. Pool (siehe findNextQuestion)
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return list.at(0);
|
return list.at(0);
|
||||||
|
@ -257,7 +257,7 @@ unsigned uRndMax = 0;
|
||||||
|
|
||||||
do /* diese Schleife verhindert, dass eine Frage zweimal hintereinander kommt */
|
do /* diese Schleife verhindert, dass eine Frage zweimal hintereinander kommt */
|
||||||
{
|
{
|
||||||
do /* diese Schleife wählt die Abfragehäufigkeit aus */
|
do /* diese Schleife wählt die Abfragehäufigkeit aus */
|
||||||
{
|
{
|
||||||
uRnd = afu_random (1, uRndMax);
|
uRnd = afu_random (1, uRndMax);
|
||||||
uLevel = LEVEL_MAX;
|
uLevel = LEVEL_MAX;
|
||||||
|
@ -268,7 +268,7 @@ unsigned uRndMax = 0;
|
||||||
}
|
}
|
||||||
while (uCountQuestion[uLevel] == 0);
|
while (uCountQuestion[uLevel] == 0);
|
||||||
|
|
||||||
// Zufällige Frage bestimmen
|
// Zufällige Frage bestimmen
|
||||||
uRnd = afu_random (1, uCountQuestion[uLevel]);
|
uRnd = afu_random (1, uCountQuestion[uLevel]);
|
||||||
for (i=0; i<m_listQuestion.size()-1; i++)
|
for (i=0; i<m_listQuestion.size()-1; i++)
|
||||||
if (m_listQuestion[i]->level() == uLevel && --uRnd == 0) break;
|
if (m_listQuestion[i]->level() == uLevel && --uRnd == 0) break;
|
||||||
|
@ -284,7 +284,7 @@ QString str, strCheat;
|
||||||
|
|
||||||
if (m_listQuestion.size() == 0)
|
if (m_listQuestion.size() == 0)
|
||||||
{
|
{
|
||||||
QMessageBox::critical (this, "Fehler", "Es gibt keine Fragen, die gelernt werden könnten!");
|
QMessageBox::critical (this, "Fehler", "Es gibt keine Fragen, die gelernt werden könnten!");
|
||||||
accept();
|
accept();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -367,7 +367,7 @@ unsigned uAnswerMask = 1<<i;
|
||||||
pbAssistant->setToolTip(tr("Lern-Assistent aufrufen"));
|
pbAssistant->setToolTip(tr("Lern-Assistent aufrufen"));
|
||||||
pbIgnore->setToolTip(tr("Meldung ignorieren, dieses Kapitel weiterlernen"));
|
pbIgnore->setToolTip(tr("Meldung ignorieren, dieses Kapitel weiterlernen"));
|
||||||
pbExit->setToolTip(tr("Lernmodus beenden"));
|
pbExit->setToolTip(tr("Lernmodus beenden"));
|
||||||
msgBox.setText(tr("<b>Herzlichen Glückwunsch!</b><p>Sie haben das heutige Lernziel für dieses Kapitel erreicht.<br>Bitte folgen Sie den weiteren Empfehlungen des Lernassistents."));
|
msgBox.setText(tr("<b>Herzlichen Glückwunsch!</b><p>Sie haben das heutige Lernziel für dieses Kapitel erreicht.<br>Bitte folgen Sie den weiteren Empfehlungen des Lernassistents."));
|
||||||
msgBox.setWindowTitle(tr("Ziel erreicht"));
|
msgBox.setWindowTitle(tr("Ziel erreicht"));
|
||||||
|
|
||||||
msgBox.exec();
|
msgBox.exec();
|
||||||
|
|
|
@ -97,7 +97,7 @@ void CDlgLearnAssistant::on_buttonBox_accepted()
|
||||||
QModelIndexList list = tvChapters->selectionModel()->selectedIndexes();
|
QModelIndexList list = tvChapters->selectionModel()->selectedIndexes();
|
||||||
if (rbList->isChecked() && list.isEmpty())
|
if (rbList->isChecked() && list.isEmpty())
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, tr("Information"), tr("Bitte markieren Sie in der Liste ein Kapitel, das Sie lernen möchten!"));
|
QMessageBox::information(this, tr("Information"), tr("Bitte markieren Sie in der Liste ein Kapitel, das Sie lernen möchten!"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
accept();
|
accept();
|
||||||
|
|
8
exam.cpp
8
exam.cpp
|
@ -87,7 +87,7 @@ CQuestion *q=0;
|
||||||
if (listSelected.size() < questionCount())
|
if (listSelected.size() < questionCount())
|
||||||
{
|
{
|
||||||
throw CError (
|
throw CError (
|
||||||
QString("Für den regulären Ausdruck '%1' wurden nur %2 Fragen gefunden - zu wenig, um daraus %3 Fragen für die Prüfung auszuwählen.")
|
QString("Für den regulären Ausdruck '%1' wurden nur %2 Fragen gefunden - zu wenig, um daraus %3 Fragen für die Prüfung auszuwählen.")
|
||||||
.arg(m_strRegExp).arg(listSelected.size()).arg(questionCount()), __PRETTY_FUNCTION__, __FILE__, __LINE__);
|
.arg(m_strRegExp).arg(listSelected.size()).arg(questionCount()), __PRETTY_FUNCTION__, __FILE__, __LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ QList<CQuestion*> CExam::createQuestionPool(const QList<CQuestion*>& listAllQues
|
||||||
QList<CQuestion*> listRet;
|
QList<CQuestion*> listRet;
|
||||||
|
|
||||||
#ifdef DEBUGMSG
|
#ifdef DEBUGMSG
|
||||||
qDebug ("Erzeuge Prüfungsfragen für '%s'", qPrintable(name()));
|
qDebug ("Erzeuge Prüfungsfragen für '%s'", qPrintable(name()));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -193,12 +193,12 @@ QList<CQuestion*> listRet;
|
||||||
}
|
}
|
||||||
catch (CError e)
|
catch (CError e)
|
||||||
{
|
{
|
||||||
e.preText(QString("Konnte Prüfung '%1' nicht erzeugen.").arg(name()));
|
e.preText(QString("Konnte Prüfung '%1' nicht erzeugen.").arg(name()));
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUGMSG
|
#ifdef DEBUGMSG
|
||||||
qDebug ("Insg. %i Prüfungsfragen ausgewählt", listRet.size());
|
qDebug ("Insg. %i Prüfungsfragen ausgewählt", listRet.size());
|
||||||
for (int i=0; i<listRet.size(); i++)
|
for (int i=0; i<listRet.size(); i++)
|
||||||
qDebug ("\t%i. Frage ID '%s'", i+1, qPrintable(listRet.at(i)->id()));
|
qDebug ("\t%i. Frage ID '%s'", i+1, qPrintable(listRet.at(i)->id()));
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -137,11 +137,11 @@ void CMainWindow::setCatalog (CCatalog *pCatalog)
|
||||||
QDate d = m_pCatalog->validUntil();
|
QDate d = m_pCatalog->validUntil();
|
||||||
if (d.isValid() && d < QDate::currentDate())
|
if (d.isValid() && d < QDate::currentDate())
|
||||||
{
|
{
|
||||||
QString str = tr("<b>Dieser Fragenkatalog ist seit dem %1 nicht mehr gültig!</b>").arg(d.toString(Qt::LocalDate));
|
QString str = tr("<b>Dieser Fragenkatalog ist seit dem %1 nicht mehr gültig!</b>").arg(d.toString(Qt::LocalDate));
|
||||||
if (!m_pCatalog->publisher().isEmpty())
|
if (!m_pCatalog->publisher().isEmpty())
|
||||||
str += tr("<p>Weitere Informationen zur Gültigkeit erhalten Sie vom Herausgeber:<br>")+m_pCatalog->publisher();
|
str += tr("<p>Weitere Informationen zur Gültigkeit erhalten Sie vom Herausgeber:<br>")+m_pCatalog->publisher();
|
||||||
if (!m_pCatalog->contact().isEmpty())
|
if (!m_pCatalog->contact().isEmpty())
|
||||||
str += tr("<p>Einen aktuellen Fragenkatalog für den AFUTrainer erhalten Sie evt. von:<br>")+m_pCatalog->contact();
|
str += tr("<p>Einen aktuellen Fragenkatalog für den AFUTrainer erhalten Sie evt. von:<br>")+m_pCatalog->contact();
|
||||||
|
|
||||||
QMessageBox::warning(this, tr("Warnung"), str);
|
QMessageBox::warning(this, tr("Warnung"), str);
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,7 @@ QString str;
|
||||||
if (m_pCatalog == 0) return false;
|
if (m_pCatalog == 0) return false;
|
||||||
str = m_pCatalog->checkForErrors();
|
str = m_pCatalog->checkForErrors();
|
||||||
if (str.isEmpty()) return false;
|
if (str.isEmpty()) return false;
|
||||||
QMessageBox::critical(this, tr("Fehler im Fragenkatalog"), tr("Die gewünschte Funktion kann nicht ausgeführt werden, da der Fragenkatalog folgende Fehler enthält:<p>")+ str);
|
QMessageBox::critical(this, tr("Fehler im Fragenkatalog"), tr("Die gewünschte Funktion kann nicht ausgeführt werden, da der Fragenkatalog folgende Fehler enthält:<p>")+ str);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ void CMainWindow::on_actFileOpen_triggered()
|
||||||
{
|
{
|
||||||
QString strFileName;
|
QString strFileName;
|
||||||
if (!checkForHomeDir()) return;
|
if (!checkForHomeDir()) return;
|
||||||
strFileName = QFileDialog::getOpenFileName(this, tr("Öffne Fragenkatalog"), QString(), tr("Amateur Radio Questionary Data Format (*.aqz)\nAlle Dateien (*.*)"));
|
strFileName = QFileDialog::getOpenFileName(this, tr("Öffne Fragenkatalog"), QString(), tr("Amateur Radio Questionary Data Format (*.aqz)\nAlle Dateien (*.*)"));
|
||||||
onOpenFile(strFileName);
|
onOpenFile(strFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ void CMainWindow::on_actFileInformation_triggered()
|
||||||
CDlgInformation dlg(this);
|
CDlgInformation dlg(this);
|
||||||
if (!m_pCatalog)
|
if (!m_pCatalog)
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, tr("Information"), tr("Kein Fragenkatalog geladen, zu dem Informationen angezeigt werden könnten."));
|
QMessageBox::information(this, tr("Information"), tr("Kein Fragenkatalog geladen, zu dem Informationen angezeigt werden könnten."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dlg.setup(m_pCatalog);
|
dlg.setup(m_pCatalog);
|
||||||
|
@ -270,13 +270,13 @@ enum LastAdded {None, Chapter, Question, Answer};
|
||||||
LastAdded la=None;
|
LastAdded la=None;
|
||||||
CCatalog *pCatalog=0;
|
CCatalog *pCatalog=0;
|
||||||
|
|
||||||
strFileName = QFileDialog::getOpenFileName(this, tr("Öffne Datei zum Fragenkatalog-Import"), QString("D:/projekte/afutrainer/fragenkataloge/2007-02/Klasse A Technik/"), tr("TXT-Dateien (*.txt)\nAlle Dateien (*.*)"));
|
strFileName = QFileDialog::getOpenFileName(this, tr("Öffne Datei zum Fragenkatalog-Import"), QString("D:/projekte/afutrainer/fragenkataloge/2007-02/Klasse A Technik/"), tr("TXT-Dateien (*.txt)\nAlle Dateien (*.*)"));
|
||||||
if (strFileName.isEmpty()) return;
|
if (strFileName.isEmpty()) return;
|
||||||
|
|
||||||
QFile file(strFileName);
|
QFile file(strFileName);
|
||||||
if(!file.open(QIODevice::ReadOnly))
|
if(!file.open(QIODevice::ReadOnly))
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, tr("Fehler"), tr("Konnte Datei '%1' nicht zum Lesen öffnen!").arg(strFileName));
|
QMessageBox::information(this, tr("Fehler"), tr("Konnte Datei '%1' nicht zum Lesen öffnen!").arg(strFileName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QTextStream in(&file);
|
QTextStream in(&file);
|
||||||
|
@ -285,7 +285,7 @@ strFileName = QFileDialog::getOpenFileName(this, tr("
|
||||||
while (!in.atEnd())
|
while (!in.atEnd())
|
||||||
{
|
{
|
||||||
strLine = in.readLine().trimmed();
|
strLine = in.readLine().trimmed();
|
||||||
if (strLine.isEmpty() || strLine.contains(QRegExp("^Prüfungsfragen")) || strLine.contains("^Bundesnetzagentur"))
|
if (strLine.isEmpty() || strLine.contains(QRegExp("^Prüfungsfragen")) || strLine.contains("^Bundesnetzagentur"))
|
||||||
{
|
{
|
||||||
la = None;
|
la = None;
|
||||||
}
|
}
|
||||||
|
@ -370,7 +370,7 @@ strFileName = QFileDialog::getOpenFileName(this, tr("
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bilder hinzufügen
|
// Bilder hinzufügen
|
||||||
QList<CQuestion*> listPool = pCatalog->questionPool();
|
QList<CQuestion*> listPool = pCatalog->questionPool();
|
||||||
QDir dirPath(strFileName.left(strFileName.lastIndexOf('/')));
|
QDir dirPath(strFileName.left(strFileName.lastIndexOf('/')));
|
||||||
for (int i=0; i<listPool.size(); i++)
|
for (int i=0; i<listPool.size(); i++)
|
||||||
|
@ -380,7 +380,7 @@ strFileName = QFileDialog::getOpenFileName(this, tr("
|
||||||
for (int j=0; j<strlFiles.size(); j++)
|
for (int j=0; j<strlFiles.size(); j++)
|
||||||
{
|
{
|
||||||
QString strImgFile = strlFiles.at(j).toLower();
|
QString strImgFile = strlFiles.at(j).toLower();
|
||||||
// Überprüfen, ob Verweis
|
// Überprüfen, ob Verweis
|
||||||
if (strImgFile.contains("_"))
|
if (strImgFile.contains("_"))
|
||||||
{ // Ja, Verweis
|
{ // Ja, Verweis
|
||||||
QString strImgFile1 = strImgFile.left(strImgFile.indexOf('_'));
|
QString strImgFile1 = strImgFile.left(strImgFile.indexOf('_'));
|
||||||
|
@ -438,18 +438,18 @@ strFileName = QFileDialog::getOpenFileName(this, tr("
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qDebug ("Konnte Grafik %s nicht zuordnen.\n\tMögliche Gründe: Frage oder Antwort existiert nicht. Dateiname der Grafik falsch geschrieben.", qPrintable(strImgFile));
|
qDebug ("Konnte Grafik %s nicht zuordnen.\n\tMögliche Gründe: Frage oder Antwort existiert nicht. Dateiname der Grafik falsch geschrieben.", qPrintable(strImgFile));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pCatalog->setName("Importierter Katalog von " + strFileName);
|
pCatalog->setName("Importierter Katalog von " + strFileName);
|
||||||
QMessageBox::information(this, tr("Information"),
|
QMessageBox::information(this, tr("Information"),
|
||||||
"Bitte Debug-Ausgabe überprüfen, ob alle Grafik-Dateien zugeordnet wurden!<p>"
|
"Bitte Debug-Ausgabe überprüfen, ob alle Grafik-Dateien zugeordnet wurden!<p>"
|
||||||
"Bitte überprüfen, ob alle Kapitel korrekt erkannt wurden. "
|
"Bitte überprüfen, ob alle Kapitel korrekt erkannt wurden. "
|
||||||
"Wenn nicht, muss die TXT-Datei von Hand kontrolliert werden!<hr>"+strChapter);
|
"Wenn nicht, muss die TXT-Datei von Hand kontrolliert werden!<hr>"+strChapter);
|
||||||
|
|
||||||
qDebug("Weitere Vorgehensweise:\n\t1. Fragenkatalog als XML-Datei abspeichern.\n\t2. ggf. Korrekturen in der XML-Datei vornehmen\n\t3. XML-Datei und alle Grafik-Dateien in ein ZIP-Archiv packen und die Dateiänderung auf .atc ändern.\n\tFertig!");
|
qDebug("Weitere Vorgehensweise:\n\t1. Fragenkatalog als XML-Datei abspeichern.\n\t2. ggf. Korrekturen in der XML-Datei vornehmen\n\t3. XML-Datei und alle Grafik-Dateien in ein ZIP-Archiv packen und die Dateiänderung auf .atc ändern.\n\tFertig!");
|
||||||
setCatalog (pCatalog);
|
setCatalog (pCatalog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -481,13 +481,13 @@ enum LastAdded {None, Chapter, Question, Answer};
|
||||||
LastAdded la=None;
|
LastAdded la=None;
|
||||||
CCatalog *pCatalog=0;
|
CCatalog *pCatalog=0;
|
||||||
|
|
||||||
strFileName = QFileDialog::getOpenFileName(this, tr("Öffne Datei zum Fragenkatalog-Import"), QString("D:/projekte/afutrainer/fragenkataloge/US/"), tr("TXT-Dateien (*.txt)\nAlle Dateien (*.*)"));
|
strFileName = QFileDialog::getOpenFileName(this, tr("Öffne Datei zum Fragenkatalog-Import"), QString("D:/projekte/afutrainer/fragenkataloge/US/"), tr("TXT-Dateien (*.txt)\nAlle Dateien (*.*)"));
|
||||||
if (strFileName.isEmpty()) return;
|
if (strFileName.isEmpty()) return;
|
||||||
|
|
||||||
QFile file(strFileName);
|
QFile file(strFileName);
|
||||||
if(!file.open(QIODevice::ReadOnly))
|
if(!file.open(QIODevice::ReadOnly))
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, tr("Fehler"), tr("Konnte Datei '%1' nicht zum Lesen öffnen!").arg(strFileName));
|
QMessageBox::information(this, tr("Fehler"), tr("Konnte Datei '%1' nicht zum Lesen öffnen!").arg(strFileName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QTextStream in(&file);
|
QTextStream in(&file);
|
||||||
|
@ -633,10 +633,10 @@ strFileName = QFileDialog::getOpenFileName(this, tr("
|
||||||
|
|
||||||
pCatalog->setName("Importierter Katalog von " + strFileName);
|
pCatalog->setName("Importierter Katalog von " + strFileName);
|
||||||
QMessageBox::information(this, tr("Information"),
|
QMessageBox::information(this, tr("Information"),
|
||||||
"Bitte überprüfen, ob alle Kapitel korrekt erkannt wurden. "
|
"Bitte überprüfen, ob alle Kapitel korrekt erkannt wurden. "
|
||||||
"Wenn nicht, muss die TXT-Datei von Hand kontrolliert werden!<hr>"+strChapter);
|
"Wenn nicht, muss die TXT-Datei von Hand kontrolliert werden!<hr>"+strChapter);
|
||||||
|
|
||||||
qDebug("Weitere Vorgehensweise:\n\t1. Fragenkatalog als XML-Datei abspeichern.\n\t2. ggf. Korrekturen in der XML-Datei vornehmen\n\t3. XML-Datei und alle Grafik-Dateien in ein ZIP-Archiv packen und die Dateiänderung auf .atc ändern.\n\tFertig!");
|
qDebug("Weitere Vorgehensweise:\n\t1. Fragenkatalog als XML-Datei abspeichern.\n\t2. ggf. Korrekturen in der XML-Datei vornehmen\n\t3. XML-Datei und alle Grafik-Dateien in ein ZIP-Archiv packen und die Dateiänderung auf .atc ändern.\n\tFertig!");
|
||||||
setCatalog (pCatalog);
|
setCatalog (pCatalog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -674,7 +674,7 @@ QModelIndexList list = m_pViewChapter->selectionModel()->selectedIndexes();
|
||||||
if (checkForErrors()) return;
|
if (checkForErrors()) return;
|
||||||
if (list.isEmpty())
|
if (list.isEmpty())
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, tr("Information"), tr("Bitte ein Kapitel zum Lernen auswählen!"));
|
QMessageBox::information(this, tr("Information"), tr("Bitte ein Kapitel zum Lernen auswählen!"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CChapter *p = (CChapter*)list.first().internalPointer();
|
CChapter *p = (CChapter*)list.first().internalPointer();
|
||||||
|
@ -707,7 +707,7 @@ CExam exam;
|
||||||
iCount = m_pCatalog->countExam();
|
iCount = m_pCatalog->countExam();
|
||||||
if (iCount == 0)
|
if (iCount == 0)
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, tr("Information"), tr("Dieser Fragenkatalog enthält keine Prüfungen."));
|
QMessageBox::information(this, tr("Information"), tr("Dieser Fragenkatalog enthält keine Prüfungen."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (iCount == 1)
|
else if (iCount == 1)
|
||||||
|
@ -734,7 +734,7 @@ CDlgExamStatistic dlg(this);
|
||||||
if (checkForErrors()) return;
|
if (checkForErrors()) return;
|
||||||
if (m_pCatalog->countExam() == 0)
|
if (m_pCatalog->countExam() == 0)
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, tr("Information"), tr("Dieser Fragenkatalog enthält keine Prüfungen."));
|
QMessageBox::information(this, tr("Information"), tr("Dieser Fragenkatalog enthält keine Prüfungen."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dlg.go(m_pCatalog);
|
dlg.go(m_pCatalog);
|
||||||
|
@ -779,7 +779,7 @@ QString str = tr("<b>AFUTrainer Version 3.0</b><br>"
|
||||||
"along with this program; if not, write to the "
|
"along with this program; if not, write to the "
|
||||||
"Free Software Foundation, Inc., "
|
"Free Software Foundation, Inc., "
|
||||||
"59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.");
|
"59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.");
|
||||||
QMessageBox::about(this,tr("Über..."), str);
|
QMessageBox::about(this,tr("Über..."), str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMainWindow::on_actHelpAboutQt_triggered()
|
void CMainWindow::on_actHelpAboutQt_triggered()
|
||||||
|
|
22
question.cpp
22
question.cpp
|
@ -153,7 +153,7 @@ QString str, strHints;
|
||||||
str += " " + repeatDateTextExtended();
|
str += " " + repeatDateTextExtended();
|
||||||
if (!m_listAnswerClicked.isEmpty())
|
if (!m_listAnswerClicked.isEmpty())
|
||||||
{
|
{
|
||||||
str += "<br><br><table><tr><th>Datum/Uhrzeit </th><th>Antwort </th><th>Richtig? </th><th>Benötigte Zeit</th></tr>";
|
str += "<br><br><table><tr><th>Datum/Uhrzeit </th><th>Antwort </th><th>Richtig? </th><th>Benötigte Zeit</th></tr>";
|
||||||
for (int i=0; i<m_listAnswerClicked.size(); i++)
|
for (int i=0; i<m_listAnswerClicked.size(); i++)
|
||||||
{
|
{
|
||||||
CAnswerClicked ac = m_listAnswerClicked.at(i);
|
CAnswerClicked ac = m_listAnswerClicked.at(i);
|
||||||
|
@ -337,17 +337,17 @@ int iAnswerCount = 0;
|
||||||
|
|
||||||
iAnswerCount = countAnswer();
|
iAnswerCount = countAnswer();
|
||||||
if (iAnswerCount != 4)
|
if (iAnswerCount != 4)
|
||||||
str += QObject::tr("Die Frage %1 hat nicht exakt vier Antworten, sondern %2 Stück.").arg(id()).arg(iAnswerCount) + "<br>";
|
str += QObject::tr("Die Frage %1 hat nicht exakt vier Antworten, sondern %2 Stück.").arg(id()).arg(iAnswerCount) + "<br>";
|
||||||
iAnswerCount = countCorrectAnswer();
|
iAnswerCount = countCorrectAnswer();
|
||||||
if (iAnswerCount != 1)
|
if (iAnswerCount != 1)
|
||||||
str += QObject::tr("Die Frage %1 hat nicht exakt eine richtige Antwort, sondern %2 Stück.").arg(id()).arg(iAnswerCount) + "<br>";
|
str += QObject::tr("Die Frage %1 hat nicht exakt eine richtige Antwort, sondern %2 Stück.").arg(id()).arg(iAnswerCount) + "<br>";
|
||||||
for (int j=0; j<countAnswer(); j++)
|
for (int j=0; j<countAnswer(); j++)
|
||||||
{
|
{
|
||||||
if (answerAt(j).text().isEmpty())
|
if (answerAt(j).text().isEmpty())
|
||||||
str += QObject::tr("Die Antwort %1 der Frage %2 enthält keinen Text.").arg(QChar('A' + j)).arg(id()) + "<br>";
|
str += QObject::tr("Die Antwort %1 der Frage %2 enthält keinen Text.").arg(QChar('A' + j)).arg(id()) + "<br>";
|
||||||
}
|
}
|
||||||
if (text().isEmpty())
|
if (text().isEmpty())
|
||||||
str += QObject::tr("Die Frage %1 enthält keinen Text.").arg(id()) + "<br>";
|
str += QObject::tr("Die Frage %1 enthält keinen Text.").arg(id()) + "<br>";
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
@ -415,7 +415,7 @@ QString CQuestion::correctionText(const unsigned uAnswerMask)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return QObject::tr("Ihre Antwort %1 war leider falsch. Die richtige Antwort wäre %2 gewesen.")
|
return QObject::tr("Ihre Antwort %1 war leider falsch. Die richtige Antwort wäre %2 gewesen.")
|
||||||
.arg(answerMaskToString(uAnswerMask)).arg(answerMaskToString(correctAnswerMask()));
|
.arg(answerMaskToString(uAnswerMask)).arg(answerMaskToString(correctAnswerMask()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -488,7 +488,7 @@ QString CQuestion::levelText(const unsigned uLevel)
|
||||||
case LEVEL_VERYOFTEN:
|
case LEVEL_VERYOFTEN:
|
||||||
return QObject::tr("Ahnungslos");
|
return QObject::tr("Ahnungslos");
|
||||||
case LEVEL_OFTEN:
|
case LEVEL_OFTEN:
|
||||||
return QObject::tr("Anfänger");
|
return QObject::tr("Anfänger");
|
||||||
case LEVEL_NORMAL:
|
case LEVEL_NORMAL:
|
||||||
return QObject::tr("Fortgeschritten");
|
return QObject::tr("Fortgeschritten");
|
||||||
case LEVEL_RARE:
|
case LEVEL_RARE:
|
||||||
|
@ -553,16 +553,16 @@ unsigned uLevelOld=0, uLevelNew=0;
|
||||||
uLevelNew = levelAtEndOfDay(dtLastClicked.date());
|
uLevelNew = levelAtEndOfDay(dtLastClicked.date());
|
||||||
|
|
||||||
if (uLevelOld == uLevelNew)
|
if (uLevelOld == uLevelNew)
|
||||||
strRet += tr("Die Einstufung des Lernfortschritts änderte sich an diesem Tag nicht.");
|
strRet += tr("Die Einstufung des Lernfortschritts änderte sich an diesem Tag nicht.");
|
||||||
else
|
else
|
||||||
strRet += tr("Der Lernfortschritt änderte sich an diesem Tag von '%1' auf '%2'.").arg(levelText(uLevelOld), levelText(uLevelNew));
|
strRet += tr("Der Lernfortschritt änderte sich an diesem Tag von '%1' auf '%2'.").arg(levelText(uLevelOld), levelText(uLevelNew));
|
||||||
|
|
||||||
return strRet;
|
return strRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\return Datum, an dem die Frage wiederholt werden soll.
|
\return Datum, an dem die Frage wiederholt werden soll.
|
||||||
Gibt es kein solches Datum, so wird ein ungültiges Datum (QDate::isValid()) zurückgegeben.
|
Gibt es kein solches Datum, so wird ein ungültiges Datum (QDate::isValid()) zurückgegeben.
|
||||||
Hinweis: Das Datum kann auch in der Vergangenheit liegen!
|
Hinweis: Das Datum kann auch in der Vergangenheit liegen!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -699,7 +699,7 @@ bool CQuestion::isLearningNew() const
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\return true: Die Frage wurde gestern oder früher zum ersten Mal beantwortet
|
\return true: Die Frage wurde gestern oder früher zum ersten Mal beantwortet
|
||||||
*/
|
*/
|
||||||
bool CQuestion::isKnownQuestion() const
|
bool CQuestion::isKnownQuestion() const
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue