00001 #ifndef CONTROLLER_H
00002 #define CONTROLLER_H
00003
00004 #include <iostream.h>
00005 #include <qdatastream.h>
00006 #include <qdir.h>
00007 #include <qpe/applnk.h>
00008 #include <qfile.h>
00009 #include <qfileinfo.h>
00010 #include <qobject.h>
00011 #include <qcstring.h>
00012 #include <qstring.h>
00013 #include <qstringlist.h>
00014 #include <qtextcodec.h>
00015 #include <qtextstream.h>
00016 #include <qxml.h>
00017 #include <stdlib.h>
00018 #include "FolderParser.h"
00019 #include "MarkedItemsParser.h"
00020 #include "Preferences.h"
00021 #include "Sequence.h"
00022 #include "Term.h"
00023 #include "TermKey.h"
00024 #include "TermScheduler.h"
00025 #include "VocabParser.h"
00026 #include "Util.h"
00027 #include "Vocabulary.h"
00028 #include "minizip/unzip.h"
00029 #include "minizip/zip.h"
00030
00031 class Controller : public QObject {
00032
00033 Q_OBJECT
00034
00035 public:
00036
00037 static const QString vocabTreeFilename;
00038
00039 Controller();
00040
00041 bool init();
00042
00043 const QString& getApplicationDirName() const;
00044 Preferences& getPreferences();
00045
00046 Folder* getVocabTree();
00047
00048 void startQuiz();
00049 void restartQuiz();
00050 bool isResumableQuizAvailable();
00051 bool resumeQuiz();
00052 void prepareQuiz();
00053
00054 Term* getCurrentTerm();
00055 bool hasNextTerm() const;
00056 Term* getTerm( const TermKey& termKey );
00057 Term* getNextTerm();
00058
00059 QString getQuizFirstLanguage() const;
00060 QString getQuizTestLanguage() const;
00061
00062 bool isQuizInProgress() const;
00063 int getProgress() const;
00064 Sequence& getRevealingSequence();
00065 int getRevealingSequenceStep() const;
00066 void incrementRevealingSequenceStep();
00067
00068 void rightAnswer();
00069 void wrongAnswer();
00070 void reveal();
00071
00072 bool saveData();
00073 void loadData();
00074
00075 bool saveMarkedItems( Folder* folder );
00076 void loadMarkedItems( Folder* folder );
00077
00078 Vocabulary* addVocabulary( Folder* parentFolder, Vocabulary* vocab = NULL );
00079 Folder* addFolder( Folder* parentFolder, Folder* folder = NULL );
00080
00081 void copy( Vocabulary* vocab );
00082 void copy( Folder* folder );
00083
00084 Vocabulary* loadVocabulary( const QString& parentDir );
00085 Folder* loadFolder( const QString& parentDir );
00086 bool saveFolder( Folder* folder, const QString& parentDir ) const;
00087
00088 bool saveVocabulary( Vocabulary* vocab, const QString& location ) const;
00089 bool exportData( Vocabulary* vocab, const QString& file, QStringList* languages = NULL ) const;
00090 bool exportData( Folder* folder, const QString& file, QStringList* languages = NULL ) const;
00091 void writeFolderDataInXml( QTextStream& ts, const Folder& folder ) const;
00092 void writeVocabularyInXml( QTextStream& ts, const Vocabulary& vocab, QStringList* languages, bool writeXmlDirective = true, int depth = 0 ) const;
00093
00094 void loadLegacyVocabulary( Folder* folder );
00095
00096 QStringList getTranslationLanguagesFromFile( const QString& filename ) const;
00097 Base* importData( Folder* rootFolder, const QString& filename, const QStringList& languages );
00098
00099 int getInitialTermCount() const;
00100
00101 void initRevealingSequence();
00102
00103 void writeVocabulariesInXml( Folder* folder, int depth, QTextStream& ts, QStringList* languages );
00104
00105 void setClipboardData( const QString& type, const QByteArray& data );
00106 QByteArray getClipboardData() const;
00107 QString getClipboardDataType() const;
00108
00109 bool isImagePathValid( const QString& path, const Vocabulary& vocab ) const;
00110 QString getResolvedImagePath( const QString& path, const Vocabulary& vocab ) const;
00111
00112 void clearSearch();
00113 QValueList<TermKey> search( const QString& query, const QString& firstLang = QString::null, const QString& testLang = QString::null );
00114 QValueList<TermKey> getSearchResults() const;
00115 int getSearchResultsCount() const;
00116
00117 public slots:
00118
00119 void concludeQuiz();
00120
00121 signals:
00122
00123 void progressChanged( int progress );
00124
00125 private:
00126
00127 int writeFileIntoZipFile( zipFile outputFile, const char* filename, const char* data, int length ) const;
00128
00129 void initMarkedForStudyRec( Folder* folder, IdList& folderIds, IdList& vocabIds, IdListMap& termIds );
00130 void initMarkedForStudyRec( Vocabulary* vocab, IdList& vocabIds, IdListMap& termIds );
00131
00132 void saveMarkedItemsRec( Folder* folder, IdList& folderIds, IdList& vocabIds, IdListMap& termIds );
00133 void saveMarkedItemsRec( Vocabulary* vocab, IdList& vocabIds, IdListMap& termIds );
00134
00135 QStringList getVocabularyTranslationLanguagesFromZip( zipFile inputFile ) const;
00136
00137 bool importFolderFromZip( Folder* folder, const QString& folderLocation, zipFile inputFile );
00138 bool importVocabularyFromZip( Vocabulary* vocab, const QString& vocabLocation, const QStringList& languages, zipFile inputFile );
00139 bool importImageFromZip( const QString& imgPath, zipFile inputFile );
00140 bool exportFolderRecIntoZip( Folder* folder, zipFile outputFile, QString path, QStringList* languages = NULL ) const;
00141 bool exportVocabularyIntoZip( Vocabulary* vocab, zipFile outputFile, QString path, QStringList* languages = NULL ) const;
00142
00143 bool loadVocabulariesRec( Folder* folder );
00144
00145 Vocabulary* makeCopy( Vocabulary* vocab, const QString& firstLang, const QString& testLang ) const;
00146 Folder* makeCopy( Folder* folder, const QString& firstLang, const QString& testLang ) const;
00147
00148 bool deleteItemsMarkedForDeletion( Folder* folder );
00149 bool deleteObsoleteData();
00150
00151 int findFolderId( const QString& filename ) const;
00152 int findParentFolderId( const QString& dirPath ) const;
00153 int findVocabId( const QString& filename ) const;
00154 QString convertPath( const QString& path, QMap<int,Folder*>& newFolders ) const;
00155
00156 void searchRec( const QString& query, const QString& firstLang, const QString& testLang, Folder* folder, QValueList<TermKey>& results );
00157 void searchRec( const QString& query, const QString& firstLang, const QString& testLang, Vocabulary* folder, QValueList<TermKey>& results );
00158
00159 Preferences prefs;
00160
00161 Folder* vocabTree;
00162
00163 Sequence currRevealingSeq;
00164 int currRevealingSeqStep;
00165 TermScheduler scheduler;
00166
00167 QString markedXmlFilename;
00168 QString markedFilename;
00169 QString applicationDirName;
00170
00171 QString searchQuery;
00172 QValueList<TermKey> searchResults;
00173
00174
00175 QByteArray clipboard;
00176 QString clipboardDataType;
00177
00178 };
00179
00180 #endif