From: <vra...@us...> - 2004-01-06 03:52:53
|
Update of /cvsroot/darkeyetool/det/src In directory sc8-pr-cvs1:/tmp/cvs-serv27963 Modified Files: det.cpp LaderXerces.cpp LaderXerces.h Added Files: detconfig.cpp detconfig.h Log Message: detConfig für Applikationskonfigurationsdaten hinzugefügt --- NEW FILE: detconfig.cpp --- //@+leo-ver=4-encoding=iso-8859-1. //@+node:@file detconfig.cpp //@+at // Update.cpp: Implementierung der Klasse Update, welche // den Datenfile auf den neuesten Stand bringt // // $Revision: 1.1 $ // $Date: 2004/01/06 03:52:49 $ //@-at //@@c //@<< header >> //@+node:<< header >> //@+at // The content of this file is subject to the license // given in license.txt // //@-at //@@c #ifdef MSVC #pragma warning(disable:4786 4503) #endif //@-node:<< header >> //@nl //@<< includes >> //@+node:<< includes >> #include "detconfig.h" #include "Log.h" #include "dsa\Texte.h" #include "LaderXerces.h" //@nonl //@-node:<< includes >> //@nl //@<< filename >> //@+node:<< filename >> #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; //#define new DEBUG_NEW #endif //@-node:<< filename >> //@nl //@<< class detConfig >> //@+node:<< class detConfig >> detConfig* detConfig::singleton_ = 0; detConfig* detConfig::Config() { if (singleton_==0) singleton_ = new detConfig(); return singleton_; } // Hole Instanz void detConfig::Clear() { delete singleton_; singleton_ = 0; } // Clear detConfig::detConfig() { Reset(); } // Ctor void detConfig::Reset() { boolOptionen_ = std::map<std::string, bool>(); boolOptionen_["Warnung beim Re-Generieren"] = true; } // Reset bool detConfig::boolOption(const std::string& option) const { std::map<std::string, bool>::const_iterator i = boolOptionen_.find(option); if (i != boolOptionen_.end()) return i->second; Log::Add(_t("Unbekannte Option") + ": " + _t(option)); return false; } // boolOption void detConfig::boolOption(const std::string& option, bool b) { boolOptionen_[option] = b; } // boolOption int detConfig::Lese(const std::string& dateiname) { Reset(); LaderXerces* l = new LaderXerces(); l->Lade(dateiname); if (l->DocLeer()) { delete l; return 0; } int z = l->AnzahlKnoten(l->Wurzel(), _t("boolOption")); if (z>0) { StringListe ids; l->IDListe(l->Wurzel(), _t("boolOption"), &ids); for (StringListe::iterator s = ids.begin(); s != ids.end(); ++s) { xercesc::DOMElement* node = 0; StringListe sl; sl.push_back("detconfig"); sl.push_back(_t("boolOption")); sl.push_back(_t("ID")); sl.push_back(_t(*s)); l->gehePfad(sl, &node); std::string w; l->LeseString(node, &w); boolOptionen_[*s] = (w==_t("ja")); } } delete l; return 0; } // Lese int detConfig::Schreibe(const std::string& dateiname) const { LaderXerces* l = new LaderXerces(); l->NeuesDokument(dateiname, "detconfig"); for (std::map<std::string, bool>::const_iterator i = boolOptionen_.begin(); i != boolOptionen_.end(); ++i) { l->NeuerKnoten(l->Wurzel(), _t("boolOption"), _t(i->first)); xercesc::DOMElement* node = 0; StringListe sl; sl.push_back("detconfig"); sl.push_back(_t("boolOption")); sl.push_back(_t("ID")); sl.push_back(_t(i->first)); l->gehePfad(sl, &node); l->SchreibeString(node, (i->second ? _t("ja") : _t("nein"))); } l->Speicher(dateiname); return 0; } // Schreibe //@-node:<< class detConfig >> //@nl //@<< Version History >> //@+node:<< Version History >> // $Log: detconfig.cpp,v $ // Revision 1.1 2004/01/06 03:52:49 vrandezo // detConfig für Applikationskonfigurationsdaten hinzugefügt // //@-node:<< Version History >> //@nl //@nonl //@-node:@file detconfig.cpp //@-leo --- NEW FILE: detconfig.h --- //@+leo-ver=4-encoding=iso-8859-1. //@+node:@file detconfig.h //@+at // detconfig.h: detconfig bietet Zugriff zu nicht // DSA-spezifischen, sondern Applikatonsspezifischen // Daten. // // $Revision: 1.1 $ // $Date: 2004/01/06 03:52:49 $ //@-at //@@c //@<< header >> //@+node:<< header >> //@+at // The content of this file is subject to the license // given in license.txt // //@-at //@@c #ifdef MSVC #pragma warning(disable:4786 4503) #endif //@-node:<< header >> //@nl //@<< includes >> //@+node:<< includes >> #include <string> #include <map> //@nonl //@-node:<< includes >> //@nl #if !defined(DETCONFIG_H) #define DETCONFIG_H namespace DSA { class PersistenzManager; } //@<< class detConfig >> //@+node:<< class detConfig >> class detConfig { public: static detConfig* Config(); static void Clear(); void Reset(); bool boolOption(const std::string& option) const; void boolOption(const std::string& option, bool b); int Lese(const std::string& datei); int Schreibe(const std::string& datei) const; private: detConfig(); virtual ~detConfig() {}; static detConfig* singleton_; std::map<std::string, bool> boolOptionen_; }; // detConfig //@nonl //@-node:<< class detConfig >> //@nl #endif // !defined(DETCONFIG_H) //@<< Version History >> //@+node:<< Version History >> // $Log: detconfig.h,v $ // Revision 1.1 2004/01/06 03:52:49 vrandezo // detConfig für Applikationskonfigurationsdaten hinzugefügt // //@nonl //@-node:<< Version History >> //@nl //@nonl //@-node:@file detconfig.h //@-leo Index: det.cpp =================================================================== RCS file: /cvsroot/darkeyetool/det/src/det.cpp,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** det.cpp 31 Dec 2003 03:52:23 -0000 1.39 --- det.cpp 6 Jan 2004 03:52:49 -0000 1.40 *************** *** 88,91 **** --- 88,93 ---- #include "wx/filename.h" + #include "detconfig.h" + #include "gui/PersonGUIwx.h" #include "gui/RasseGUIwx.h" *************** *** 1027,1030 **** --- 1029,1034 ---- virtual bool OnInit(); virtual int OnExit(); + private: + std::string configdatei; }; // detApp *************** *** 1046,1092 **** // 'Main program' equivalent: the program execution "starts" here bool detApp::OnInit() { ! // Absichtlicher kleiner Memory Leak zum Testen. Sollte 4 Byte zurückliefern. ! // wird in der Release-Version nicht ausgeführt, also gibt es da keinen Memory ! // Leak :) #ifdef _DEBUG int* i__i; i__i = new int(); #endif ! // Holt sich den Standardpfad aus der Registry bzw. erzeugt dort einen, ! // falls noch keiner vorhanden war. ! wxString wxstandardpfad; ! wxConfig* config = new wxConfig("DarkeyeTool"); ! ! if (!config->Exists("DSA4WZPath")) ! { ! wxDirDialog* dd = new wxDirDialog(0, "Wähle ein Standardverzeichnis für die DSA4 Werkzeug Daten / Choose a directory for the Dark Eye Tool Data"); ! dd->ShowModal(); ! wxstandardpfad = dd->GetPath(); ! config->Write("DSA4WZPath", wxstandardpfad); ! } ! wxstandardpfad = config->Read("DSA4WZPath", wxstandardpfad); ! ! bool neueVersion = false; ! if (!config->Exists("DSA4WZVersion")) { ! neueVersion = true; ! config->Write("DSA4WZVersion", detVERSION); ! } ! wxString wxStringVersion; ! wxStringVersion = config->Read(wxString("DSA4WZVersion")); // TODOPORT ! if (wxStringVersion != detVERSION) neueVersion = true; ! config->Write("DSA4WZVersion", detVERSION); ! ! delete config; standardpfad = wxstandardpfad.c_str(); ! // setzt das Locale (nicht unbedingt portabel) - alternativer Namen wäre "de" ! std::locale loc("German"); // TODOPORT std::locale::global(loc); // TODOPORT ! wxLocale* wxloc = new wxLocale(); ! wxloc->Init(wxLANGUAGE_GERMAN); // sollte eigentlich für die Sortierung der Strings sorgen, scheint aber // nicht zu taugen ! #ifdef _DEBUG Texte::Initialisiere(standardpfad+"/"+"dettexte.txt"); --- 1050,1119 ---- // 'Main program' equivalent: the program execution "starts" here bool detApp::OnInit() { ! //@<< MemTest >> ! //@+node:<< MemTest >> ! //@+at ! // Absichtlicher kleiner Memory Leak zum Testen. Sollte 4 ! // Byte zurückliefern, wird in der Release-Version nicht ! // ausgeführt, also gibt es da keinen Memory ! // Leak :) ! //@-at ! //@@c #ifdef _DEBUG int* i__i; i__i = new int(); #endif + //@nonl + //@-node:<< MemTest >> + //@nl ! //@ << Hole Standardpfad nach wxString wxstandardpfad >> ! //@+node:<< Hole Standardpfad nach wxString wxstandardpfad >> ! // Holt sich den Standardpfad aus der Registry bzw. erzeugt dort einen, ! // falls noch keiner vorhanden war. ! wxString wxstandardpfad; ! wxConfig* config = new wxConfig("DarkeyeTool"); ! ! if (!config->Exists("DSA4WZPath")) ! { ! wxDirDialog* dd = new wxDirDialog(0, "Wähle ein Standardverzeichnis für die DSA4 Werkzeug Daten / Choose a directory for the Dark Eye Tool Data"); ! dd->ShowModal(); ! wxstandardpfad = dd->GetPath(); ! config->Write("DSA4WZPath", wxstandardpfad); ! } ! wxstandardpfad = config->Read("DSA4WZPath", wxstandardpfad); ! //@nonl ! //@-node:<< Hole Standardpfad nach wxString wxstandardpfad >> ! //@nl ! //@ << Checke Version >> ! //@+node:<< Checke Version >> ! bool neueVersion = false; ! if (!config->Exists("DSA4WZVersion")) { ! neueVersion = true; ! config->Write("DSA4WZVersion", detVERSION); ! } ! wxString wxStringVersion; ! wxStringVersion = config->Read(wxString("DSA4WZVersion")); // TODOPORT ! if (wxStringVersion != detVERSION) neueVersion = true; ! config->Write("DSA4WZVersion", detVERSION); ! ! delete config; ! //@nonl ! //@-node:<< Checke Version >> ! //@nl standardpfad = wxstandardpfad.c_str(); ! ! //@ << setze Locales >> ! //@+node:<< setze Locales >> // setzt das Locale (nicht unbedingt portabel) - alternativer Namen wäre "de" ! std::locale loc("German"); // TODOPORT std::locale::global(loc); // TODOPORT ! wxLocale* wxloc = new wxLocale(); ! wxloc->Init(wxLANGUAGE_GERMAN); // sollte eigentlich für die Sortierung der Strings sorgen, scheint aber // nicht zu taugen ! //@nonl ! //@-node:<< setze Locales >> ! //@nl ! #ifdef _DEBUG Texte::Initialisiere(standardpfad+"/"+"dettexte.txt"); *************** *** 1096,1114 **** DSA::PersistenzManager::SetzeFabrik(new DSA::PersistenzManagerFabrikXerces()); std::string importdatei = ""; bool import = (argc>1); if (import) importdatei = argv[1]; ! ! // create the main application window std::string titel = _t("DSA4 Werkzeug") + " " detVERSION; detFrame* frame = new detFrame(titel.c_str()); frame->Centre(); ! wxCommandEvent ce; ! frame->OnEinstellungenGPStandard(ce); ! int i = frame->GetMenuBar()->FindMenuItem("&Einstellungen", "&Standard"); ! wxMenuItem* m = frame->GetMenuBar()->FindItem(i); ! m->Check(true); ! frame->Show(!import); ! // setze wxWindows Hole-Implementierung DSA::hole(new DSA::HoleGUIwx(frame)); --- 1123,1150 ---- DSA::PersistenzManager::SetzeFabrik(new DSA::PersistenzManagerFabrikXerces()); + + //@ << Setze Namen der Importdatei >> + //@+node:<< Setze Namen der Importdatei >> std::string importdatei = ""; bool import = (argc>1); if (import) importdatei = argv[1]; ! //@nonl ! //@-node:<< Setze Namen der Importdatei >> ! //@nl ! //@ << create the main application window >> ! //@+node:<< create the main application window >> std::string titel = _t("DSA4 Werkzeug") + " " detVERSION; detFrame* frame = new detFrame(titel.c_str()); frame->Centre(); ! wxCommandEvent ce; ! frame->OnEinstellungenGPStandard(ce); ! int i = frame->GetMenuBar()->FindMenuItem("&Einstellungen", "&Standard"); ! wxMenuItem* m = frame->GetMenuBar()->FindItem(i); ! m->Check(true); ! frame->Show(!import); ! //@nonl ! //@-node:<< create the main application window >> ! //@nl ! // setze wxWindows Hole-Implementierung DSA::hole(new DSA::HoleGUIwx(frame)); *************** *** 1116,1121 **** wxLogInfo(_t("Programm gestartet").c_str()); ! frame->Put(_t("Entworfen von Denny Vrandecic") + ", " detEMAIL ", " detWEBSITE); ! frame->Put(_t("Dieses Programm ist unter der BSD-Lizenz veröffentlicht.")); // TODO Das richtige Verzeichnis laden, sonst lädt er wild aus der Gegend --- 1152,1157 ---- wxLogInfo(_t("Programm gestartet").c_str()); ! configdatei = standardpfad + "\\" + "detconfig.xml"; ! detConfig::Config()->Lese(configdatei); // TODO Das richtige Verzeichnis laden, sonst lädt er wild aus der Gegend *************** *** 1125,1149 **** if (wxFileExists(standarddatei.GetFullPath())) frame->Lade(standarddatei.GetFullPath().c_str()); ! ! if (neueVersion) { ! wxFileName basisdatei; ! basisdatei.AssignDir(wxstandardpfad); ! basisdatei.SetFullName("basis.xdi"); ! if (wxFileExists(basisdatei.GetFullPath())) { ! wxMessageDialog f(0, _t("Sie starten zum ersten Mal diese Version des DSA4 Werkzeugs.\nSoll die mitgelieferte Datenbasis importiert werden?").c_str(), _t("Achtung!").c_str(), wxYES_NO | wxYES_DEFAULT | wxCANCEL | wxCENTRE); ! int rv = f.ShowModal(); ! if (rv == wxID_YES) { frame->Importiere(basisdatei.GetFullPath().c_str()); ! frame->Speicher(standarddatei.GetFullPath().c_str()); ! } ! } ! } ! Log::Info(standarddatei.GetFullPath().c_str()); if (import) { ! frame->Importiere(importdatei); ! frame->Speicher(standarddatei.GetFullPath().c_str()); ! return false; ! } // success: wxApp::OnRun() will be called which will enter the main message --- 1161,1199 ---- if (wxFileExists(standarddatei.GetFullPath())) frame->Lade(standarddatei.GetFullPath().c_str()); ! ! //@ << Update auf neue Version >> ! //@+node:<< Update auf neue Version >> ! if (neueVersion) { ! wxFileName basisdatei; ! basisdatei.AssignDir(wxstandardpfad); ! basisdatei.SetFullName("basis.xdi"); ! if (wxFileExists(basisdatei.GetFullPath())) { ! wxMessageDialog f(0, _t("Sie starten zum ersten Mal diese Version des DSA4 Werkzeugs.\nSoll die mitgelieferte Datenbasis importiert werden?").c_str(), _t("Achtung!").c_str(), wxYES_NO | wxYES_DEFAULT | wxCANCEL | wxCENTRE); ! int rv = f.ShowModal(); ! if (rv == wxID_YES) { frame->Importiere(basisdatei.GetFullPath().c_str()); ! frame->Speicher(standarddatei.GetFullPath().c_str()); ! } ! } ! } ! //@nonl ! //@-node:<< Update auf neue Version >> ! //@nl ! Log::Info(standarddatei.GetFullPath().c_str()); + //@ << Importieren >> + //@+node:<< Importieren >> if (import) { ! frame->Importiere(importdatei); ! frame->Speicher(standarddatei.GetFullPath().c_str()); ! return false; ! } ! //@nonl ! //@-node:<< Importieren >> ! //@nl ! ! frame->Put(_t("Willkommen zum DSA4 Werkzeug") + " " detVERSION); ! frame->Put(_t("Ein OpenSource-Projekt") + " - " + _t("Projektleiter") + " " + _t("Denny Vrandecic") + ", " detEMAIL ", " detWEBSITE); ! frame->Put(_t("Dieses Programm ist unter der BSD-Lizenz veröffentlicht.")); // success: wxApp::OnRun() will be called which will enter the main message *************** *** 1180,1183 **** --- 1230,1235 ---- } } + detConfig::Config()->Schreibe(configdatei); + detConfig::Clear(); DSA::PersistenzManager::SetzeFabrik(0); delete DSA::personen(); *************** *** 1269,1272 **** --- 1321,1327 ---- //@+node:<< Version History >> // $Log$ + // Revision 1.40 2004/01/06 03:52:49 vrandezo + // detConfig für Applikationskonfigurationsdaten hinzugefügt + // // Revision 1.39 2003/12/31 03:52:23 vrandezo // 1.29 Beta Index: LaderXerces.cpp =================================================================== RCS file: /cvsroot/darkeyetool/det/src/LaderXerces.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** LaderXerces.cpp 28 Nov 2003 16:45:03 -0000 1.7 --- LaderXerces.cpp 6 Jan 2004 03:52:49 -0000 1.8 *************** *** 132,136 **** Log::Debug("Lader::Lade"); Log::Debug(DateiName); ! if (doc != 0) {} // Eine Datei ist schon geladen! Was nun? m_DateiName = DateiName; doc = parser->parseURI(m_DateiName.c_str()); --- 132,136 ---- Log::Debug("Lader::Lade"); Log::Debug(DateiName); ! if (doc != 0) { delete doc; doc = 0; } // Eine Datei ist schon geladen! Was nun? m_DateiName = DateiName; doc = parser->parseURI(m_DateiName.c_str()); *************** *** 151,163 **** //@@c ! int LaderXerces::NeuesDokument (std::string DateiName) { ! if (doc != 0) {} // Eine Datei ist schon geladen! Was nun? m_DateiName = DateiName; xercesc::DOMImplementation* impl = xercesc::DOMImplementationRegistry::getDOMImplementation(X(std::string("Core"))); ! doc = impl->createDocument(0, X(std::string("XDIML")), 0); ! Wurzel()->setAttribute(X(std::string("version")), X(std::string("1.01"))); ! Wurzel()->setAttribute(X(std::string("lang")), X(std::string("de"))); // TODO Hier müssen Fehlerbehandlung --- 151,165 ---- //@@c ! int LaderXerces::NeuesDokument (std::string DateiName, const std::string& Wurzelname) { ! if (doc != 0) { delete doc; doc = 0; } // Eine Datei ist schon geladen! Was nun? m_DateiName = DateiName; xercesc::DOMImplementation* impl = xercesc::DOMImplementationRegistry::getDOMImplementation(X(std::string("Core"))); ! doc = impl->createDocument(0, X(Wurzelname), 0); ! if (Wurzelname=="XDIML") { ! Wurzel()->setAttribute(X(std::string("version")), X(std::string("1.01"))); ! Wurzel()->setAttribute(X(std::string("lang")), X(std::string("de"))); ! } // TODO Hier müssen Fehlerbehandlung *************** *** 1186,1189 **** --- 1188,1194 ---- //@+node:<< Version History >> // $Log$ + // Revision 1.8 2004/01/06 03:52:49 vrandezo + // detConfig für Applikationskonfigurationsdaten hinzugefügt + // // Revision 1.7 2003/11/28 16:45:03 vrandezo // Zeilenvorlauf am Dateiende (Warnung bei gcc) Index: LaderXerces.h =================================================================== RCS file: /cvsroot/darkeyetool/det/src/LaderXerces.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** LaderXerces.h 4 Dec 2003 17:10:50 -0000 1.6 --- LaderXerces.h 6 Jan 2004 03:52:49 -0000 1.7 *************** *** 46,50 **** const std::string LaderVersion() const; ! int NeuesDokument (std::string Dateiname = ""); int Lade (std::string DateiName=""); --- 46,50 ---- const std::string LaderVersion() const; ! int NeuesDokument (std::string Dateiname = "", const std::string& Wurzelname = "XDIML"); int Lade (std::string DateiName=""); *************** *** 110,114 **** xercesc::DOMElement* Wurzel(); xercesc::DOMElement* VaterKnoten(const xercesc::DOMElement* const) const; ! int gehePfad(const StringListe& Pfad, xercesc::DOMElement** node, int Nummer = 0, const xercesc::DOMElement* const start = 0); private: --- 110,116 ---- xercesc::DOMElement* Wurzel(); xercesc::DOMElement* VaterKnoten(const xercesc::DOMElement* const) const; ! int gehePfad(const StringListe& Pfad, xercesc::DOMElement** node, int Nummer = 0, const xercesc::DOMElement* const start = 0); ! ! bool DocLeer() const { return doc == 0; } private: *************** *** 132,135 **** --- 134,140 ---- //@+node:<< Version History >> // $Log$ + // Revision 1.7 2004/01/06 03:52:49 vrandezo + // detConfig für Applikationskonfigurationsdaten hinzugefügt + // // Revision 1.6 2003/12/04 17:10:50 vrandezo // Trons BSD-Portierung |