OSDN Git Service

GUI のクラス構造を細分化
[unagi/old-svn-converted.git] / client / trunk / anago / nescartxml.cpp
1 #include <wx/wx.h>
2 #include <wx/xml/xml.h>
3 #include "nescartxml.hh"
4
5 WX_DECLARE_HASH_MAP(unsigned long, wxXmlNode *, wxIntegerHash, wxIntegerEqual, CartridgeHash);
6
7 RomDb::RomDb(wxString file)
8 {
9         m_hash = new CartridgeHash(2200);
10         m_document = new wxXmlDocument();
11         m_document->Load(file);
12 }
13
14 RomDb::~RomDb(void)
15 {
16         delete m_hash;
17         delete m_document;
18 }
19
20 bool RomDb::Generate(void)
21 {
22         wxXmlNode *game = m_document->GetRoot()->GetChildren();
23         if(game == NULL){
24                 return false;
25         }
26         while(game != NULL){
27                 wxXmlNode *cartridge = game->GetChildren();
28                 while(cartridge != NULL){
29                         wxString crcstr;
30                         if(cartridge->GetPropVal(wxT("crc"), &crcstr) == true){
31                                 unsigned long crc;
32                                 if(crcstr.ToULong(&crc, 0x10) == true){
33                                         (*m_hash)[crc] = cartridge;
34                                 }
35                         }
36                         cartridge = cartridge->GetNext();
37                 }
38                 game = game->GetNext();
39         }
40 /*      wxXmlNode *board = cartdige->GetChildren();
41         wxXmlNode *parts = board->GetChildren();
42         while(parts != NULL){
43                 wxString name = parts->GetName();
44                 if(name == wxT("prg") || name == wxT("chr")){
45                         *log << parts->GetPropVal(wxT("name"), wxT(""));
46                         *log << parts->GetPropVal(wxT("crc"), wxT("xx")) << wxT("\n");
47                 }
48                 parts = parts->GetNext();
49         }*/
50         return true;
51 }
52
53 void RomDb::Search(unsigned long crc, wxTextCtrl *log)
54 {
55         wxXmlNode *cartridge = (*m_hash)[crc];
56         if(cartridge == NULL){
57                 return;
58         }
59         wxXmlNode *game = cartridge->GetParent();
60         const wxString error = wxT("*error*");
61         wxString field, name;
62         if(game->GetPropVal(wxT("altname"), &name) == false){
63                 name = game->GetPropVal(wxT("name"), error);
64         }
65         field = wxT("name:") + name;
66         *log << field << wxT("\n");
67         
68         field = wxT("region:") + game->GetPropVal(wxT("region"), error);
69         field += wxT(" catalog:") + game->GetPropVal(wxT("catalog"), error);
70         field += wxT(" revision:") + cartridge->GetPropVal(wxT("revision"), wxT("(none)"));
71         *log << field << wxT("\n");
72 }
73