wxWidgets/contrib/utils/wxrcedit/nodehnd.h

161 lines
4.4 KiB
C
Raw Normal View History

/////////////////////////////////////////////////////////////////////////////
// Purpose: XML resources editor
// Author: Vaclav Slavik
// Created: 2000/05/05
// RCS-ID: $Id$
// Copyright: (c) 2000 Vaclav Slavik
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma interface "nodehnd.h"
#endif
#ifndef _NODEHND_H_
#define _NODEHND_H_
class WXDLLEXPORT wxXmlNode;
class WXDLLEXPORT wxList;
class WXDLLEXPORT wxListCtrl;
class EditorFrame;
#include "wx/treectrl.h"
#include "wx/xml/xml.h"
#include "prophnd.h"
enum HandlerType
{
HANDLER_NONE = 0,
HANDLER_PANEL = 1,
HANDLER_NORMAL,
HANDLER_SIZER,
HANDLER_SIZERITEM,
HANDLER_NOTEBOOK,
HANDLER_NOTEBOOKPAGE
};
class NodeInfo
{
public:
wxString Node;
HandlerType Type;
PropertyInfoArray Props;
wxArrayString DerivedFrom;
bool Abstract;
wxString ChildType;
int Icon;
void Read(const wxString& filename);
};
WX_DECLARE_OBJARRAY(NodeInfo, NodeInfoArray);
class NodeHandler : public wxObject
{
public:
static NodeHandler *CreateFromFile(const wxString& filename, EditorFrame *frame);
NodeHandler(EditorFrame *frame, NodeInfo *ni);
virtual ~NodeHandler();
virtual bool CanHandle(wxXmlNode *node);
virtual wxTreeItemId CreateTreeNode(wxTreeCtrl *treectrl, wxTreeItemId parent,
wxXmlNode *node);
virtual void CreatePropsList(wxListCtrl *listctrl, wxXmlNode *node);
virtual int GetTreeIcon(wxXmlNode * WXUNUSED(node)) {return m_NodeInfo->Icon;}
virtual wxString GetTreeString(wxXmlNode *node);
wxPanel *CreatePropEditPanel(wxWindow *parent, wxListCtrl *listctrl, int index);
wxArrayString& GetChildTypes();
virtual void InsertNode(wxXmlNode *parent, wxXmlNode *node, wxXmlNode *insert_before = NULL);
virtual wxXmlNode *GetRealNode(wxXmlNode *node) { return node; }
protected:
NodeInfo *m_NodeInfo;
wxArrayString m_ChildTypes;
static PropertyHandler* s_PropHandlers[PROP_TYPES_CNT];
static int s_RefCnt;
static NodeInfoArray* s_AllNodes;
void CreatePropHandlers();
};
// wxPanel handler
class NodeHandlerPanel : public NodeHandler
{
public:
NodeHandlerPanel(EditorFrame *frame, NodeInfo *ni) : NodeHandler(frame, ni) {}
virtual wxTreeItemId CreateTreeNode(wxTreeCtrl *treectrl, wxTreeItemId parent,
wxXmlNode *node);
virtual void InsertNode(wxXmlNode *parent, wxXmlNode *node, wxXmlNode *insert_before = NULL);
};
// wxSizers handler
class NodeHandlerSizer : public NodeHandlerPanel
{
public:
NodeHandlerSizer(EditorFrame *frame, NodeInfo *ni) : NodeHandlerPanel(frame, ni) {}
virtual void InsertNode(wxXmlNode *parent, wxXmlNode *node, wxXmlNode *insert_before = NULL);
virtual int GetTreeIcon(wxXmlNode *node);
};
// item of wxSizer handler
class NodeHandlerSizerItem : public NodeHandler
{
public:
NodeHandlerSizerItem(EditorFrame *frame, NodeInfo *ni) : NodeHandler(frame, ni) {}
virtual wxTreeItemId CreateTreeNode(wxTreeCtrl *treectrl, wxTreeItemId parent,
wxXmlNode *node);
virtual void CreatePropsList(wxListCtrl *listctrl, wxXmlNode *node);
virtual wxString GetTreeString(wxXmlNode *node);
virtual int GetTreeIcon(wxXmlNode *node);
virtual wxXmlNode *GetRealNode(wxXmlNode *node);
};
// wxNotebook handler
class NodeHandlerNotebook : public NodeHandlerPanel
{
public:
NodeHandlerNotebook(EditorFrame *frame, NodeInfo *ni) : NodeHandlerPanel(frame, ni) {}
virtual void InsertNode(wxXmlNode *parent, wxXmlNode *node, wxXmlNode *insert_before = NULL);
};
// notebook page handler
class NodeHandlerNotebookPage : public NodeHandlerSizerItem
{
public:
NodeHandlerNotebookPage(EditorFrame *frame, NodeInfo *ni) :
NodeHandlerSizerItem(frame, ni) {}
};
// Generic handler which handles everything
class NodeHandlerUnknown : public NodeHandler
{
public:
NodeHandlerUnknown(EditorFrame *frame) : NodeHandler(frame, new NodeInfo) {}
virtual bool CanHandle(wxXmlNode *node) { return TRUE; }
};
#endif