Exemple #1
0
// find all files mentioned in structure, e.g. <bitmap>filename</bitmap>
void wxcXmlResourceCmp::FindFilesInXML(wxXmlNode* node, wxArrayString& flist, const wxString& inputPath)
{
    // Is 'node' XML node element?
    if(node == NULL) return;
    if(node->GetType() != wxXML_ELEMENT_NODE) return;

    bool containsFilename = NodeContainsFilename(node);

    wxXmlNode* n = node->GetChildren();
    while(n) {
        if(containsFilename && (n->GetType() == wxXML_TEXT_NODE || n->GetType() == wxXML_CDATA_SECTION_NODE)) {
            wxString fullname;
            if(wxIsAbsolutePath(n->GetContent()) || inputPath.empty())
                fullname = n->GetContent();
            else
                fullname = inputPath + wxFILE_SEP_PATH + n->GetContent();

            wxString filename = GetInternalFileName(n->GetContent(), flist);
            n->SetContent(filename);

            if(flist.Index(filename) == wxNOT_FOUND) flist.Add(filename);

            wxFileInputStream sin(fullname);
            wxFileOutputStream sout(m_outputPath + wxFILE_SEP_PATH + filename);
            sin.Read(sout); // copy the stream
        }

        // subnodes:
        if(n->GetType() == wxXML_ELEMENT_NODE) FindFilesInXML(n, flist, inputPath);

        n = n->GetNext();
    }
}
Exemple #2
0
void XmlResApp::MakePackagePython(const wxArrayString& flist)
{
    wxFFile file(parOutput, wxT("wt"));
    size_t i;

    if (flagVerbose)
        wxPrintf(_T("creating Python source file ") + parOutput +  _T("...\n"));

    file.Write(
       _T("#\n")
       _T("# This file was automatically generated by wxrc, do not edit by hand.\n")
       _T("#\n\n")
       _T("import wx\n")
       _T("import wx.xrc\n\n")
    );


    file.Write(_T("def ") + parFuncname + _T("():\n"));

    for (i = 0; i < flist.Count(); i++)
        file.Write(
          FileToPythonArray(parOutputPath + wxFILE_SEP_PATH + flist[i], i));

    file.Write(
        _T("    # check if the memory filesystem handler has been loaded yet, and load it if not\n")
        _T("    wx.MemoryFSHandler.AddFile('XRC_resource/dummy_file', 'dummy value')\n")
        _T("    fsys = wx.FileSystem()\n")
        _T("    f = fsys.OpenFile('memory:XRC_resource/dummy_file')\n")
        _T("    wx.MemoryFSHandler.RemoveFile('XRC_resource/dummy_file')\n")
        _T("    if f is not None:\n")
        _T("        f.Destroy()\n")
        _T("    else:\n")
        _T("        wx.FileSystem.AddHandler(wx.MemoryFSHandler())\n")
        _T("\n")
        _T("    # load all the strings as memory files and load into XmlRes\n")
        );


    for (i = 0; i < flist.Count(); i++)
    {
        wxString s;
        s.Printf(_T("    wx.MemoryFSHandler.AddFile('XRC_resource/") + flist[i] +
                 _T("', xml_res_file_%i)\n"), i);
        file.Write(s);
    }
    for (i = 0; i < parFiles.Count(); i++)
    {
        file.Write(_T("    wx.xrc.XmlResource.Get().Load('memory:XRC_resource/") +
                   GetInternalFileName(parFiles[i], flist) + _T("')\n"));
    }

    file.Write(_T("\n"));
}
Exemple #3
0
wxArrayString XmlResApp::PrepareTempFiles()
{
    wxArrayString flist;

    for (size_t i = 0; i < parFiles.Count(); i++)
    {
        if (flagVerbose)
            wxPrintf(_T("processing ") + parFiles[i] +  _T("...\n"));

        wxXmlDocument doc;

        if (!doc.Load(parFiles[i]))
        {
            wxLogError(_T("Error parsing file ") + parFiles[i]);
            retCode = 1;
            continue;
        }

        wxString name, ext, path;
        wxSplitPath(parFiles[i], &path, &name, &ext);

        FindFilesInXML(doc.GetRoot(), flist, path);
        if (flagH)
        {
            wxXmlNode* node = (doc.GetRoot())->GetChildren();
                wxString classValue,nameValue;
                while(node){
                    if(node->GetName() == _T("object")
                     && node->GetPropVal(_T("class"),&classValue)
                     && node->GetPropVal(_T("name"),&nameValue)){

                      aXRCWndClassData.Add(
                        XRCWndClassData(nameValue,classValue,node)
                      );
                    }
                    node = node -> GetNext();
            }
        }
        wxString internalName = GetInternalFileName(parFiles[i], flist);

        doc.Save(parOutputPath + wxFILE_SEP_PATH + internalName);
        flist.Add(internalName);
    }

    return flist;
}
Exemple #4
0
wxArrayString wxcXmlResourceCmp::PrepareTempFiles()
{
    wxArrayString flist;
    wxXmlDocument doc;

    if(!doc.Load(m_xrcFile)) {
        m_retCode = 1;
        return wxArrayString();
    }

    wxString name, ext, path;
    wxFileName::SplitPath(m_xrcFile, &path, &name, &ext);
    FindFilesInXML(doc.GetRoot(), flist, path);
    wxString internalName = GetInternalFileName(m_xrcFile, flist);

    doc.Save(m_outputPath + wxFILE_SEP_PATH + internalName);
    flist.Add(internalName);

    return flist;
}
Exemple #5
0
void wxcXmlResourceCmp::MakePackagePython(const wxArrayString& flist)
{
    wxFFile file(m_outputCppFile, wxT("wt"));
    unsigned i;

    file.Write("#\n"
               "# This file was automatically generated by wxrc, do not edit by hand.\n"
               "#\n\n"
               "import wx\n"
               "import wx.xrc\n\n");

    file.Write("def " + m_functionName + "():\n");

    for(i = 0; i < flist.GetCount(); i++)
        file.Write(FileToPythonArray(m_outputPath + wxFILE_SEP_PATH + flist[i], i));

    file.Write("    # check if the memory filesystem handler has been loaded yet, and load it if not\n"
               "    wx.MemoryFSHandler.AddFile('XRC_resource/dummy_file', 'dummy value')\n"
               "    fsys = wx.FileSystem()\n"
               "    f = fsys.OpenFile('memory:XRC_resource/dummy_file')\n"
               "    wx.MemoryFSHandler.RemoveFile('XRC_resource/dummy_file')\n"
               "    if f is not None:\n"
               "        f.Destroy()\n"
               "    else:\n"
               "        wx.FileSystem.AddHandler(wx.MemoryFSHandler())\n"
               "\n"
               "    # load all the strings as memory files and load into XmlRes\n");

    for(i = 0; i < flist.GetCount(); i++) {
        wxString s;
        s.Printf("    wx.MemoryFSHandler.AddFile('XRC_resource/" + flist[i] + "', xml_res_file_%u)\n", i);
        file.Write(s);
    }
    file.Write("    wx.xrc.XmlResource.Get().Load('memory:XRC_resource/" + GetInternalFileName(m_xrcFile, flist) +
               "')\n");
    file.Write("\n");
}
Exemple #6
0
void XmlResApp::MakePackageCPP(const wxArrayString& flist)
{
    wxFFile file(parOutput, wxT("wt"));
    size_t i;

    if (flagVerbose)
        wxPrintf(_T("creating C++ source file ") + parOutput +  _T("...\n"));

    file.Write(_T("")
_T("//\n")
_T("// This file was automatically generated by wxrc, do not edit by hand.\n")
_T("//\n\n")
_T("#include <wx/wxprec.h>\n")
_T("\n")
_T("#ifdef __BORLANDC__\n")
_T("    #pragma hdrstop\n")
_T("#endif\n")
_T("\n")
_T("")
_T("#include <wx/filesys.h>\n")
_T("#include <wx/fs_mem.h>\n")
_T("#include <wx/xrc/xmlres.h>\n")
_T("#include <wx/xrc/xh_all.h>\n")
_T("\n"));

    for (i = 0; i < flist.Count(); i++)
        file.Write(
              FileToCppArray(parOutputPath + wxFILE_SEP_PATH + flist[i], i));

    file.Write(_T("")
_T("void ") + parFuncname + wxT("()\n")
_T("{\n")
_T("\n")
_T("    // Check for memory FS. If not present, load the handler:\n")
_T("    {\n")
_T("        wxMemoryFSHandler::AddFile(wxT(\"XRC_resource/dummy_file\"), wxT(\"dummy one\"));\n")
_T("        wxFileSystem fsys;\n")
_T("        wxFSFile *f = fsys.OpenFile(wxT(\"memory:XRC_resource/dummy_file\"));\n")
_T("        wxMemoryFSHandler::RemoveFile(wxT(\"XRC_resource/dummy_file\"));\n")
_T("        if (f) delete f;\n")
_T("        else wxFileSystem::AddHandler(new wxMemoryFSHandler);\n")
_T("    }\n")
_T("\n"));

    for (i = 0; i < flist.Count(); i++)
    {
        wxString s;
        s.Printf(_T("    wxMemoryFSHandler::AddFile(wxT(\"XRC_resource/") + flist[i] +
                 _T("\"), xml_res_file_%i, xml_res_size_%i);\n"), i, i);
        file.Write(s);
    }

    for (i = 0; i < parFiles.Count(); i++)
    {
        file.Write(_T("    wxXmlResource::Get()->Load(wxT(\"memory:XRC_resource/") +
                   GetInternalFileName(parFiles[i], flist) + _T("\"));\n"));
    }

    file.Write(_T("}\n"));


}
Exemple #7
0
void XmlResApp::MakePackageCPP(const wxArrayString& flist)
{
    wxFFile file(parOutput, wxT("wt"));
    size_t i;

    if (flagVerbose)
        wxPrintf(_T("creating C++ source file ") + parOutput +  _T("...\n"));

    file.Write(_T("")
_T("//\n")
_T("// This file was automatically generated by wxrc, do not edit by hand.\n")
_T("//\n\n")
_T("#include <wx/wxprec.h>\n")
_T("\n")
_T("#ifdef __BORLANDC__\n")
_T("    #pragma hdrstop\n")
_T("#endif\n")
_T("\n")
_T("")
_T("#include <wx/filesys.h>\n")
_T("#include <wx/fs_mem.h>\n")
_T("#include <wx/xrc/xmlres.h>\n")
_T("#include <wx/xrc/xh_all.h>\n")
_T("\n")
_T("#if wxCHECK_VERSION(2,8,5) && wxABI_VERSION >= 20805\n")
_T("    #define XRC_ADD_FILE(name, data, size, mime) \\\n")
_T("        wxMemoryFSHandler::AddFileWithMimeType(name, data, size, mime)\n")
_T("#else\n")
_T("    #define XRC_ADD_FILE(name, data, size, mime) \\\n")
_T("        wxMemoryFSHandler::AddFile(name, data, size)\n")
_T("#endif\n")
_T("\n"));

    for (i = 0; i < flist.Count(); i++)
        file.Write(
              FileToCppArray(parOutputPath + wxFILE_SEP_PATH + flist[i], i));

    file.Write(_T("")
_T("void ") + parFuncname + wxT("()\n")
_T("{\n")
_T("\n")
_T("    // Check for memory FS. If not present, load the handler:\n")
_T("    {\n")
_T("        wxMemoryFSHandler::AddFile(wxT(\"XRC_resource/dummy_file\"), wxT(\"dummy one\"));\n")
_T("        wxFileSystem fsys;\n")
_T("        wxFSFile *f = fsys.OpenFile(wxT(\"memory:XRC_resource/dummy_file\"));\n")
_T("        wxMemoryFSHandler::RemoveFile(wxT(\"XRC_resource/dummy_file\"));\n")
_T("        if (f) delete f;\n")
_T("        else wxFileSystem::AddHandler(new wxMemoryFSHandler);\n")
_T("    }\n")
_T("\n"));

    for (i = 0; i < flist.Count(); i++)
    {
        wxString s;

        wxString mime;
        wxString ext = wxFileName(flist[i]).GetExt();
        if ( ext.Lower() == _T("xrc") )
            mime = _T("text/xml");
#if wxUSE_MIMETYPE
        else
        {
            wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension(ext);
            if ( ft )
            {
                ft->GetMimeType(&mime);
                delete ft;
            }
        }
#endif // wxUSE_MIMETYPE

        s.Printf(_T("    XRC_ADD_FILE(wxT(\"XRC_resource/") + flist[i] +
                 _T("\"), xml_res_file_%i, xml_res_size_%i, _T(\"%s\"));\n"),
                 i, i, mime.c_str());
        file.Write(s);
    }

    for (i = 0; i < parFiles.Count(); i++)
    {
        file.Write(_T("    wxXmlResource::Get()->Load(wxT(\"memory:XRC_resource/") +
                   GetInternalFileName(parFiles[i], flist) + _T("\"));\n"));
    }

    file.Write(_T("}\n"));


}
Exemple #8
0
void wxcXmlResourceCmp::MakePackageCPP(const wxArrayString& flist)
{
    wxFFile file(m_outputCppFile, wxT("wt"));
    unsigned i;

    file.Write(""
               "//\n"
               "// This file was automatically generated by wxrc, do not edit by hand.\n"
               "//\n\n"
               "#include <wx/wxprec.h>\n"
               "\n"
               "#ifdef __BORLANDC__\n"
               "    #pragma hdrstop\n"
               "#endif\n"
               "\n"
               ""
               "#include <wx/filesys.h>\n"
               "#include <wx/fs_mem.h>\n"
               "#include <wx/xrc/xmlres.h>\n"
               "#include <wx/xrc/xh_all.h>\n"
               "\n"
               "#if wxCHECK_VERSION(2,8,5) && wxABI_VERSION >= 20805\n"
               "    #define XRC_ADD_FILE(name, data, size, mime) \\\n"
               "        wxMemoryFSHandler::AddFileWithMimeType(name, data, size, mime)\n"
               "#else\n"
               "    #define XRC_ADD_FILE(name, data, size, mime) \\\n"
               "        wxMemoryFSHandler::AddFile(name, data, size)\n"
               "#endif\n"
               "\n");

    for(i = 0; i < flist.GetCount(); i++)
        file.Write(FileToCppArray(m_outputPath + wxFILE_SEP_PATH + flist[i], i));

    file.Write(""
               "void " +
               m_functionName +
               "()\n"
               "{\n"
               "\n"
               "    // Check for memory FS. If not present, load the handler:\n"
               "    {\n"
               "        wxMemoryFSHandler::AddFile(wxT(\"XRC_resource/dummy_file\"), wxT(\"dummy one\"));\n"
               "        wxFileSystem fsys;\n"
               "        wxFSFile *f = fsys.OpenFile(wxT(\"memory:XRC_resource/dummy_file\"));\n"
               "        wxMemoryFSHandler::RemoveFile(wxT(\"XRC_resource/dummy_file\"));\n"
               "        if (f) delete f;\n");
    if(wxcProjectMetadata::Get().IsAddHandlers()) {
        file.Write("        else wxFileSystem::AddHandler(new wxMemoryFSHandlerBase);\n");
    }
    file.Write("    }\n\n");
    for(i = 0; i < flist.GetCount(); i++) {
        wxString s;

        wxString mime;
        wxString ext = wxFileName(flist[i]).GetExt();
        if(ext.Lower() == wxT("xrc")) mime = wxT("text/xml");
#if wxUSE_MIMETYPE
        else {
            wxFileType* ft = wxTheMimeTypesManager->GetFileTypeFromExtension(ext);
            if(ft) {
                ft->GetMimeType(&mime);
                delete ft;
            }
        }
#endif // wxUSE_MIMETYPE

        s.Printf("    XRC_ADD_FILE(wxT(\"XRC_resource/" + flist[i] +
                     "\"), xml_res_file_%u, xml_res_size_%u, wxT(\"%s\"));\n",
                 i, i, mime.c_str());
        file.Write(s);
    }

    file.Write("    wxXmlResource::Get()->Load(wxT(\"memory:XRC_resource/" + GetInternalFileName(m_xrcFile, flist) +
               "\"));\n");
    file.Write("}\n");
}