#endif
#include "wx/wx.h"
-#include "wx/xml/xml.h"
-#include "wx/xml/xmlres.h"
+#include "wx/xrc/xml.h"
+#include "wx/xrc/xmlres.h"
#include "wx/config.h"
#include "wx/log.h"
#include "wx/splitter.h"
#include "xmlhelpr.h"
#include "editor.h"
-#include "wx/xml/xh_menu.h"
+#include "wx/xrc/xh_menu.h"
class MyMenubarHandler : public wxMenuBarXmlHandler
{
PreviewFrame::PreviewFrame()
: wxFrame(EditorFrame::Get(), -1, _("Preview"),
wxDefaultPosition, wxDefaultSize,
- wxDEFAULT_FRAME_STYLE | wxFRAME_NO_TASKBAR | wxFRAME_TOOL_WINDOW)
+ wxDEFAULT_FRAME_STYLE | wxFRAME_NO_TASKBAR
+#ifdef __WXMSW__
+ | wxFRAME_TOOL_WINDOW
+#endif
+ )
{
m_Dirty = FALSE;
ms_Instance = this;
SetMenuBar(new wxMenuBar());
- m_RC = new wxXmlResource;
- // these handlers take precedence over std. ones:
- m_RC->AddHandler(new MyMenubarHandler(GetMenuBar()));
- // std handlers:
- m_RC->InitAllHandlers();
+ m_RC = NULL;
m_TmpFile = wxGetTempFileName(_T("wxrcedit"));
- m_RC->Load(m_TmpFile);
+ ResetResource();
wxConfigBase *cfg = wxConfigBase::Get();
SetSize(wxRect(wxPoint(cfg->Read(_T("previewframe_x"), -1), cfg->Read(_T("previewframe_y"), -1)),
CreateStatusBar();
- SetSize(GetSize()); // refresh: MSW needs it
+#ifdef __WXMSW__
+ SendSizeEvent(); // force resize for WXMSW
+#endif
}
+void PreviewFrame::ResetResource()
+{
+ delete m_RC;
+ m_RC = new wxXmlResource;
+ // these handlers take precedence over std. ones:
+ m_RC->AddHandler(new MyMenubarHandler(GetMenuBar()));
+ // std handlers:
+ m_RC->InitAllHandlers();
+ wxRemoveFile(m_TmpFile);
+ m_RC->Load(m_TmpFile);
+}
+
PreviewFrame::~PreviewFrame()
{
wxConfigBase *cfg = wxConfigBase::Get();
-void PreviewFrame::Preview(wxXmlNode *node)
+void PreviewFrame::Preview(wxXmlNode *node, wxXmlDocument *orig_doc)
{
+ wxString version = orig_doc->GetRoot()->GetPropVal(wxT("version"), wxT("0.0.0.0"));
+
while (node->GetParent()->GetParent() != NULL) node = node->GetParent();
{
wxXmlDocument doc;
- doc.SetRoot(new wxXmlNode(wxXML_ELEMENT_NODE, _T("resource")));
+ wxXmlNode *root = new wxXmlNode(wxXML_ELEMENT_NODE, _T("resource"));
+ root->AddProperty(new wxXmlProperty(wxT("version"),version,NULL));
+ doc.SetRoot(root);
doc.GetRoot()->AddChild(new wxXmlNode(*node));
+ doc.SetFileEncoding(orig_doc->GetFileEncoding());
if (XmlGetClass(doc.GetRoot()->GetChildren()) == _T("wxDialog"))
XmlSetClass(doc.GetRoot()->GetChildren(), _T("wxPanel"));
- doc.Save(m_TmpFile, wxXML_IO_BIN);
+ if (XmlGetClass(doc.GetRoot()->GetChildren()) == _T("wxFrame"))
+ XmlSetClass(doc.GetRoot()->GetChildren(), _T("wxPanel"));
+
+ doc.Save(m_TmpFile);
// wxXmlResource will detect change automatically
}
}
m_Node = node;
+ m_Doc = orig_doc;
m_LogCtrl->Clear();
wxLogTextCtrl mylog(m_LogCtrl);
PreviewToolbar();
else if (XmlGetClass(node) == _T("wxPanel") || XmlGetClass(node) == _T("wxDialog"))
PreviewPanel();
-
+ else if (XmlGetClass(node) == _T("wxFrame"))
+ PreviewWXFrame();
+
wxSetWorkingDirectory(oldcwd);
wxLog::SetActiveTarget(oldlog);
void PreviewFrame::PreviewPanel()
{
wxPanel *panel = m_RC->LoadPanel(m_ScrollWin, m_Node->GetPropVal(_T("name"), _T("-1")));
-
+
if (panel == NULL)
wxLogError(_("Cannot preview the panel -- XML resource corrupted."));
else
}
}
+void PreviewFrame::PreviewWXFrame()
+{
+ //for this to work the frame MUST have a child panel!
+
+ wxXmlNode* child = m_Node;
+ wxString name;
+
+ while( child != NULL)
+ {
+ name = child->GetPropVal(_T("name"), _T("-1"));
+
+ if(name != _T("-1"))
+ {
+ wxXmlNode* parent = child->GetParent();
+ if(parent->GetPropVal(_T("class"),_T("-1")) == _T("wxPanel"))
+ break;
+ }
+ child = child->GetNext();
+ }
+
+ wxPanel *panel = m_RC->LoadPanel(m_ScrollWin, name);
+
+ if (panel == NULL)
+ wxLogError(_("Cannot preview the panel -- XML resource corrupted."));
+ else
+ {
+ m_ScrollWin->SetScrollbars(1, 1, panel->GetSize().x, panel->GetSize().y,
+ 0, 0, TRUE);
+ }
+}
BEGIN_EVENT_TABLE(PreviewFrame, wxFrame)
EVT_ENTER_WINDOW(PreviewFrame::OnMouseEnter)
void PreviewFrame::OnMouseEnter(wxMouseEvent& event)
{
- if (m_Dirty) Preview(m_Node);
+ if (m_Dirty) Preview(m_Node,m_Doc);
}