// wxr2xml.cpp: implementation of the wxr2xml class.
// 8/30/00 Brian Gavin
// only tested on wxMSW so far
//License: wxWindows Liscense
// ////////////////////////////////////////////////////////////////////
/*
How to use class:
#include "wxr2xml.h"
...
wxr2xml trans;
trans->Convert("Myfile.wxr","Myfile.xml");
*/
#ifdef __GNUG__
#pragma implementation "wxr2xml.h"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wxr2xml.h"
// ////////////////////////////////////////////////////////////////////
// Construction/Destruction
// ////////////////////////////////////////////////////////////////////
wxr2xml::wxr2xml()
{
}
wxr2xml::~wxr2xml()
{
}
bool wxr2xml::Convert(wxString wxrfile, wxString xmlfile)
{
bool result;
result = m_xmlfile.Open(xmlfile.c_str(), "w+t");
wxASSERT_MSG(result, "Couldn't create XML file");
if (!result)
return FALSE;
result = m_table.ParseResourceFile(wxrfile);
wxASSERT_MSG(result, "Couldn't Load WXR file");
if (!result)
return FALSE;
// Write basic xml header
m_xmlfile.Write("\n");
m_xmlfile.Write("\n");
result = ParseResources();
m_xmlfile.Write("\n");
m_xmlfile.Close();
return result;
}
bool wxr2xml::ParseResources()
{
m_table.BeginFind();
wxNode *node;
while ((node = m_table.Next()))
{
wxItemResource *res = (wxItemResource *) node->Data();
wxString resType(res->GetType());
if (resType == "wxDialog")
ParseDialog(res);
else if (resType == "wxPanel")
ParsePanel(res);
else if (resType == "wxPanel")
ParsePanel(res);
else if (resType == "wxMenu")
ParseMenuBar(res);
else if (resType == "wxBitmap")
ParseBitmap(res);
else
wxLogError("Found unsupported resource " + resType);
}
return TRUE;
}
void wxr2xml::ParsePanel(wxItemResource * res)
{
m_xmlfile.Write("\t\n");
ParseControls(res);
m_xmlfile.Write(" \t\t\n");
m_xmlfile.Write("\t\n\n");
}
void wxr2xml::ParseDialog(wxItemResource * res)
{
PanelStuff(res);
m_xmlfile.Write("\t\n\n");
}
void wxr2xml::ParseControls(wxItemResource * res)
{
wxNode *node = res->GetChildren().First();
while (node)
{
wxItemResource *res = (wxItemResource *) node->Data();
wxString resType(res->GetType());
if (resType == "wxButton")
ParseButton(res);
else if ((resType == "wxTextCtrl") | (resType == "wxText")
| (resType == "wxMultiText"))
ParseTextCtrl(res);
else if (resType == "wxCheckBox")
ParseCheckBox(res);
else if (resType == "wxRadioBox")
ParseRadioBox(res);
else if (resType == "wxListBox")
ParseListBox(res);
else if ((resType == "wxStaticText") | (resType == "wxMessage"))
ParseStaticText(res);
else if (resType == "wxChoice")
ParseChoice(res);
else if (resType == "wxGauge")
ParseGauge(res);
else if (resType == "wxSlider")
ParseSlider(res);
else if (resType == "wxComboBox")
ParseComboBox(res);
else if (resType == "wxRadioButton")
ParseRadioButton(res);
else if (resType == "wxStaticBitmap")
ParseStaticBitmap(res);
else if (resType == "wxScrollBar")
ParseScrollBar(res);
else if ((resType == "wxStaticBox") | (resType == "wxGroupBox"))
ParseStaticBox(res);
else if (resType == "wxBitmapButton")
ParseBitmapButton(res);
else
wxLogError("Found unsupported resource " + resType);
node = node->Next();
}
}
// Write out basic stuff every control has
// name,position,size,bg,fg
void wxr2xml::WriteControlInfo(wxItemResource * res)
{
m_xmlfile.Write(GenerateName(res));
m_xmlfile.Write(">\n");
m_xmlfile.Write(GetPosition(res));
m_xmlfile.Write(GetSize(res));
m_xmlfile.Write(GetStyles(res));
WriteFontInfo(res);
}
wxString wxr2xml::GetSize(wxItemResource * res)
{
wxString msg;
if (m_dlgunits)
msg << "\t\t\t\t" << res->GetWidth() << "," << res->GetHeight() << "d\n";
else
msg << "\t\t\t\t" << res->GetWidth() << "," << res->GetHeight() << "\n";
return msg;
}
wxString wxr2xml::GetPosition(wxItemResource * res)
{
wxString msg;
if (m_dlgunits)
msg << "\t\t\t\t" << res->GetX() << "," << res->GetY() << "d\n";
else
msg << "\t\t\t\t" << res->GetX() << "," << res->GetY() << "\n";
return msg;
}
void wxr2xml::ParseButton(wxItemResource * res)
{
m_xmlfile.Write("\t\t\t