change in XRC format

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8491 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2000-10-07 21:56:37 +00:00
parent 3efb0e4bbd
commit e066e2566a
79 changed files with 730 additions and 606 deletions

View File

@@ -31,6 +31,7 @@
#include "editor.h"
#include "nodehnd.h"
#include "xmlhelpr.h"
#include "preview.h"
@@ -146,7 +147,6 @@ EditorFrame::EditorFrame(wxFrame *parent, const wxString& filename)
m_SelectedNode = NULL;
m_Resource = NULL;
m_FileName = wxEmptyString;
m_Preview = NULL;
m_SelectedProp = -1;
wxMenu *menuFile = new wxMenu;
@@ -187,7 +187,6 @@ EditorFrame::EditorFrame(wxFrame *parent, const wxString& filename)
#endif
// must stay last:
m_Handlers.Append(new NodeHandlerUnknown(this));
// Create toolbar:
wxToolBar *toolBar = CreateToolBar(wxNO_BORDER | wxTB_HORIZONTAL | wxTB_FLAT);
@@ -295,6 +294,8 @@ EditorFrame::EditorFrame(wxFrame *parent, const wxString& filename)
EditorFrame::~EditorFrame()
{
PreviewFrame::Get()->Close();
wxConfigBase *cfg = wxConfigBase::Get();
cfg->Write("editor_x", (long)GetPosition().x);
@@ -400,102 +401,6 @@ void EditorFrame::NewFile()
void EditorFrame::RefreshPreview(wxXmlNode *node)
{
wxConfigBase *cfg = wxConfigBase::Get();
wxBusyCursor bcur;
wxXmlResource *res = new wxXmlResource;
wxString tempfile;
wxPoint pos = wxPoint(cfg->Read("preview_x", -1), cfg->Read("preview_y", -1));
wxSize size = wxSize(cfg->Read("preview_w", 50), cfg->Read("preview_h", 300));
while (node->GetParent() != m_Resource->GetRoot())
node = node->GetParent();
m_Preview = wxFindWindowByName("preview_window");
if (m_Preview)
{
pos = m_Preview->GetPosition();
size = m_Preview->GetSize();
cfg->Write("preview_x", (long)pos.x);
cfg->Write("preview_y", (long)pos.y);
cfg->Write("preview_w", (long)size.x);
cfg->Write("preview_h", (long)size.y);
}
res->InitAllHandlers();
wxGetTempFileName("xmleditor", tempfile);
m_Resource->Save(tempfile, wxXML_IO_BIN);
res->Load(tempfile);
if (node->GetName() == "dialog")
{
wxDialog *dlg = new wxDialog;
if (res->LoadDialog(dlg, NULL, node->GetPropVal("name", "-1")))
{
if (pos.x != -1) dlg->Move(pos);
dlg->Show(TRUE);
if (m_Preview) m_Preview->Close(TRUE);
m_Preview = dlg;
m_Preview->SetName("preview_window");
m_Preview->SetFocus();
}
else
{
delete dlg;
wxLogError(_("Cannot preview the dialog -- XML resource corrupted."));
}
}
else if (node->GetName() == "menubar" || node->GetName() == "menu")
{
wxMenuBar *mbar;
if (node->GetName() == "menubar")
mbar = res->LoadMenuBar(node->GetPropVal("name", "-1"));
else
{
mbar = new wxMenuBar;
wxMenu *m = res->LoadMenu(node->GetPropVal("name", "-1"));
if (m != NULL) mbar->Append(m, node->GetPropVal("name", "-1"));
else { delete mbar; mbar = NULL; }
}
if (mbar == NULL)
wxLogError(_("Cannot preview the menu -- XML resource corrupted."));
else
{
wxFrame *frame = new wxFrame(NULL, -1, _("Menu preview"), pos, size);
frame->SetMenuBar(mbar);
frame->CreateStatusBar();
if (m_Preview) m_Preview->Close(TRUE);
m_Preview = frame;
m_Preview->SetName("preview_window");
m_Preview->Show(TRUE);
m_Preview->SetFocus();
}
}
else if (node->GetName() == "toolbar")
{
wxFrame *frame = new wxFrame(NULL, -1, _("Menu preview"), pos, size);
frame->SetToolBar(res->LoadToolBar(frame, node->GetPropVal("name", "-1")));
frame->CreateStatusBar();
if (m_Preview) m_Preview->Close(TRUE);
m_Preview = frame;
m_Preview->SetName("preview_window");
m_Preview->Show(TRUE);
m_Preview->SetFocus();
}
delete res;
wxRemoveFile(tempfile);
}
void EditorFrame::RefreshTree()
{
wxXmlNode *sel = m_SelectedNode;
@@ -802,7 +707,7 @@ void EditorFrame::OnToolbar(wxCommandEvent& event)
{
XmlTreeData* dt = (XmlTreeData*)m_TreeCtrl->GetItemData(m_TreeCtrl->GetSelection());;
if (dt != NULL && dt->Node != NULL)
RefreshPreview(dt->Node);
PreviewFrame::Get()->Preview(dt->Node);
break;
}
@@ -873,7 +778,9 @@ void EditorFrame::OnNewNode(wxCommandEvent& event)
NodeHandler *hnd = FindHandler(realnode);
wxString name = hnd->GetChildTypes()[event.GetId()-ID_NEWSYBNODE];
wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, name);
wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, _T("object"));
node->AddProperty(_T("class"), name);
hnd->InsertNode(realnode, node, m_SelectedNode);
wxTreeItemId root = m_TreeCtrl->GetSelection();
SelectNode(node, &root);
@@ -887,7 +794,9 @@ void EditorFrame::OnNewNode(wxCommandEvent& event)
NodeHandler *hnd = FindHandler(realnode);
wxString name = hnd->GetChildTypes()[event.GetId()-ID_NEWNODE];
wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, name);
wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, _T("object"));
node->AddProperty(_T("class"), name);
hnd->InsertNode(realnode, node);
wxTreeItemId root = m_TreeCtrl->GetSelection();
SelectNode(node, &root);
@@ -898,15 +807,16 @@ void EditorFrame::OnNewNode(wxCommandEvent& event)
wxString name;
switch (event.GetId())
{
case ID_NEWDIALOG : name = "dialog"; break;
case ID_NEWPANEL : name = "panel"; break;
case ID_NEWMENU : name = "menu"; break;
case ID_NEWMENUBAR : name = "menubar"; break;
case ID_NEWTOOLBAR : name = "toolbar"; break;
case ID_NEWDIALOG : name = _T("wxDialog"); break;
case ID_NEWPANEL : name = _T("wxPanel"); break;
case ID_NEWMENU : name = _T("wxMenu"); break;
case ID_NEWMENUBAR : name = _T("wxMenuBar"); break;
case ID_NEWTOOLBAR : name = _T("wxToolBar"); break;
default : return; // never occurs
}
wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, name);
wxXmlNode *node = new wxXmlNode(wxXML_ELEMENT_NODE, _T("object"));
node->AddProperty(_T("class"), name);
m_Resource->GetRoot()->AddChild(node);
NotifyChanged(CHANGED_TREE);
SelectNode(node);
@@ -921,11 +831,11 @@ void EditorFrame::OnRightClickTree(wxPoint pos)
if (m_SelectedNode == NULL || m_SelectedNode == m_Resource->GetRoot())
{
popup->Append(ID_NEWDIALOG, _("New dialog"));
popup->Append(ID_NEWPANEL, _("New panel"));
popup->Append(ID_NEWMENU, _("New menu"));
popup->Append(ID_NEWMENUBAR, _("New menubar"));
popup->Append(ID_NEWTOOLBAR, _("New toolbar"));
popup->Append(ID_NEWDIALOG, _("New wxDialog"));
popup->Append(ID_NEWPANEL, _("New wxPanel"));
popup->Append(ID_NEWMENU, _("New wxMenu"));
popup->Append(ID_NEWMENUBAR, _("New wxMenuBar"));
popup->Append(ID_NEWTOOLBAR, _("New wxToolBar"));
}
else
@@ -940,10 +850,20 @@ void EditorFrame::OnRightClickTree(wxPoint pos)
if (!arr.IsEmpty())
{
wxMenu *news = new wxMenu;
wxMenu *news2 = news;
for (size_t i = 0; i < arr.GetCount(); i++)
{
news->Append(i + ID_NEWNODE, arr[i]);
if (i % 16 == 15) news->Break();
news2->Append(i + ID_NEWNODE, arr[i]);
#ifdef __WXGTK__ // doesn't support Break
if (i % 20 == 19)
{
wxMenu *m = new wxMenu;
news2->Append(ID_NEWNODE+arr.GetCount(), _("More..."), m);
news2 = m;
}
#else
if (i % 16 == 15) news2->Break();
#endif
}
popup->Append(ID_NEWNODE-1, _("New child"), news);
}
@@ -963,10 +883,20 @@ void EditorFrame::OnRightClickTree(wxPoint pos)
if (!arr.IsEmpty())
{
wxMenu *news = new wxMenu;
wxMenu *news2 = news;
for (size_t i = 0; i < arr.GetCount(); i++)
{
news->Append(i + ID_NEWSYBNODE, arr[i]);
if (i % 16 == 15) news->Break();
news2->Append(i + ID_NEWSYBNODE, arr[i]);
#ifdef __WXGTK__ // doesn't support Break
if (i % 20 == 19)
{
wxMenu *m = new wxMenu;
news2->Append(ID_NEWSYBNODE+arr.GetCount(), _("More..."), m);
news2 = m;
}
#else
if (i % 16 == 15) news2->Break();
#endif
}
popup->Append(ID_NEWSYBNODE-1, _("New sybling"), news);
}
@@ -974,10 +904,10 @@ void EditorFrame::OnRightClickTree(wxPoint pos)
popup->AppendSeparator();
popup->Append(ID_CUT, "Cut");
popup->Append(ID_COPY, "Copy");
popup->Append(ID_PASTE_SYBLING, "Paste as sybling");
popup->Append(ID_PASTE_CHILD, "Paste as child");
popup->Append(ID_CUT, _("Cut"));
popup->Append(ID_COPY, _("Copy"));
popup->Append(ID_PASTE_SYBLING, _("Paste as sybling"));
popup->Append(ID_PASTE_CHILD, _("Paste as child"));
popup->AppendSeparator();
popup->Append(ID_DELETE_NODE, _("Delete"));
popup->Enable(ID_PASTE_SYBLING, m_Clipboard != NULL);