+++ /dev/null
-/////////////////////////////////////////////////////////////////////////////
-// Author: Vaclav Slavik
-// Created: 2000/05/05
-// RCS-ID: $Id$
-// Copyright: (c) 2000 Vaclav Slavik
-// Licence: wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifdef __GNUG__
- #pragma implementation "pe_basic.h"
-#endif
-
-// For compilers that support precompilation, includes "wx/wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-
-#include "wx/wx.h"
-#include "wx/xml/xml.h"
-#include "wx/tokenzr.h"
-#include "pe_basic.h"
-#include "xmlhelpr.h"
-#include "editor.h"
-#include "preview.h"
-#include "nodehnd.h"
-
-
-BEGIN_EVENT_TABLE(PropEditCtrlTxt, PropEditCtrl)
- EVT_TEXT(wxID_ANY, PropEditCtrlTxt::OnText)
-END_EVENT_TABLE()
-
-
-wxWindow *PropEditCtrlTxt::CreateEditCtrl()
-{
- return (m_TextCtrl = new wxTextCtrl(this, wxID_ANY));
-}
-
-
-
-void PropEditCtrlTxt::OnText(wxCommandEvent& WXUNUSED(event))
-{
- if (CanSave())
- {
- WriteValue();
- EditorFrame::Get()->NotifyChanged(CHANGED_PROPS);
- }
-}
-
-
-
-void PropEditCtrlTxt::ReadValue()
-{
- m_TextCtrl->SetValue(XmlReadValue(GetNode(), m_PropInfo->Name));
-}
-
-
-
-void PropEditCtrlTxt::WriteValue()
-{
- wxString newv = m_TextCtrl->GetValue();
- XmlWriteValue(GetNode(), m_PropInfo->Name, newv);
- m_TreeCtrl->SetItemBold(m_TreeItem, true);
-}
-
-
-
-wxWindow *PropEditCtrlInt::CreateEditCtrl()
-{
- PropEditCtrlTxt::CreateEditCtrl();
-#if wxUSE_VALIDATORS
- m_TextCtrl->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
-#endif
- return m_TextCtrl;
-}
-
-
-
-
-
-
-
-BEGIN_EVENT_TABLE(PropEditCtrlBool, PropEditCtrl)
- EVT_CHOICE(wxID_ANY, PropEditCtrlBool::OnChoice)
-END_EVENT_TABLE()
-
-wxWindow *PropEditCtrlBool::CreateEditCtrl()
-{
- m_Choice = new wxChoice(this, wxID_ANY);
- m_Choice->Append(_T("false"));
- m_Choice->Append(_T("true"));
- return m_Choice;
-}
-
-
-
-void PropEditCtrlBool::ReadValue()
-{
- int sel;
- if (XmlReadValue(GetNode(), m_PropInfo->Name) == _T("0")) sel = 0;
- else sel = 1;
- m_Choice->SetSelection(sel);
-}
-
-
-
-void PropEditCtrlBool::WriteValue()
-{
- wxString newv = m_Choice->GetSelection() == 0 ? _T("0") : _T("1");
-
- XmlWriteValue(GetNode(), m_PropInfo->Name, newv);
- m_TreeCtrl->SetItemBold(m_TreeItem, true);
-}
-
-
-
-wxString PropEditCtrlBool::GetValueAsText(wxTreeItemId ti)
-{
- PropertyInfo& pir = ((PETreeData*)m_TreeCtrl->GetItemData(ti))->PropInfo;
- wxString x = XmlReadValue(GetNode(), pir.Name);
- if (x == _T("1")) x = _T("true");
- else if (x == _T("0")) x = _T("false");
- return x;
-}
-
-
-
-void PropEditCtrlBool::OnChoice(wxCommandEvent& WXUNUSED(event))
-{
- if (CanSave())
- {
- WriteValue();
- EditorFrame::Get()->NotifyChanged(CHANGED_PROPS);
- }
-}
-
-
-
-
-// --------------------------- PropEditCtrlCoord -----------------------
-
-class PropEditCtrlCoordXY : public PropEditCtrlInt
-{
- public:
- PropEditCtrlCoordXY(PropertiesFrame *propFrame, int which)
- : PropEditCtrlInt(propFrame), m_which(which) {}
-
- virtual void ReadValue()
- {
- wxString s = XmlReadValue(GetNode(), m_PropInfo->Name);
- if (s.IsEmpty())
- {
- m_c[0] = m_c[1] = _T("-1");
- }
- else
- {
- wxStringTokenizer tkn(s.BeforeFirst(_T('d')), _T(","));
- m_c[0] = tkn.GetNextToken();
- m_c[1] = tkn.GetNextToken();
- }
- m_TextCtrl->SetValue(m_c[m_which]);
- }
-
- virtual void WriteValue()
- {
- m_c[m_which] = m_TextCtrl->GetValue();
- if (m_c[0].IsEmpty()) m_c[0] = _T("-1");
- if (m_c[1].IsEmpty()) m_c[1] = _T("-1");
- wxString s;
- s << m_c[0] << _T(',') << m_c[1];
- wxString prev = XmlReadValue(GetNode(), m_PropInfo->Name);
- if (prev[prev.Len()-1] == _T('d')) s << _T('d');
- XmlWriteValue(GetNode(), m_PropInfo->Name, s);
- m_TreeCtrl->SetItemBold(m_TreeCtrl->GetItemParent(m_TreeItem), true);
- }
-
- virtual wxString GetValueAsText(wxTreeItemId ti)
- {
- PropertyInfo *pi = &(((PETreeData*)m_TreeCtrl->GetItemData(ti))->PropInfo);
- wxString s = XmlReadValue(GetNode(), pi->Name);
- if (s.IsEmpty())
- {
- m_c[0] = m_c[1] = _T("-1");
- }
- else
- {
- wxStringTokenizer tkn(s.BeforeFirst(_T('d')), _T(","));
- m_c[0] = tkn.GetNextToken();
- m_c[1] = tkn.GetNextToken();
- }
- return m_c[m_which];
- }
-
- virtual wxString GetPropName(const PropertyInfo& WXUNUSED(pinfo))
- {
- if (m_which == 0) return _T("x"); else return _T("y");
- }
-
- virtual bool HasClearButton() { return false; }
- virtual bool IsPresent(const PropertyInfo& WXUNUSED(pinfo)) { return false; }
-
-
- protected:
- wxString m_c[2];
- int m_which;
-};
-
-
-class PropEditCtrlCoordDlg : public PropEditCtrlBool
-{
- public:
- PropEditCtrlCoordDlg(PropertiesFrame *propFrame)
- : PropEditCtrlBool(propFrame) {}
-
- virtual void ReadValue()
- {
- wxString s = XmlReadValue(GetNode(), m_PropInfo->Name);
- if (s.IsEmpty()) m_Choice->SetSelection(1);
- else if (s[s.Length()-1] == _T('d'))
- m_Choice->SetSelection(1);
- else
- m_Choice->SetSelection(0);
- }
-
- virtual void WriteValue()
- {
- wxString s = XmlReadValue(GetNode(), m_PropInfo->Name).BeforeFirst(_T('d'));
- if (m_Choice->GetSelection() == 1) s << _T('d');
- XmlWriteValue(GetNode(), m_PropInfo->Name, s);
- m_TreeCtrl->SetItemBold(m_TreeCtrl->GetItemParent(m_TreeItem), true);
- }
-
- virtual wxString GetValueAsText(wxTreeItemId ti)
- {
- PropertyInfo *pi = &(((PETreeData*)m_TreeCtrl->GetItemData(ti))->PropInfo);
- wxString s = XmlReadValue(GetNode(), pi->Name);
- if (s.IsEmpty())
- return _("true");
- else if (s[s.Length()-1] != _T('d'))
- return _("false");
- else
- return _("true");
- }
-
- virtual wxString GetPropName(const PropertyInfo& WXUNUSED(pinfo))
- {
- return _T("dlg");
- }
-
- virtual bool HasClearButton() { return false; }
- virtual bool IsPresent(const PropertyInfo& WXUNUSED(pinfo)) { return false; }
-};
-
-
-
-
-PropEditCtrlCoord::PropEditCtrlCoord(PropertiesFrame *propFrame)
- : PropEditCtrlTxt(propFrame)
-{
- m_CtrlX = new PropEditCtrlCoordXY(propFrame, 0);
- m_CtrlY = new PropEditCtrlCoordXY(propFrame, 1);
- m_CtrlDlg = new PropEditCtrlCoordDlg(propFrame);
-}
-
-PropEditCtrlCoord::~PropEditCtrlCoord()
-{
- delete m_CtrlX;
- delete m_CtrlY;
- delete m_CtrlDlg;
-}
-
-
-
-wxTreeItemId PropEditCtrlCoord::CreateTreeEntry(wxTreeItemId parent, const PropertyInfo& pinfo)
-{
- wxTreeItemId id = PropEditCtrlTxt::CreateTreeEntry(parent, pinfo);
- m_CtrlX->CreateTreeEntry(id, PropertyInfo(_T("text"), pinfo.Name, _T("")));
- m_CtrlY->CreateTreeEntry(id, PropertyInfo(_T("text"), pinfo.Name, _T("")));
- m_CtrlDlg->CreateTreeEntry(id, PropertyInfo(_T("bool"), pinfo.Name, _T("")));
- return id;
-}
-
-
-
-
-
-
-// --------------------------- PropEditCtrlDim -----------------------
-
-class PropEditCtrlDimX : public PropEditCtrlInt
-{
- public:
- PropEditCtrlDimX(PropertiesFrame *propFrame)
- : PropEditCtrlInt(propFrame){}
-
- virtual void ReadValue()
- {
- wxString s = XmlReadValue(GetNode(), m_PropInfo->Name);
- m_c = s.BeforeFirst(_T('d'));
- m_TextCtrl->SetValue(m_c);
- }
-
- virtual void WriteValue()
- {
- wxString s = XmlReadValue(GetNode(), m_PropInfo->Name);
- bool dlg = !s.IsEmpty() && s[s.Length()-1] == _T('d');
- m_c = m_TextCtrl->GetValue();
- s = m_c;
- if (dlg) s << _T('d');
- XmlWriteValue(GetNode(), m_PropInfo->Name, s);
- m_TreeCtrl->SetItemBold(m_TreeCtrl->GetItemParent(m_TreeItem), true);
- }
-
- virtual wxString GetValueAsText(wxTreeItemId ti)
- {
- PropertyInfo *pi = &(((PETreeData*)m_TreeCtrl->GetItemData(ti))->PropInfo);
- return XmlReadValue(GetNode(), pi->Name).BeforeFirst(_T('d'));
- }
-
- virtual wxString GetPropName(const PropertyInfo& WXUNUSED(pinfo))
- {
- return _T("val");
- }
-
- virtual bool HasClearButton() { return false; }
- virtual bool IsPresent(const PropertyInfo& WXUNUSED(pinfo)) { return false; }
-
-
- protected:
- wxString m_c;
-};
-
-
-
-PropEditCtrlDim::PropEditCtrlDim(PropertiesFrame *propFrame)
- : PropEditCtrlTxt(propFrame)
-{
- m_CtrlX = new PropEditCtrlDimX(propFrame);
- m_CtrlDlg = new PropEditCtrlCoordDlg(propFrame);
-}
-
-PropEditCtrlDim::~PropEditCtrlDim()
-{
- delete m_CtrlX;
- delete m_CtrlDlg;
-}
-
-
-
-wxTreeItemId PropEditCtrlDim::CreateTreeEntry(wxTreeItemId parent, const PropertyInfo& pinfo)
-{
- wxTreeItemId id = PropEditCtrlTxt::CreateTreeEntry(parent, pinfo);
- m_CtrlX->CreateTreeEntry(id, PropertyInfo(_T("text"), pinfo.Name, _T("")));
- m_CtrlDlg->CreateTreeEntry(id, PropertyInfo(_T("bool"), pinfo.Name, _T("")));
- return id;
-}
-
-
-
-
-// --------------------- PropEditCtrlXRCID -----------------------------
-
-#define REAL_NODE (NodeHandler::Find(GetNode())->GetRealNode(GetNode()))
-
-
-void PropEditCtrlXRCID::ReadValue()
-{
- m_TextCtrl->SetValue(REAL_NODE->GetPropVal(_T("name"), wxEmptyString));
-}
-
-
-
-void PropEditCtrlXRCID::WriteValue()
-{
- wxString s =m_TextCtrl->GetValue();
- if (s.IsEmpty()) s = _T("-1");
-
- REAL_NODE->DeleteProperty(_T("name"));
- REAL_NODE->AddProperty(_T("name"), s);
-
- m_TreeCtrl->SetItemBold(m_TreeItem, true);
- EditorFrame::Get()->NotifyChanged(CHANGED_TREE_SELECTED);
-}
-
-
-
-void PropEditCtrlXRCID::Clear()
-{
- EndEdit();
- REAL_NODE->DeleteProperty(_T("name"));
- m_TreeCtrl->SetItemBold(m_TreeItem, false);
- EditorFrame::Get()->NotifyChanged(CHANGED_TREE_SELECTED);
-}
-
-
-
-void PropEditCtrlXRCID::OnDetails()
-{
- wxString choices[] = {wxString(_T("-1"))
- #define stdID(id) , wxString(_T(#id))
- stdID(wxID_OK) stdID(wxID_CANCEL)
- stdID(wxID_YES) stdID(wxID_NO)
- stdID(wxID_APPLY) stdID(wxID_HELP)
- stdID(wxID_HELP_CONTEXT)
-
- stdID(wxID_OPEN) stdID(wxID_CLOSE) stdID(wxID_NEW)
- stdID(wxID_SAVE) stdID(wxID_SAVEAS) stdID(wxID_REVERT)
- stdID(wxID_EXIT) stdID(wxID_UNDO) stdID(wxID_REDO)
- stdID(wxID_PRINT) stdID(wxID_PRINT_SETUP)
- stdID(wxID_PREVIEW) stdID(wxID_ABOUT) stdID(wxID_HELP_CONTENTS)
- stdID(wxID_HELP_COMMANDS) stdID(wxID_HELP_PROCEDURES)
- stdID(wxID_CUT) stdID(wxID_COPY) stdID(wxID_PASTE)
- stdID(wxID_CLEAR) stdID(wxID_FIND) stdID(wxID_DUPLICATE)
- stdID(wxID_SELECTALL)
- stdID(wxID_STATIC) stdID(wxID_FORWARD) stdID(wxID_BACKWARD)
- stdID(wxID_DEFAULT) stdID(wxID_MORE) stdID(wxID_SETUP)
- stdID(wxID_RESET)
- #undef stdID
- };
-
- wxString s =
- wxGetSingleChoice(_("Choose from predefined IDs:"), _("XRCID"),
- 38/*sizeof choices*/, choices);
- if (!s) return;
- m_TextCtrl->SetValue(s);
- WriteValue();
- EditorFrame::Get()->NotifyChanged(CHANGED_PROPS);
-}
-
-
-
-wxString PropEditCtrlXRCID::GetValueAsText(wxTreeItemId WXUNUSED(ti))
-{
- return REAL_NODE->GetPropVal(_T("name"), wxEmptyString);
-}
-
-
-
-bool PropEditCtrlXRCID::IsPresent(const PropertyInfo& WXUNUSED(pinfo))
-{
- return REAL_NODE->HasProp(_T("name"));
-}
-
-#undef REAL_NODE
-