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;
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -234,7 +234,7 @@ QFile file (strFileName);
|
|||
if (strFileName.isEmpty()) return false;
|
||||
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;
|
||||
}
|
||||
QTextStream out(&file);
|
||||
|
@ -315,7 +315,7 @@ int iErrLine, iErrCol;
|
|||
if (!file.exists()) return true;
|
||||
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;
|
||||
}
|
||||
QTextStream in (&file);
|
||||
|
@ -375,7 +375,7 @@ QFile file (strFileName);
|
|||
|
||||
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;
|
||||
}
|
||||
QTextStream out(&file);
|
||||
|
|
|
@ -67,14 +67,14 @@ QVariant CCatalogModel::headerData (int section, Qt::Orientation orientation, in
|
|||
else if (section == COL_QUESTION)
|
||||
return tr("Fragen");
|
||||
else if (section == COL_AVG)
|
||||
return tr("Ø");
|
||||
return tr("Ø");
|
||||
else if (section == COL_ASSIST)
|
||||
return tr("Lernassistent");
|
||||
}
|
||||
else if (role == Qt::ToolTipRole)
|
||||
{
|
||||
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)
|
||||
return tr("Anzahl d. Fragen inkl. Unterkapitel");
|
||||
else if (section == COL_AVG)
|
||||
|
|
42
chapter.cpp
42
chapter.cpp
|
@ -275,14 +275,14 @@ void CChapter::updateStatisticCount()
|
|||
|
||||
return false;
|
||||
*/
|
||||
// Alle Statistiken zurücksetzen
|
||||
// Alle Statistiken zurücksetzen
|
||||
m_uNeverAskedCount = 0;
|
||||
m_bHasLearningNew = false;
|
||||
m_bHasKnownQuestions = false;
|
||||
m_bHasKnownQuestionsRepeatToday = false;
|
||||
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++)
|
||||
{
|
||||
CChapter *p = m_listChapter.at(i);
|
||||
|
@ -295,7 +295,7 @@ void CChapter::updateStatisticCount()
|
|||
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++)
|
||||
{
|
||||
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()
|
||||
{
|
||||
|
@ -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.
|
||||
\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!
|
||||
*/
|
||||
QDate CChapter::repeatDate() const
|
||||
|
@ -392,7 +392,7 @@ QList<CQuestion*> list = questionPool();
|
|||
/*!
|
||||
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
|
||||
*/
|
||||
|
@ -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
|
||||
*/
|
||||
void CChapter::updateRecommendation()
|
||||
|
@ -525,7 +525,7 @@ unsigned uDays=0;
|
|||
case RecommendationSubChapter:
|
||||
return tr("Zuerst Unterkapitel lernen");
|
||||
case RecommendationParentChapter:
|
||||
return tr("Übergeordnetes Kapitel lernen");
|
||||
return tr("Übergeordnetes Kapitel lernen");
|
||||
case RecommendationLearnNew:
|
||||
return tr("Neue Fragen lernen");
|
||||
case RecommendationRepeatToday:
|
||||
|
@ -592,12 +592,12 @@ QString str;
|
|||
str = tr("Keine Lernempfehlung");
|
||||
break;
|
||||
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;
|
||||
case RecommendationParentChapter:
|
||||
if (levelAvgRounded() >= LEVEL_NORMAL)
|
||||
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("Sie können die Fragen dieses Kapitels gut beantworten.\n");
|
||||
str += tr("Es wird empfohlen, alle Fragen des übergeordneten Kapitels gemischt zusammen zu lernen.");
|
||||
break;
|
||||
case RecommendationLearnNew:
|
||||
if (!isRecommendedNow(pCatalog))
|
||||
|
@ -606,23 +606,23 @@ QString str;
|
|||
str = tr("Bitte beantworten Sie alle neuen Fragen mindestens einmal richtig.");
|
||||
break;
|
||||
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;
|
||||
case RecommendationRepeatLater:
|
||||
uDays = QDate::currentDate().daysTo(m_recomRepeatDate);
|
||||
if (uDays > 1)
|
||||
str = tr("Die Wiederholung dieses Kapitels ist erst in %1 Tagen geplant.\n").arg(uDays);
|
||||
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)
|
||||
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)
|
||||
str += tr("Bitte lernen Sie zuerst Kapitel mit neuen Fragen.");
|
||||
break;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -634,14 +634,14 @@ QString str;
|
|||
if (m_recom2 == RecommendationLearnNew || (m_recom == RecommendationLearnNew && !isRecommendedNow(pCatalog)))
|
||||
{
|
||||
//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)
|
||||
{
|
||||
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
|
||||
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;
|
||||
|
@ -676,7 +676,7 @@ QString CChapter::recommendationIconName(const CCatalog *pCatalog) const
|
|||
|
||||
/*!
|
||||
\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
|
||||
|
@ -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
|
||||
{
|
||||
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)
|
||||
return tr("Fragen");
|
||||
else if (section == COL_AVG)
|
||||
return tr("Ø");
|
||||
return tr("Ø");
|
||||
else if (section == COL_ASSIST)
|
||||
return tr("Lernassistent");
|
||||
}
|
||||
else if (role == Qt::ToolTipRole)
|
||||
{
|
||||
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)
|
||||
return tr("Anzahl d. Fragen inkl. Unterkapitel");
|
||||
else if (section == COL_AVG)
|
||||
|
|
12
dlgexam.cpp
12
dlgexam.cpp
|
@ -71,7 +71,7 @@ bool CDlgExam::setup (const CExam& exam)
|
|||
|
||||
void CDlgExam::init()
|
||||
{
|
||||
// Zeitbalken & Zeitüberwachung
|
||||
// Zeitbalken & Zeitüberwachung
|
||||
m_timer.setInterval(1000);
|
||||
m_timer.start();
|
||||
m_dtStart = QDateTime::currentDateTime();
|
||||
|
@ -141,7 +141,7 @@ unsigned uSecs = m_dtStart.secsTo(dt);
|
|||
{
|
||||
m_bTimeout = true;
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
@ -273,23 +273,23 @@ unsigned uSecs = m_dtStart.secsTo(dt);
|
|||
bPassed = false;
|
||||
bSaveStat = false;
|
||||
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())
|
||||
{
|
||||
bPassed = false;
|
||||
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
|
||||
{
|
||||
bPassed = true;
|
||||
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)
|
||||
{ // Prüfungsstatistik speichern
|
||||
{ // Prüfungsstatistik speichern
|
||||
CExamStat es(m_exam);
|
||||
es.setSecs(uSecs);
|
||||
es.setQuestions(m_listQuestion, m_listAnswerMask);
|
||||
|
|
|
@ -85,7 +85,7 @@ void CDlgExamSelect::on_buttonBox_accepted()
|
|||
{
|
||||
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;
|
||||
}
|
||||
accept();
|
||||
|
|
|
@ -34,7 +34,7 @@ CDlgExamStatistic::CDlgExamStatistic(QWidget *pParent) : QDialog(pParent)
|
|||
twExamStat->headerItem()->setText(1, "Ergebnis");
|
||||
twExamStat->headerItem()->setText(2, "Fehler");
|
||||
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(2, 50);
|
||||
|
@ -47,7 +47,7 @@ void CDlgExamStatistic::go (CCatalog *pCatalog)
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
12
dlglearn.cpp
12
dlglearn.cpp
|
@ -177,7 +177,7 @@ CQuestion *p = 0;
|
|||
|
||||
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();
|
||||
// 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)
|
||||
// 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;
|
||||
else
|
||||
return list.at(0);
|
||||
|
@ -257,7 +257,7 @@ unsigned uRndMax = 0;
|
|||
|
||||
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);
|
||||
uLevel = LEVEL_MAX;
|
||||
|
@ -268,7 +268,7 @@ unsigned uRndMax = 0;
|
|||
}
|
||||
while (uCountQuestion[uLevel] == 0);
|
||||
|
||||
// Zufällige Frage bestimmen
|
||||
// Zufällige Frage bestimmen
|
||||
uRnd = afu_random (1, uCountQuestion[uLevel]);
|
||||
for (i=0; i<m_listQuestion.size()-1; i++)
|
||||
if (m_listQuestion[i]->level() == uLevel && --uRnd == 0) break;
|
||||
|
@ -284,7 +284,7 @@ QString str, strCheat;
|
|||
|
||||
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();
|
||||
return;
|
||||
}
|
||||
|
@ -367,7 +367,7 @@ unsigned uAnswerMask = 1<<i;
|
|||
pbAssistant->setToolTip(tr("Lern-Assistent aufrufen"));
|
||||
pbIgnore->setToolTip(tr("Meldung ignorieren, dieses Kapitel weiterlernen"));
|
||||
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.exec();
|
||||
|
|
|
@ -97,7 +97,7 @@ void CDlgLearnAssistant::on_buttonBox_accepted()
|
|||
QModelIndexList list = tvChapters->selectionModel()->selectedIndexes();
|
||||
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;
|
||||
}
|
||||
accept();
|
||||
|
|
8
exam.cpp
8
exam.cpp
|
@ -87,7 +87,7 @@ CQuestion *q=0;
|
|||
if (listSelected.size() < questionCount())
|
||||
{
|
||||
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__);
|
||||
}
|
||||
|
||||
|
@ -181,7 +181,7 @@ QList<CQuestion*> CExam::createQuestionPool(const QList<CQuestion*>& listAllQues
|
|||
QList<CQuestion*> listRet;
|
||||
|
||||
#ifdef DEBUGMSG
|
||||
qDebug ("Erzeuge Prüfungsfragen für '%s'", qPrintable(name()));
|
||||
qDebug ("Erzeuge Prüfungsfragen für '%s'", qPrintable(name()));
|
||||
#endif
|
||||
|
||||
try
|
||||
|
@ -193,12 +193,12 @@ QList<CQuestion*> listRet;
|
|||
}
|
||||
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;
|
||||
}
|
||||
|
||||
#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++)
|
||||
qDebug ("\t%i. Frage ID '%s'", i+1, qPrintable(listRet.at(i)->id()));
|
||||
#endif
|
||||
|
|
|
@ -137,11 +137,11 @@ void CMainWindow::setCatalog (CCatalog *pCatalog)
|
|||
QDate d = m_pCatalog->validUntil();
|
||||
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())
|
||||
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())
|
||||
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);
|
||||
}
|
||||
|
@ -154,7 +154,7 @@ QString str;
|
|||
if (m_pCatalog == 0) return false;
|
||||
str = m_pCatalog->checkForErrors();
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -181,7 +181,7 @@ void CMainWindow::on_actFileOpen_triggered()
|
|||
{
|
||||
QString strFileName;
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -207,7 +207,7 @@ void CMainWindow::on_actFileInformation_triggered()
|
|||
CDlgInformation dlg(this);
|
||||
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;
|
||||
}
|
||||
dlg.setup(m_pCatalog);
|
||||
|
@ -270,13 +270,13 @@ enum LastAdded {None, Chapter, Question, Answer};
|
|||
LastAdded la=None;
|
||||
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;
|
||||
|
||||
QFile file(strFileName);
|
||||
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;
|
||||
}
|
||||
QTextStream in(&file);
|
||||
|
@ -285,7 +285,7 @@ strFileName = QFileDialog::getOpenFileName(this, tr("
|
|||
while (!in.atEnd())
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
@ -370,7 +370,7 @@ strFileName = QFileDialog::getOpenFileName(this, tr("
|
|||
}
|
||||
}
|
||||
|
||||
// Bilder hinzufügen
|
||||
// Bilder hinzufügen
|
||||
QList<CQuestion*> listPool = pCatalog->questionPool();
|
||||
QDir dirPath(strFileName.left(strFileName.lastIndexOf('/')));
|
||||
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++)
|
||||
{
|
||||
QString strImgFile = strlFiles.at(j).toLower();
|
||||
// Überprüfen, ob Verweis
|
||||
// Überprüfen, ob Verweis
|
||||
if (strImgFile.contains("_"))
|
||||
{ // Ja, Verweis
|
||||
QString strImgFile1 = strImgFile.left(strImgFile.indexOf('_'));
|
||||
|
@ -438,18 +438,18 @@ strFileName = QFileDialog::getOpenFileName(this, tr("
|
|||
}
|
||||
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);
|
||||
QMessageBox::information(this, tr("Information"),
|
||||
"Bitte Debug-Ausgabe überprüfen, ob alle Grafik-Dateien zugeordnet wurden!<p>"
|
||||
"Bitte überprüfen, ob alle Kapitel korrekt erkannt wurden. "
|
||||
"Bitte Debug-Ausgabe überprüfen, ob alle Grafik-Dateien zugeordnet wurden!<p>"
|
||||
"Bitte überprüfen, ob alle Kapitel korrekt erkannt wurden. "
|
||||
"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);
|
||||
}
|
||||
|
||||
|
@ -481,13 +481,13 @@ enum LastAdded {None, Chapter, Question, Answer};
|
|||
LastAdded la=None;
|
||||
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;
|
||||
|
||||
QFile file(strFileName);
|
||||
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;
|
||||
}
|
||||
QTextStream in(&file);
|
||||
|
@ -633,10 +633,10 @@ strFileName = QFileDialog::getOpenFileName(this, tr("
|
|||
|
||||
pCatalog->setName("Importierter Katalog von " + strFileName);
|
||||
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);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -674,7 +674,7 @@ QModelIndexList list = m_pViewChapter->selectionModel()->selectedIndexes();
|
|||
if (checkForErrors()) return;
|
||||
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;
|
||||
}
|
||||
CChapter *p = (CChapter*)list.first().internalPointer();
|
||||
|
@ -707,7 +707,7 @@ CExam exam;
|
|||
iCount = m_pCatalog->countExam();
|
||||
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;
|
||||
}
|
||||
else if (iCount == 1)
|
||||
|
@ -734,7 +734,7 @@ CDlgExamStatistic dlg(this);
|
|||
if (checkForErrors()) return;
|
||||
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;
|
||||
}
|
||||
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 "
|
||||
"Free Software Foundation, Inc., "
|
||||
"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()
|
||||
|
|
22
question.cpp
22
question.cpp
|
@ -153,7 +153,7 @@ QString str, strHints;
|
|||
str += " " + repeatDateTextExtended();
|
||||
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++)
|
||||
{
|
||||
CAnswerClicked ac = m_listAnswerClicked.at(i);
|
||||
|
@ -337,17 +337,17 @@ int iAnswerCount = 0;
|
|||
|
||||
iAnswerCount = countAnswer();
|
||||
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();
|
||||
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++)
|
||||
{
|
||||
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())
|
||||
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;
|
||||
}
|
||||
|
@ -415,7 +415,7 @@ QString CQuestion::correctionText(const unsigned uAnswerMask)
|
|||
}
|
||||
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()));
|
||||
}
|
||||
}
|
||||
|
@ -488,7 +488,7 @@ QString CQuestion::levelText(const unsigned uLevel)
|
|||
case LEVEL_VERYOFTEN:
|
||||
return QObject::tr("Ahnungslos");
|
||||
case LEVEL_OFTEN:
|
||||
return QObject::tr("Anfänger");
|
||||
return QObject::tr("Anfänger");
|
||||
case LEVEL_NORMAL:
|
||||
return QObject::tr("Fortgeschritten");
|
||||
case LEVEL_RARE:
|
||||
|
@ -553,16 +553,16 @@ unsigned uLevelOld=0, uLevelNew=0;
|
|||
uLevelNew = levelAtEndOfDay(dtLastClicked.date());
|
||||
|
||||
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
|
||||
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 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!
|
||||
*/
|
||||
|
||||
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue