#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(NULL, -1, _("Preview"))
+ : wxFrame(EditorFrame::Get(), -1, _("Preview"),
+ wxDefaultPosition, wxDefaultSize,
+ wxDEFAULT_FRAME_STYLE | wxFRAME_NO_TASKBAR
+#ifdef __WXMSW__
+ | wxFRAME_TOOL_WINDOW
+#endif
+ )
{
+ m_Dirty = FALSE;
ms_Instance = this;
m_Node = NULL;
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)),
m_Splitter->SplitHorizontally(m_ScrollWin, m_LogCtrl, cfg->Read(_T("previewframe_sash"), 300));
CreateStatusBar();
+
+#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::MakeDirty()
+{
+ if (m_Node == NULL) return;
+ if (m_Dirty) return;
+ m_Dirty = TRUE;
+ m_LogCtrl->Clear();
+ m_LogCtrl->SetValue(_("Resource modified.\n"
+ "Move mouse cursor over the preview window to refresh it."));
+}
+
+
+
+void PreviewFrame::Preview(wxXmlNode *node,const wxString &version)
{
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));
if (XmlGetClass(doc.GetRoot()->GetChildren()) == _T("wxDialog"))
XmlSetClass(doc.GetRoot()->GetChildren(), _T("wxPanel"));
- doc.Save(m_TmpFile, wxXML_IO_BIN);
+ doc.Save(m_TmpFile);
// wxXmlResource will detect change automatically
}
}
m_Node = node;
+ m_Version = version;
m_LogCtrl->Clear();
wxLogTextCtrl mylog(m_LogCtrl);
wxSetWorkingDirectory(oldcwd);
wxLog::SetActiveTarget(oldlog);
+
+ m_Dirty = FALSE;
}
0, 0, TRUE);
}
}
+
+
+BEGIN_EVENT_TABLE(PreviewFrame, wxFrame)
+ EVT_ENTER_WINDOW(PreviewFrame::OnMouseEnter)
+END_EVENT_TABLE()
+
+void PreviewFrame::OnMouseEnter(wxMouseEvent& event)
+{
+ if (m_Dirty) Preview(m_Node,m_Version);
+}