diff options
Diffstat (limited to 'kvoctrain/kvoctrain/kvt-core/kvd_vcb.cpp')
-rw-r--r-- | kvoctrain/kvoctrain/kvt-core/kvd_vcb.cpp | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/kvoctrain/kvoctrain/kvt-core/kvd_vcb.cpp b/kvoctrain/kvoctrain/kvt-core/kvd_vcb.cpp new file mode 100644 index 00000000..2dfde3fe --- /dev/null +++ b/kvoctrain/kvoctrain/kvt-core/kvd_vcb.cpp @@ -0,0 +1,199 @@ +/*************************************************************************** + + maintain a document in vocabbox format + + ----------------------------------------------------------------------- + + begin : Thr Mar 23 21:00:53 MET 1999 + + copyright : (C) 1999-2001 Ewald Arnold <kvoctrain@ewald-arnold.de> + (C) 2001 The KDE-EDU team + (C) 2004 Peter Hedlund <peter.hedlund@kdemail.net> + + ----------------------------------------------------------------------- + + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include <klocale.h> +#include <kapplication.h> +#include <kmessagebox.h> + +#include "kvoctraindoc.h" +#include "kvoctraincore.h" + + + +bool kvoctrainDoc::saveTypeNameVcb (QTextStream &/*os*/) +{ + return true; +} + + +bool kvoctrainDoc::loadTypeNameVcb (QTextStream &/*is*/) +{ + return true; +} + + +bool kvoctrainDoc::saveLessonVcb (QTextStream &/*os*/) +{ + return true; +} + + +bool kvoctrainDoc::loadLessonVcb (QTextStream &/*is*/) +{ + return true; +} + + +bool kvoctrainDoc::saveToVcb (QTextStream& os, QString &/*title*/) +{ + saveTypeNameVcb (os); + saveLessonVcb (os); + + int ent_no = 0; + int ent_percent = (int) vocabulary.size () / 100; + float f_ent_percent = (int) vocabulary.size () / 100.0; + emit progressChanged(this, 0); + + vector<kvoctrainExpr>::const_iterator first = vocabulary.begin (); + while (first != vocabulary.end ()) { + + ent_no++; + if (ent_percent != 0 && (ent_no % ent_percent) == 0 ) + emit progressChanged(this, int(ent_no / f_ent_percent)); + + QString s, exp; + + exp = (*first).getOriginal()+VCB_SEPARATOR; + exp += (*first).getTranslation(1)+VCB_SEPARATOR; + + exp += (*first).gradeStr (1, false)+VCB_SEPARATOR; + exp += (*first).gradeStr (1, true)+VCB_SEPARATOR; + s.setNum ((*first).getQueryDate (1, false)); + exp += s+VCB_SEPARATOR; + s.setNum ((*first).getQueryDate (1, true)); + exp += s; + + os << exp << "\n"; + + first++; + } + + setModified (false); + return os.device()->status() == IO_Ok; +} + + +bool kvoctrainDoc::loadFromVcb (QTextStream& is) +{ + + langs.clear(); + vocabulary.clear(); + loadTypeNameVcb (is); + loadLessonVcb (is); + + int size = is.device()->size (); + int ln = size / 40 / 100; // assume each line about 40 chars + float f_ent_percent = size / 100.0; + emit progressChanged (this, 0); + + for (int l = 0; !is.eof(); l++) { + QString s = is.readLine(); + + ln--; + if (ln <= 0) { + ln = size / 40 / 100; // assume each line about 40 chars + emit progressChanged(this, int(is.device()->at() / f_ent_percent)); + } + + if (!s.stripWhiteSpace().isEmpty()) { + QString o, t; + grade_t ograde = KV_LEV1_GRADE, + tgrade = KV_LEV1_GRADE; + size_t odate = time(0), + tdate = time(0); + + int pos = s.find (VCB_SEPARATOR); + if (pos >= 0) { + o = s.left(pos); + s.remove (0, pos+QString(VCB_SEPARATOR).length()); + } + + pos = s.find (VCB_SEPARATOR); + if (pos >= 0) { + t = s.left(pos); + s.remove (0, pos+QString(VCB_SEPARATOR).length()); + } + else { + t = s; + } + + pos = s.find (VCB_SEPARATOR); + if (pos >= 0) { + ograde = s.left(pos).toInt(); + s.remove (0, pos+QString(VCB_SEPARATOR).length()); + } + + pos = s.find (VCB_SEPARATOR); + if (pos >= 0) { + tgrade = s.left(pos).toInt(); + s.remove (0, pos+QString(VCB_SEPARATOR).length()); + } + + pos = s.find (VCB_SEPARATOR); + if (pos >= 0) { + odate = s.left(pos).toInt(); + s.remove (0, pos+QString(VCB_SEPARATOR).length()); + } + + if (s.stripWhiteSpace().length() > 0) { + tdate = s.toInt(); + } + + kvoctrainExpr bucket; + bucket.setOriginal(o); + bucket.addTranslation(t); + + bucket.setGrade(1, ograde, false); + if (ograde != 0) + bucket.setQueryCount(1, 1, false); + + bucket.setGrade(1, tgrade, true); + if (tgrade != 0) + bucket.setQueryCount(1, 1, true); + + bucket.setQueryDate(1, odate, false); + bucket.setQueryDate(1, tdate, true); + + appendEntry (&bucket); + } + } + + langs.push_back("en"); + langs.push_back("en"); + + setModified (false); + return is.device()->status() == IO_Ok; +} + + +void kvoctrainDoc::errorVcb (int /*line*/, const QString &text ) +{ + unknown_elem = true; + QApplication::setOverrideCursor( arrowCursor, true ); + QString s = kapp->makeStdCaption(i18n("Error in vocabbox file")); + QString msg = text; + KMessageBox::error(0, msg, s); + QApplication::restoreOverrideCursor(); +} |