|
From: <ak...@us...> - 2008-04-20 20:45:58
|
Revision: 887
http://can.svn.sourceforge.net/can/?rev=887&view=rev
Author: akhe
Date: 2008-04-20 13:45:55 -0700 (Sun, 20 Apr 2008)
Log Message:
-----------
Added MDF Editor dialog
Modified Paths:
--------------
trunk/src/vscp/common/mdf.cpp
trunk/src/vscp/common/mdf.h
trunk/src/vscp/vscpworks/frmmain.cpp
trunk/src/vscp/vscpworks/frmmain.h
trunk/src/vscp/vscpworks/frmmain_symbols.h
trunk/src/vscp/vscpworks/readmsfurl.cpp
trunk/src/vscp/vscpworks/readmsfurl.h
trunk/src/vscp/vscpworks/readmsfurl_symbols.h
trunk/src/vscp/vscpworks/vscpworks.dsp
trunk/src/vscp/vscpworks/vscpworks.pjd
Added Paths:
-----------
trunk/src/vscp/vscpworks/mdfeditor.cpp
trunk/src/vscp/vscpworks/mdfeditor.h
trunk/src/vscp/vscpworks/mdfeditor_symbols.h
Modified: trunk/src/vscp/common/mdf.cpp
===================================================================
--- trunk/src/vscp/common/mdf.cpp 2008-04-18 08:08:45 UTC (rev 886)
+++ trunk/src/vscp/common/mdf.cpp 2008-04-20 20:45:55 UTC (rev 887)
@@ -342,7 +342,7 @@
// parseMDF
//
-bool CMDF::parseMDF( wxString& path )
+bool CMDF::parseMDF( wxString& path, wxString& lang )
{
bool rv = true;
wxXmlDocument doc;
@@ -611,6 +611,16 @@
pAbstraction->m_strDescription = child4->GetNodeContent();
}
}
+ else if ( child4->GetName() == wxT("help") ) {
+ wxString str;
+ str = child4->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pAbstraction->m_strHelp = child4->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pAbstraction->m_strHelp = child4->GetNodeContent();
+ }
+ }
else if ( child4->GetName() == wxT("access") ) {
pAbstraction->m_nAccess = MDF_ACCESS_READ;
wxString strAccessRights = child4->GetNodeContent();
@@ -661,6 +671,16 @@
pValueItem->m_strDescription = child6->GetNodeContent();
}
}
+ else if ( child6->GetName() == wxT("help") ) {
+ wxString str;
+ str = child6->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pValueItem->m_strHelp = child6->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pValueItem->m_strHelp = child6->GetNodeContent();
+ }
+ }
child6 = child6->GetNext();
@@ -723,6 +743,16 @@
pRegister->m_strDescription = child4->GetNodeContent();
}
}
+ else if ( child4->GetName() == wxT("help") ) {
+ wxString str;
+ str = child4->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pRegister->m_strHelp = child4->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pRegister->m_strHelp = child4->GetNodeContent();
+ }
+ }
else if ( child4->GetName() == wxT("bitfield") ) {
wxXmlNode *child5 = child4->GetChildren();
@@ -761,6 +791,16 @@
pBit->m_strDescription = child6->GetNodeContent();
}
}
+ else if ( child6->GetName() == wxT("help") ) {
+ wxString str;
+ str = child6->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pBit->m_strHelp = child6->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pBit->m_strHelp = child6->GetNodeContent();
+ }
+ }
else if ( child6->GetName() == wxT("access") ) {
pBit->m_nAccess = MDF_ACCESS_READ;
@@ -824,6 +864,16 @@
pValueItem->m_strDescription = child6->GetNodeContent();
}
}
+ else if ( child6->GetName() == wxT("help") ) {
+ wxString str;
+ str = child6->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pValueItem->m_strHelp = child6->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pValueItem->m_strHelp = child6->GetNodeContent();
+ }
+ }
child6 = child6->GetNext();
@@ -896,6 +946,16 @@
pAction->m_strDescription = child4->GetNodeContent();
}
}
+ else if ( child4->GetName() == wxT("help") ) {
+ wxString str;
+ str = child4->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pAction->m_strHelp = child4->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pAction->m_strHelp = child4->GetNodeContent();
+ }
+ }
}
}
@@ -942,6 +1002,16 @@
pEvent->m_strDescription = child4->GetNodeContent();
}
}
+ else if ( child4->GetName() == wxT("help") ) {
+ wxString str;
+ str = child4->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pEvent->m_strHelp = child4->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pEvent->m_strHelp = child4->GetNodeContent();
+ }
+ }
else if ( child4->GetName() == wxT("data") ) {
CMDF_EventData *pEventData = new CMDF_EventData;
@@ -950,7 +1020,7 @@
pEventData->m_nOffset = child4->GetPropVal ( wxT ( "offset" ), 0 );
- wxXmlNode *child5 = child5->GetChildren();
+ wxXmlNode *child5 = child4->GetChildren();
while (child5) {
if ( child4->GetName() == wxT("name") ) {
@@ -973,9 +1043,19 @@
pEventData->m_strDescription = child5->GetNodeContent();
}
}
+ else if ( child4->GetName() == wxT("help") ) {
+ wxString str;
+ str = child5->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pEventData->m_strHelp = child5->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pEventData->m_strHelp = child5->GetNodeContent();
+ }
+ }
else if ( child5->GetName() == wxT("valuelist") ) {
- wxXmlNode *child6 = child6->GetChildren();
+ wxXmlNode *child6 = child5->GetChildren();
while (child6) {
if ( child6->GetName() == wxT("item") ) {
@@ -1009,6 +1089,16 @@
pValueItem->m_strDescription = child7->GetNodeContent();
}
}
+ else if ( child7->GetName() == wxT("help") ) {
+ wxString str;
+ str = child7->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pValueItem->m_strHelp = child7->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pValueItem->m_strHelp = child7->GetNodeContent();
+ }
+ }
child7 = child7->GetNext();
@@ -1059,6 +1149,16 @@
pBit->m_strDescription = child7->GetNodeContent();
}
}
+ else if ( child7->GetName() == wxT("help") ) {
+ wxString str;
+ str = child7->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pBit->m_strHelp = child7->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pBit->m_strHelp = child7->GetNodeContent();
+ }
+ }
else if ( child7->GetName() == wxT("access") ) {
pBit->m_nAccess = MDF_ACCESS_READ;
@@ -1147,6 +1247,16 @@
pBit->m_strDescription = child5->GetNodeContent();
}
}
+ else if ( child5->GetName() == wxT("help") ) {
+ wxString str;
+ str = child5->GetPropVal ( wxT ( "lang" ), _("en") );
+ if ( str == m_strLocale ) {
+ pBit->m_strHelp = child5->GetNodeContent();
+ }
+ else if ( ( _("en") == str ) ) {
+ pBit->m_strHelp = child5->GetNodeContent();
+ }
+ }
else if ( child5->GetName() == wxT("access") ) {
pBit->m_nAccess = MDF_ACCESS_READ;
Modified: trunk/src/vscp/common/mdf.h
===================================================================
--- trunk/src/vscp/common/mdf.h 2008-04-18 08:08:45 UTC (rev 886)
+++ trunk/src/vscp/common/mdf.h 2008-04-20 20:45:55 UTC (rev 887)
@@ -83,7 +83,8 @@
wxString m_strName;
wxString m_strDescription;
- wxString m_strValue; // The abstraction tells the type
+ wxString m_strHelp; // Item help text or url
+ wxString m_strValue; // The abstraction tells the type
};
@@ -104,6 +105,7 @@
wxString m_strName;
wxString m_strDescription;
+ wxString m_strHelp; // Item help text or url
wxString m_strID; // Abstract variable id (unique
// inside of MDF
@@ -150,6 +152,7 @@
wxString m_strName;
wxString m_strDescription;
+ wxString m_strHelp; // Item help text or url
uint8_t m_nPos; // position in bit field 0-7 (from the left)
uint8_t m_nWidth; // 1 for one bit 2-8 for bit-field
@@ -180,7 +183,8 @@
wxString m_strName;
wxString m_strDescription;
-
+ wxString m_strHelp; // Item help text or url
+
uint16_t m_nPage;
uint16_t m_nOffset;
uint16_t m_nWidth; // Defaults to 1
@@ -216,6 +220,7 @@
wxString m_strName;
wxString m_strDescription;
+ wxString m_strHelp; // Item help text or url
uint16_t m_nOffset;
uint8_t m_width;
@@ -244,6 +249,7 @@
wxString m_strName;
wxString m_strDescription;
+ wxString m_strHelp; // Item help text or url
uint16_t m_nCode;
@@ -295,6 +301,7 @@
wxString m_strName;
wxString m_strDescription;
+ wxString m_strHelp; // Item help text or url
uint16_t m_nOffset;
@@ -322,6 +329,7 @@
wxString m_strName;
wxString m_strDescription;
+ wxString m_strHelp; // Item help text or url
uint16_t m_nClass;
uint16_t m_nType;
@@ -355,6 +363,7 @@
wxString m_strItem;
wxString m_strDescription;
+ wxString m_strHelp; // Item help text or url
};
WX_DECLARE_LIST( CMDF_Item, MDF_ITEM_LIST );
@@ -467,7 +476,7 @@
@param path Path to downloaded MDF
@return true if the parsing went well.
*/
- bool parseMDF( wxString& path );
+ bool parseMDF( wxString& path, wxString& lang );
wxString m_strLocale; // ISO code for requested language
Modified: trunk/src/vscp/vscpworks/frmmain.cpp
===================================================================
--- trunk/src/vscp/vscpworks/frmmain.cpp 2008-04-18 08:08:45 UTC (rev 886)
+++ trunk/src/vscp/vscpworks/frmmain.cpp 2008-04-20 20:45:55 UTC (rev 887)
@@ -69,6 +69,7 @@
#include "frmvscpsession.h"
#include "frmdeviceconfig.h"
#include "dlgconfiguration.h"
+#include "mdfeditor.h"
extern appConfiguration g_Config;
@@ -171,6 +172,8 @@
EVT_MENU( ID_MENUITEM_CONFIGURATION, frmMain::OnMenuitemConfigurationClick )
+ EVT_MENU( ID_MENUITEM_MDF_EDITOR, frmMain::OnMenuitemMdfEditorClick )
+
EVT_MENU( ID_MENUITEM33, frmMain::OnMenuitemHelpClick )
EVT_MENU( ID_MENUITEM34, frmMain::OnMenuitemFaqClick )
@@ -181,7 +184,7 @@
EVT_MENU( ID_MENUITEM_CREDITS, frmMain::OnMenuitemCrediitsClick )
- EVT_MENU( ID_MENUITEM38, frmMain::OnMenuitemVSCPSiteClick )
+ EVT_MENU( ID_MENUITEM_VSCP_SITE, frmMain::OnMenuitemVSCPSiteClick )
EVT_MENU( ID_MENUITEM39, frmMain::OnMenuitem39Click )
@@ -270,35 +273,37 @@
menuBar->Append(itemMenu3, _("File"));
wxMenu* itemMenu11 = new wxMenu;
itemMenu11->Append(ID_MENUITEM_CONFIGURATION, _("Configuration..."), _T(""), wxITEM_NORMAL);
+ itemMenu11->AppendSeparator();
+ itemMenu11->Append(ID_MENUITEM_MDF_EDITOR, _("MDF Editor"), _T(""), wxITEM_NORMAL);
menuBar->Append(itemMenu11, _("Tools"));
- wxMenu* itemMenu13 = new wxMenu;
- itemMenu13->Append(ID_MENUITEM33, _("VSCP-Works Help"), _T(""), wxITEM_RADIO);
- itemMenu13->Append(ID_MENUITEM34, _("Frequently Asked Questions"), _T(""), wxITEM_NORMAL);
- itemMenu13->Append(ID_MENUITEM35, _("Keyboard shortcuts"), _T(""), wxITEM_NORMAL);
- itemMenu13->AppendSeparator();
- itemMenu13->Append(ID_MENUITEM_THANKS, _("Thanks..."), _T(""), wxITEM_NORMAL);
- itemMenu13->Append(ID_MENUITEM_CREDITS, _("Credits..."), _T(""), wxITEM_NORMAL);
- itemMenu13->AppendSeparator();
- itemMenu13->Append(ID_MENUITEM38, _("Go to VSCP site"), _T(""), wxITEM_NORMAL);
- itemMenu13->AppendSeparator();
- itemMenu13->Append(ID_MENUITEM39, _("About"), _T(""), wxITEM_NORMAL);
- menuBar->Append(itemMenu13, _("Help"));
+ wxMenu* itemMenu15 = new wxMenu;
+ itemMenu15->Append(ID_MENUITEM33, _("VSCP-Works Help"), _T(""), wxITEM_RADIO);
+ itemMenu15->Append(ID_MENUITEM34, _("Frequently Asked Questions"), _T(""), wxITEM_NORMAL);
+ itemMenu15->Append(ID_MENUITEM35, _("Keyboard shortcuts"), _T(""), wxITEM_NORMAL);
+ itemMenu15->AppendSeparator();
+ itemMenu15->Append(ID_MENUITEM_THANKS, _("Thanks..."), _T(""), wxITEM_NORMAL);
+ itemMenu15->Append(ID_MENUITEM_CREDITS, _("Credits..."), _T(""), wxITEM_NORMAL);
+ itemMenu15->AppendSeparator();
+ itemMenu15->Append(ID_MENUITEM_VSCP_SITE, _("Go to VSCP site"), _T(""), wxITEM_NORMAL);
+ itemMenu15->AppendSeparator();
+ itemMenu15->Append(ID_MENUITEM39, _("About"), _T(""), wxITEM_NORMAL);
+ menuBar->Append(itemMenu15, _("Help"));
itemFrame1->SetMenuBar(menuBar);
- wxStatusBar* itemStatusBar24 = new wxStatusBar;
- itemStatusBar24->Create( itemFrame1, ID_STATUSBAR, wxST_SIZEGRIP|wxNO_BORDER );
- itemStatusBar24->SetFieldsCount(2);
- itemFrame1->SetStatusBar(itemStatusBar24);
+ wxStatusBar* itemStatusBar26 = new wxStatusBar;
+ itemStatusBar26->Create( itemFrame1, ID_STATUSBAR, wxST_SIZEGRIP|wxNO_BORDER );
+ itemStatusBar26->SetFieldsCount(2);
+ itemFrame1->SetStatusBar(itemStatusBar26);
- wxToolBar* itemToolBar25 = CreateToolBar( wxTB_FLAT|wxTB_HORIZONTAL|wxTB_NODIVIDER, ID_TOOLBAR );
- wxBitmap itemtool26Bitmap(itemFrame1->GetBitmapResource(wxT("open.xpm")));
- wxBitmap itemtool26BitmapDisabled;
- itemToolBar25->AddTool(ID_TOOL, _T(""), itemtool26Bitmap, itemtool26BitmapDisabled, wxITEM_NORMAL, _T(""), wxEmptyString);
- itemToolBar25->Realize();
- itemFrame1->SetToolBar(itemToolBar25);
+ wxToolBar* itemToolBar27 = CreateToolBar( wxTB_FLAT|wxTB_HORIZONTAL|wxTB_NODIVIDER, ID_TOOLBAR );
+ wxBitmap itemtool28Bitmap(itemFrame1->GetBitmapResource(wxT("open.xpm")));
+ wxBitmap itemtool28BitmapDisabled;
+ itemToolBar27->AddTool(ID_TOOL, _T(""), itemtool28Bitmap, itemtool28BitmapDisabled, wxITEM_NORMAL, _T(""), wxEmptyString);
+ itemToolBar27->Realize();
+ itemFrame1->SetToolBar(itemToolBar27);
- wxBoxSizer* itemBoxSizer27 = new wxBoxSizer(wxVERTICAL);
- itemFrame1->SetSizer(itemBoxSizer27);
+ wxBoxSizer* itemBoxSizer29 = new wxBoxSizer(wxVERTICAL);
+ itemFrame1->SetSizer(itemBoxSizer29);
////@end frmMain content construction
@@ -682,3 +687,19 @@
////@end wxEVT_COMMAND_MENU_SELECTED event handler for ID_MENUITEM8 in frmMain.
}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// wxEVT_COMMAND_MENU_SELECTED event handler for ID_MENUITEM_MDF_EDITOR
+//
+
+void frmMain::OnMenuitemMdfEditorClick( wxCommandEvent& event )
+{
+ MDFEditor dlg( this );
+
+ if ( wxID_OK == dlg.ShowModal() ) {
+ //dlg.getDialogData();
+ }
+ event.Skip();
+
+}
+
Modified: trunk/src/vscp/vscpworks/frmmain.h
===================================================================
--- trunk/src/vscp/vscpworks/frmmain.h 2008-04-18 08:08:45 UTC (rev 886)
+++ trunk/src/vscp/vscpworks/frmmain.h 2008-04-20 20:45:55 UTC (rev 887)
@@ -136,6 +136,9 @@
/// wxEVT_COMMAND_MENU_SELECTED event handler for ID_MENUITEM_CONFIGURATION
void OnMenuitemConfigurationClick( wxCommandEvent& event );
+ /// wxEVT_COMMAND_MENU_SELECTED event handler for ID_MENUITEM_MDF_EDITOR
+ void OnMenuitemMdfEditorClick( wxCommandEvent& event );
+
/// wxEVT_COMMAND_MENU_SELECTED event handler for ID_MENUITEM33
void OnMenuitemHelpClick( wxCommandEvent& event );
@@ -151,7 +154,7 @@
/// wxEVT_COMMAND_MENU_SELECTED event handler for ID_MENUITEM_CREDITS
void OnMenuitemCrediitsClick( wxCommandEvent& event );
- /// wxEVT_COMMAND_MENU_SELECTED event handler for ID_MENUITEM38
+ /// wxEVT_COMMAND_MENU_SELECTED event handler for ID_MENUITEM_VSCP_SITE
void OnMenuitemVSCPSiteClick( wxCommandEvent& event );
/// wxEVT_COMMAND_MENU_SELECTED event handler for ID_MENUITEM39
@@ -181,12 +184,13 @@
ID_MENUITEM_SCAN = 12001,
ID_MENU_VSCPWORKS_EXIT = 12005,
ID_MENUITEM_CONFIGURATION = 12011,
+ ID_MENUITEM_MDF_EDITOR = 12006,
ID_MENUITEM33 = 12018,
ID_MENUITEM34 = 12019,
ID_MENUITEM35 = 12020,
ID_MENUITEM_THANKS = 12021,
ID_MENUITEM_CREDITS = 12022,
- ID_MENUITEM38 = 12023,
+ ID_MENUITEM_VSCP_SITE = 12023,
ID_MENUITEM39 = 12024,
ID_STATUSBAR = 12025,
ID_TOOLBAR = 12026,
Modified: trunk/src/vscp/vscpworks/frmmain_symbols.h
===================================================================
--- trunk/src/vscp/vscpworks/frmmain_symbols.h 2008-04-18 08:08:45 UTC (rev 886)
+++ trunk/src/vscp/vscpworks/frmmain_symbols.h 2008-04-20 20:45:55 UTC (rev 887)
@@ -3,7 +3,7 @@
// Purpose: Symbols file
// Author: Ake Hedman
// Modified by:
-// Created: Tue 08 Jan 2008 17:16:46 CET
+// Created: Sun 20 Apr 2008 22:35:23 CEST
// RCS-ID:
// Copyright: (C) 2007 Ake Hedman, D Of Scandinavia, <ak...@do...>
// Licence:
@@ -47,13 +47,14 @@
#define ID_FRMMAIN_SYMBOL_4 _("Exit")
#define ID_FRMMAIN_SYMBOL_5 _("File")
#define ID_FRMMAIN_SYMBOL_6 _("Configuration...")
-#define ID_FRMMAIN_SYMBOL_7 _("Tools")
-#define ID_FRMMAIN_SYMBOL_8 _("VSCP-Works Help")
-#define ID_FRMMAIN_SYMBOL_9 _("Frequently Asked Questions")
-#define ID_FRMMAIN_SYMBOL_10 _("Keyboard shortcuts")
-#define ID_FRMMAIN_SYMBOL_11 _("Thanks...")
-#define ID_FRMMAIN_SYMBOL_12 _("Credits...")
-#define ID_FRMMAIN_SYMBOL_13 _("Go to VSCP site")
-#define ID_FRMMAIN_SYMBOL_14 _("About")
-#define ID_FRMMAIN_SYMBOL_15 _("Help")
-#define ID_FRMMAIN_SYMBOL_16 _("VSCP-Works")
+#define ID_FRMMAIN_SYMBOL_7 _("MDF Editor")
+#define ID_FRMMAIN_SYMBOL_8 _("Tools")
+#define ID_FRMMAIN_SYMBOL_9 _("VSCP-Works Help")
+#define ID_FRMMAIN_SYMBOL_10 _("Frequently Asked Questions")
+#define ID_FRMMAIN_SYMBOL_11 _("Keyboard shortcuts")
+#define ID_FRMMAIN_SYMBOL_12 _("Thanks...")
+#define ID_FRMMAIN_SYMBOL_13 _("Credits...")
+#define ID_FRMMAIN_SYMBOL_14 _("Go to VSCP site")
+#define ID_FRMMAIN_SYMBOL_15 _("About")
+#define ID_FRMMAIN_SYMBOL_16 _("Help")
+#define ID_FRMMAIN_SYMBOL_17 _("VSCP-Works")
Added: trunk/src/vscp/vscpworks/mdfeditor.cpp
===================================================================
--- trunk/src/vscp/vscpworks/mdfeditor.cpp (rev 0)
+++ trunk/src/vscp/vscpworks/mdfeditor.cpp 2008-04-20 20:45:55 UTC (rev 887)
@@ -0,0 +1,414 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name: mdfeditor.cpp
+// Purpose:
+// Author: Ake Hedman
+// Modified by:
+// Created: Sun 20 Apr 2008 22:00:39 CEST
+// RCS-ID:
+// Copyright: (C) 2007 Ake Hedman, D Of Scandinavia, <ak...@do...>
+// Licence:
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version
+// 2 of the License, or (at your option) any later version.
+//
+// This file is part of the VSCP (http://can.sourceforge.net)
+//
+// Copyright (C) 2000-2007 Ake Hedman, D Of Scandinavia, <ak...@do...>
+//
+// This file is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this file see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// Alternative licenses for VSCP & Friends may be arranged by contacting
+// D of Scandinavia at in...@do..., http://www.dofscandinavia.com
+/////////////////////////////////////////////////////////////////////////////
+
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
+#pragma implementation "mdfeditor.h"
+#endif
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+#include "wx/wx.h"
+#endif
+
+////@begin includes
+#include "wx/bookctrl.h"
+////@end includes
+
+#include "mdfeditor.h"
+
+////@begin XPM images
+////@end XPM images
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// MDFEditor type definition
+//
+
+IMPLEMENT_DYNAMIC_CLASS( MDFEditor, wxDialog )
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// MDFEditor event table definition
+//
+
+BEGIN_EVENT_TABLE( MDFEditor, wxDialog )
+
+////@begin MDFEditor event table entries
+////@end MDFEditor event table entries
+
+END_EVENT_TABLE()
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// MDFEditor constructors
+//
+
+MDFEditor::MDFEditor()
+{
+ Init();
+}
+
+MDFEditor::MDFEditor( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
+{
+ Init();
+ Create(parent, id, caption, pos, size, style);
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// MDFEditor creator
+//
+
+bool MDFEditor::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
+{
+////@begin MDFEditor creation
+ SetExtraStyle(wxWS_EX_VALIDATE_RECURSIVELY|wxWS_EX_BLOCK_EVENTS);
+ wxPropertySheetDialog::Create( parent, id, caption, pos, size, style );
+
+ SetSheetStyle(wxPROPSHEET_DEFAULT);
+ CreateButtons(wxOK|wxCANCEL|wxHELP);
+ CreateControls();
+ LayoutDialog();
+ Centre();
+////@end MDFEditor creation
+ return true;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// MDFEditor destructor
+//
+
+MDFEditor::~MDFEditor()
+{
+////@begin MDFEditor destruction
+////@end MDFEditor destruction
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Member initialisation
+//
+
+void MDFEditor::Init()
+{
+////@begin MDFEditor member initialisation
+////@end MDFEditor member initialisation
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Control creation for MDFEditor
+//
+
+void MDFEditor::CreateControls()
+{
+////@begin MDFEditor content construction
+ MDFEditor* itemPropertySheetDialog1 = this;
+
+ wxPanel* itemPanel2 = new wxPanel;
+ itemPanel2->Create( GetBookCtrl(), ID_PANEL_MDF_GENERAL, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL);
+ itemPanel2->SetSizer(itemBoxSizer3);
+
+ wxGrid* itemGrid4 = new wxGrid( itemPanel2, ID_GRID1, wxDefaultPosition, wxSize(600, 150), wxSUNKEN_BORDER|wxHSCROLL|wxVSCROLL );
+ itemGrid4->SetDefaultColSize(50);
+ itemGrid4->SetDefaultRowSize(25);
+ itemGrid4->SetColLabelSize(25);
+ itemGrid4->SetRowLabelSize(50);
+ itemGrid4->CreateGrid(5, 5, wxGrid::wxGridSelectCells);
+ itemBoxSizer3->Add(itemGrid4, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+
+ wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxHORIZONTAL);
+ itemBoxSizer3->Add(itemBoxSizer5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+ wxBitmapButton* itemBitmapButton6 = new wxBitmapButton;
+ itemBitmapButton6->Create( itemPanel2, ID_BITMAPBUTTON1, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer5->Add(itemBitmapButton6, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton7 = new wxBitmapButton;
+ itemBitmapButton7->Create( itemPanel2, ID_BITMAPBUTTON, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer5->Add(itemBitmapButton7, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton8 = new wxBitmapButton;
+ itemBitmapButton8->Create( itemPanel2, ID_BITMAPBUTTON2, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer5->Add(itemBitmapButton8, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton9 = new wxBitmapButton;
+ itemBitmapButton9->Create( itemPanel2, ID_BITMAPBUTTON3, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer5->Add(itemBitmapButton9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ GetBookCtrl()->AddPage(itemPanel2, _("General"));
+
+ wxPanel* itemPanel10 = new wxPanel;
+ itemPanel10->Create( GetBookCtrl(), ID_PANEL_MDF_ABSTRACTIONS, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxVERTICAL);
+ itemPanel10->SetSizer(itemBoxSizer11);
+
+ wxTreeCtrl* itemTreeCtrl12 = new wxTreeCtrl;
+ itemTreeCtrl12->Create( itemPanel10, ID_GRID6, wxDefaultPosition, wxSize(600, 150), wxTR_SINGLE|wxSUNKEN_BORDER );
+ itemBoxSizer11->Add(itemTreeCtrl12, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+
+ wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxHORIZONTAL);
+ itemBoxSizer11->Add(itemBoxSizer13, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+ wxBitmapButton* itemBitmapButton14 = new wxBitmapButton;
+ itemBitmapButton14->Create( itemPanel10, ID_BITMAPBUTTON24, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer13->Add(itemBitmapButton14, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton15 = new wxBitmapButton;
+ itemBitmapButton15->Create( itemPanel10, ID_BITMAPBUTTON25, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer13->Add(itemBitmapButton15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton16 = new wxBitmapButton;
+ itemBitmapButton16->Create( itemPanel10, ID_BITMAPBUTTON26, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer13->Add(itemBitmapButton16, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton17 = new wxBitmapButton;
+ itemBitmapButton17->Create( itemPanel10, ID_BITMAPBUTTON27, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer13->Add(itemBitmapButton17, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ GetBookCtrl()->AddPage(itemPanel10, _("Abstractions"));
+
+ wxPanel* itemPanel18 = new wxPanel;
+ itemPanel18->Create( GetBookCtrl(), ID_PANEL_MDF_REGISTERS, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* itemBoxSizer19 = new wxBoxSizer(wxVERTICAL);
+ itemPanel18->SetSizer(itemBoxSizer19);
+
+ wxTreeCtrl* itemTreeCtrl20 = new wxTreeCtrl;
+ itemTreeCtrl20->Create( itemPanel18, ID_TREECTRL, wxDefaultPosition, wxSize(600, 150), wxTR_SINGLE|wxSUNKEN_BORDER );
+ itemBoxSizer19->Add(itemTreeCtrl20, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+
+ wxBoxSizer* itemBoxSizer21 = new wxBoxSizer(wxHORIZONTAL);
+ itemBoxSizer19->Add(itemBoxSizer21, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+ wxBitmapButton* itemBitmapButton22 = new wxBitmapButton;
+ itemBitmapButton22->Create( itemPanel18, ID_BITMAPBUTTON20, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer21->Add(itemBitmapButton22, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton23 = new wxBitmapButton;
+ itemBitmapButton23->Create( itemPanel18, ID_BITMAPBUTTON21, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer21->Add(itemBitmapButton23, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton24 = new wxBitmapButton;
+ itemBitmapButton24->Create( itemPanel18, ID_BITMAPBUTTON22, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer21->Add(itemBitmapButton24, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton25 = new wxBitmapButton;
+ itemBitmapButton25->Create( itemPanel18, ID_BITMAPBUTTON23, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer21->Add(itemBitmapButton25, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ GetBookCtrl()->AddPage(itemPanel18, _("Registers"));
+
+ wxPanel* itemPanel26 = new wxPanel;
+ itemPanel26->Create( GetBookCtrl(), ID_PANEL_MDF_DM, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* itemBoxSizer27 = new wxBoxSizer(wxVERTICAL);
+ itemPanel26->SetSizer(itemBoxSizer27);
+
+ wxGrid* itemGrid28 = new wxGrid( itemPanel26, ID_GRID, wxDefaultPosition, wxSize(600, 150), wxSUNKEN_BORDER|wxHSCROLL|wxVSCROLL );
+ itemGrid28->SetDefaultColSize(50);
+ itemGrid28->SetDefaultRowSize(25);
+ itemGrid28->SetColLabelSize(25);
+ itemGrid28->SetRowLabelSize(50);
+ itemGrid28->CreateGrid(5, 5, wxGrid::wxGridSelectCells);
+ itemBoxSizer27->Add(itemGrid28, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+
+ wxBoxSizer* itemBoxSizer29 = new wxBoxSizer(wxHORIZONTAL);
+ itemBoxSizer27->Add(itemBoxSizer29, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+ wxBitmapButton* itemBitmapButton30 = new wxBitmapButton;
+ itemBitmapButton30->Create( itemPanel26, ID_BITMAPBUTTON4, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer29->Add(itemBitmapButton30, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton31 = new wxBitmapButton;
+ itemBitmapButton31->Create( itemPanel26, ID_BITMAPBUTTON5, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer29->Add(itemBitmapButton31, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton32 = new wxBitmapButton;
+ itemBitmapButton32->Create( itemPanel26, ID_BITMAPBUTTON6, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer29->Add(itemBitmapButton32, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton33 = new wxBitmapButton;
+ itemBitmapButton33->Create( itemPanel26, ID_BITMAPBUTTON7, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer29->Add(itemBitmapButton33, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ GetBookCtrl()->AddPage(itemPanel26, _("Decision Matrix"));
+
+ wxPanel* itemPanel34 = new wxPanel;
+ itemPanel34->Create( GetBookCtrl(), ID_PANEL_MDF_EVENTS, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* itemBoxSizer35 = new wxBoxSizer(wxVERTICAL);
+ itemPanel34->SetSizer(itemBoxSizer35);
+
+ wxGrid* itemGrid36 = new wxGrid( itemPanel34, ID_GRID2, wxDefaultPosition, wxSize(600, 150), wxSUNKEN_BORDER|wxHSCROLL|wxVSCROLL );
+ itemGrid36->SetDefaultColSize(50);
+ itemGrid36->SetDefaultRowSize(25);
+ itemGrid36->SetColLabelSize(25);
+ itemGrid36->SetRowLabelSize(50);
+ itemGrid36->CreateGrid(5, 5, wxGrid::wxGridSelectCells);
+ itemBoxSizer35->Add(itemGrid36, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+
+ wxBoxSizer* itemBoxSizer37 = new wxBoxSizer(wxHORIZONTAL);
+ itemBoxSizer35->Add(itemBoxSizer37, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+ wxBitmapButton* itemBitmapButton38 = new wxBitmapButton;
+ itemBitmapButton38->Create( itemPanel34, ID_BITMAPBUTTON8, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer37->Add(itemBitmapButton38, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton39 = new wxBitmapButton;
+ itemBitmapButton39->Create( itemPanel34, ID_BITMAPBUTTON9, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer37->Add(itemBitmapButton39, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton40 = new wxBitmapButton;
+ itemBitmapButton40->Create( itemPanel34, ID_BITMAPBUTTON10, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer37->Add(itemBitmapButton40, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton41 = new wxBitmapButton;
+ itemBitmapButton41->Create( itemPanel34, ID_BITMAPBUTTON11, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer37->Add(itemBitmapButton41, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ GetBookCtrl()->AddPage(itemPanel34, _("Events"));
+
+ wxPanel* itemPanel42 = new wxPanel;
+ itemPanel42->Create( GetBookCtrl(), ID_PANEL_MDF_ALARM, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* itemBoxSizer43 = new wxBoxSizer(wxVERTICAL);
+ itemPanel42->SetSizer(itemBoxSizer43);
+
+ wxGrid* itemGrid44 = new wxGrid( itemPanel42, ID_GRID3, wxDefaultPosition, wxSize(600, 150), wxSUNKEN_BORDER|wxHSCROLL|wxVSCROLL );
+ itemGrid44->SetDefaultColSize(50);
+ itemGrid44->SetDefaultRowSize(25);
+ itemGrid44->SetColLabelSize(25);
+ itemGrid44->SetRowLabelSize(50);
+ itemGrid44->CreateGrid(5, 5, wxGrid::wxGridSelectCells);
+ itemBoxSizer43->Add(itemGrid44, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+
+ wxBoxSizer* itemBoxSizer45 = new wxBoxSizer(wxHORIZONTAL);
+ itemBoxSizer43->Add(itemBoxSizer45, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+ wxBitmapButton* itemBitmapButton46 = new wxBitmapButton;
+ itemBitmapButton46->Create( itemPanel42, ID_BITMAPBUTTON12, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer45->Add(itemBitmapButton46, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton47 = new wxBitmapButton;
+ itemBitmapButton47->Create( itemPanel42, ID_BITMAPBUTTON13, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer45->Add(itemBitmapButton47, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton48 = new wxBitmapButton;
+ itemBitmapButton48->Create( itemPanel42, ID_BITMAPBUTTON14, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer45->Add(itemBitmapButton48, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton49 = new wxBitmapButton;
+ itemBitmapButton49->Create( itemPanel42, ID_BITMAPBUTTON15, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer45->Add(itemBitmapButton49, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ GetBookCtrl()->AddPage(itemPanel42, _("Alarm bits"));
+
+ wxPanel* itemPanel50 = new wxPanel;
+ itemPanel50->Create( GetBookCtrl(), ID_PANEL_MDF_BOOT, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
+ wxBoxSizer* itemBoxSizer51 = new wxBoxSizer(wxVERTICAL);
+ itemPanel50->SetSizer(itemBoxSizer51);
+
+ wxGrid* itemGrid52 = new wxGrid( itemPanel50, ID_GRID4, wxDefaultPosition, wxSize(600, 150), wxSUNKEN_BORDER|wxHSCROLL|wxVSCROLL );
+ itemGrid52->SetDefaultColSize(50);
+ itemGrid52->SetDefaultRowSize(25);
+ itemGrid52->SetColLabelSize(25);
+ itemGrid52->SetRowLabelSize(50);
+ itemGrid52->CreateGrid(5, 5, wxGrid::wxGridSelectCells);
+ itemBoxSizer51->Add(itemGrid52, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+
+ wxBoxSizer* itemBoxSizer53 = new wxBoxSizer(wxHORIZONTAL);
+ itemBoxSizer51->Add(itemBoxSizer53, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
+ wxBitmapButton* itemBitmapButton54 = new wxBitmapButton;
+ itemBitmapButton54->Create( itemPanel50, ID_BITMAPBUTTON16, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer53->Add(itemBitmapButton54, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton55 = new wxBitmapButton;
+ itemBitmapButton55->Create( itemPanel50, ID_BITMAPBUTTON17, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer53->Add(itemBitmapButton55, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton56 = new wxBitmapButton;
+ itemBitmapButton56->Create( itemPanel50, ID_BITMAPBUTTON18, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer53->Add(itemBitmapButton56, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ wxBitmapButton* itemBitmapButton57 = new wxBitmapButton;
+ itemBitmapButton57->Create( itemPanel50, ID_BITMAPBUTTON19, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
+ itemBoxSizer53->Add(itemBitmapButton57, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
+
+ GetBookCtrl()->AddPage(itemPanel50, _("Boot Loader"));
+
+////@end MDFEditor content construction
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Should we show tooltips?
+//
+
+bool MDFEditor::ShowToolTips()
+{
+ return true;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Get bitmap resources
+//
+
+wxBitmap MDFEditor::GetBitmapResource( const wxString& name )
+{
+ // Bitmap retrieval
+////@begin MDFEditor bitmap retrieval
+ wxUnusedVar(name);
+ return wxNullBitmap;
+////@end MDFEditor bitmap retrieval
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Get icon resources
+//
+
+wxIcon MDFEditor::GetIconResource( const wxString& name )
+{
+ // Icon retrieval
+////@begin MDFEditor icon retrieval
+ wxUnusedVar(name);
+ return wxNullIcon;
+////@end MDFEditor icon retrieval
+}
Added: trunk/src/vscp/vscpworks/mdfeditor.h
===================================================================
--- trunk/src/vscp/vscpworks/mdfeditor.h (rev 0)
+++ trunk/src/vscp/vscpworks/mdfeditor.h 2008-04-20 20:45:55 UTC (rev 887)
@@ -0,0 +1,175 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name: mdfeditor.h
+// Purpose:
+// Author: Ake Hedman
+// Modified by:
+// Created: Sun 20 Apr 2008 22:00:39 CEST
+// RCS-ID:
+// Copyright: (C) 2007 Ake Hedman, D Of Scandinavia, <ak...@do...>
+// Licence:
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version
+// 2 of the License, or (at your option) any later version.
+//
+// This file is part of the VSCP (http://can.sourceforge.net)
+//
+// Copyright (C) 2000-2007 Ake Hedman, D Of Scandinavia, <ak...@do...>
+//
+// This file is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this file see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// Alternative licenses for VSCP & Friends may be arranged by contacting
+// D of Scandinavia at in...@do..., http://www.dofscandinavia.com
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _MDFEDITOR_H_
+#define _MDFEDITOR_H_
+
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
+#pragma interface "mdfeditor.h"
+#endif
+
+/*!
+ * Includes
+ */
+
+////@begin includes
+#include "mdfeditor_symbols.h"
+#include "wx/propdlg.h"
+#include "wx/grid.h"
+#include "wx/treectrl.h"
+////@end includes
+
+/*!
+ * Forward declarations
+ */
+
+////@begin forward declarations
+////@end forward declarations
+
+/*!
+ * Control identifiers
+ */
+
+////@begin control identifiers
+#define SYMBOL_MDFEDITOR_STYLE wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX|wxDIALOG_MODAL
+#define SYMBOL_MDFEDITOR_TITLE _("MDF Editor")
+#define SYMBOL_MDFEDITOR_IDNAME ID_MDFEDITOR
+#define SYMBOL_MDFEDITOR_SIZE wxSize(400, 300)
+#define SYMBOL_MDFEDITOR_POSITION wxDefaultPosition
+////@end control identifiers
+
+
+
+/*!
+ * MDFEditor class declaration
+ */
+
+class MDFEditor: public wxPropertySheetDialog
+{
+ DECLARE_DYNAMIC_CLASS( MDFEditor )
+ DECLARE_EVENT_TABLE()
+
+public:
+ /// Constructors
+ MDFEditor();
+ MDFEditor( wxWindow* parent, wxWindowID id = SYMBOL_MDFEDITOR_IDNAME, const wxString& caption = SYMBOL_MDFEDITOR_TITLE, const wxPoint& pos = SYMBOL_MDFEDITOR_POSITION, const wxSize& size = SYMBOL_MDFEDITOR_SIZE, long style = SYMBOL_MDFEDITOR_STYLE );
+
+ /// Creation
+ bool Create( wxWindow* parent, wxWindowID id = SYMBOL_MDFEDITOR_IDNAME, const wxString& caption = SYMBOL_MDFEDITOR_TITLE, const wxPoint& pos = SYMBOL_MDFEDITOR_POSITION, const wxSize& size = SYMBOL_MDFEDITOR_SIZE, long style = SYMBOL_MDFEDITOR_STYLE );
+
+ /// Destructor
+ ~MDFEditor();
+
+ /// Initialises member variables
+ void Init();
+
+ /// Creates the controls and sizers
+ void CreateControls();
+
+////@begin MDFEditor event handler declarations
+
+////@end MDFEditor event handler declarations
+
+////@begin MDFEditor member function declarations
+
+ /// Retrieves bitmap resources
+ wxBitmap GetBitmapResource( const wxString& name );
+
+ /// Retrieves icon resources
+ wxIcon GetIconResource( const wxString& name );
+////@end MDFEditor member function declarations
+
+ /// Should we show tooltips?
+ static bool ShowToolTips();
+
+////@begin MDFEditor member variables
+ /// Control identifiers
+ enum {
+ ID_MDFEDITOR = 10005,
+ ID_PANEL_MDF_GENERAL = 10006,
+ ID_GRID1 = 10008,
+ ID_BITMAPBUTTON1 = 10009,
+ ID_BITMAPBUTTON = 10010,
+ ID_BITMAPBUTTON2 = 10011,
+ ID_BITMAPBUTTON3 = 10012,
+ ID_PANEL_MDF_ABSTRACTIONS = 10000,
+ ID_GRID6 = 10038,
+ ID_BITMAPBUTTON24 = 10039,
+ ID_BITMAPBUTTON25 = 10040,
+ ID_BITMAPBUTTON26 = 10041,
+ ID_BITMAPBUTTON27 = 10042,
+ ID_PANEL_MDF_REGISTERS = 10001,
+ ID_TREECTRL = 10033,
+ ID_BITMAPBUTTON20 = 10034,
+ ID_BITMAPBUTTON21 = 10035,
+ ID_BITMAPBUTTON22 = 10036,
+ ID_BITMAPBUTTON23 = 10037,
+ ID_PANEL_MDF_DM = 10002,
+ ID_GRID = 10013,
+ ID_BITMAPBUTTON4 = 10014,
+ ID_BITMAPBUTTON5 = 10015,
+ ID_BITMAPBUTTON6 = 10016,
+ ID_BITMAPBUTTON7 = 10017,
+ ID_PANEL_MDF_EVENTS = 10003,
+ ID_GRID2 = 10018,
+ ID_BITMAPBUTTON8 = 10019,
+ ID_BITMAPBUTTON9 = 10020,
+ ID_BITMAPBUTTON10 = 10021,
+ ID_BITMAPBUTTON11 = 10022,
+ ID_PANEL_MDF_ALARM = 10004,
+ ID_GRID3 = 10023,
+ ID_BITMAPBUTTON12 = 10024,
+ ID_BITMAPBUTTON13 = 10025,
+ ID_BITMAPBUTTON14 = 10026,
+ ID_BITMAPBUTTON15 = 10027,
+ ID_PANEL_MDF_BOOT = 10007,
+ ID_GRID4 = 10028,
+ ID_BITMAPBUTTON16 = 10029,
+ ID_BITMAPBUTTON17 = 10030,
+ ID_BITMAPBUTTON18 = 10031,
+ ID_BITMAPBUTTON19 = 10032
+ };
+////@end MDFEditor member variables
+};
+
+#endif
+ // _MDFEDITOR_H_
Added: trunk/src/vscp/vscpworks/mdfeditor_symbols.h
===================================================================
--- trunk/src/vscp/vscpworks/mdfeditor_symbols.h (rev 0)
+++ trunk/src/vscp/vscpworks/mdfeditor_symbols.h 2008-04-20 20:45:55 UTC (rev 887)
@@ -0,0 +1,50 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name: mdfeditor_symbols.h
+// Purpose: Symbols file
+// Author: Ake Hedman
+// Modified by:
+// Created: Sun 20 Apr 2008 22:32:07 CEST
+// RCS-ID:
+// Copyright: (C) 2007 Ake Hedman, D Of Scandinavia, <ak...@do...>
+// Licence:
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version
+// 2 of the License, or (at your option) any later version.
+//
+// This file is part of the VSCP (http://can.sourceforge.net)
+//
+// Copyright (C) 2000-2007 Ake Hedman, D Of Scandinavia, <ak...@do...>
+//
+// This file is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this file see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// Alternative licenses for VSCP & Friends may be arranged by contacting
+// D of Scandinavia at in...@do..., http://www.dofscandinavia.com
+/////////////////////////////////////////////////////////////////////////////
+
+#define ID_MDFEDITOR_SYMBOL_0 _("General")
+#define ID_MDFEDITOR_SYMBOL_1 _("Abstractions")
+#define ID_MDFEDITOR_SYMBOL_2 _("Registers")
+#define ID_MDFEDITOR_SYMBOL_3 _("Decision Matrix")
+#define ID_MDFEDITOR_SYMBOL_4 _("Events")
+#define ID_MDFEDITOR_SYMBOL_5 _("Alarm bits")
+#define ID_MDFEDITOR_SYMBOL_6 _("Boot Loader")
+#define ID_MDFEDITOR_SYMBOL_7 _("MDF Editor")
Modified: trunk/src/vscp/vscpworks/readmsfurl.cpp
===================================================================
--- trunk/src/vscp/vscpworks/readmsfurl.cpp 2008-04-18 08:08:45 UTC (rev 886)
+++ trunk/src/vscp/vscpworks/readmsfurl.cpp 2008-04-20 20:45:55 UTC (rev 887)
@@ -1,195 +1,194 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name: readmsfurl.cpp
-// Purpose:
-// Author: Ake Hedman
-// Modified by:
-// Created: 21/12/2007 17:16:49
-// RCS-ID:
-// Copyright: (C) 2007 Ake Hedman, D Of Scandinavia, <ak...@do...>
-// Licence:
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version
-// 2 of the License, or (at your option) any later version.
-//
-// This file is part of the VSCP (http://can.sourceforge.net)
-//
-// Copyright (C) 2000-2008 Ake Hedman, D Of Scandinavia, <ak...@do...>
-//
-// This file is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this file see the file COPYING. If not, write to
-// the Free Software Foundation, 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
-//
-// As a special exception, if other files instantiate templates or use macros
-// or inline functions from this file, or you compile this file and link it
-// with other works to produce a work based on this file, this file does not
-// by itself cause the resulting work to be covered by the GNU General Public
-// License. However the source code for this file must still be made available
-// in accordance with section (3) of the GNU General Public License.
-//
-// This exception does not invalidate any other reasons why a work based on
-// this file might be covered by the GNU General Public License.
-//
-// Alternative licenses for VSCP & Friends may be arranged by contacting
-// D of Scandinavia at in...@do..., http://www.dofscandinavia.com
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "readmsfurl.h"
-#endif
-
-// For compilers that support precompilation, includes "wx/wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
-#ifndef WX_PRECOMP
-#include "wx/wx.h"
-#endif
-
-////@begin includes
-////@end includes
-
-#include "readmsfurl.h"
-
-////@begin XPM images
-
-////@end XPM images
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// ReadMSFURL type definition
-//
-
-IMPLEMENT_DYNAMIC_CLASS( ReadMSFURL, wxDialog )
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// ReadMSFURL event table definition
-//
-
-BEGIN_EVENT_TABLE( ReadMSFURL, wxDialog )
-
-////@begin ReadMSFURL event table entries
-////@end ReadMSFURL event table entries
-
-END_EVENT_TABLE()
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// ReadMSFURL constructors
-//
-
-ReadMSFURL::ReadMSFURL()
-{
- Init();
-}
-
-ReadMSFURL::ReadMSFURL( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
-{
- Init();
- Create(parent, id, caption, pos, size, style);
-}
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// ReadMSFURL creator
-//
-
-bool ReadMSFURL::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
-{
-////@begin ReadMSFURL creation
- SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
- wxDialog::Create( parent, id, caption, pos, size, style );
-
- CreateControls();
- if (GetSizer())
- {
- GetSizer()->SetSizeHints(this);
- }
- Centre();
-////@end ReadMSFURL creation
- return true;
-}
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// ReadMSFURL destructor
-//
-
-ReadMSFURL::~ReadMSFURL()
-{
-////@begin ReadMSFURL destruction
-////@end ReadMSFURL destruction
-}
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Member initialisation
-//
-
-void ReadMSFURL::Init()
-{
-////@begin ReadMSFURL member initialisation
-////@end ReadMSFURL member initialisation
-}
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Control creation for ReadMSFURL
-//
-
-void ReadMSFURL::CreateControls()
-{
-////@begin ReadMSFURL content construction
- ReadMSFURL* itemDialog1 = this;
-
- wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
- itemDialog1->SetSizer(itemBoxSizer2);
-
-////@end ReadMSFURL content construction
-}
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Should we show tooltips?
-//
-
-bool ReadMSFURL::ShowToolTips()
-{
- return true;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Get bitmap resources
-//
-
-wxBitmap ReadMSFURL::GetBitmapResource( const wxString& name )
-{
- // Bitmap retrieval
-////@begin ReadMSFURL bitmap retrieval
- wxUnusedVar(name);
- return wxNullBitmap;
-////@end ReadMSFURL bitmap retrieval
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// Get icon resources
-//
-
-wxIcon ReadMSFURL::GetIconResource( const wxString& name )
-{
- // Icon retrieval
-////@begin ReadMSFURL icon retrieval
- wxUnusedVar(name);
- return wxNullIcon;
-////@end ReadMSFURL icon retrieval
-}
+/////////////////////////////////////////////////////////////////////////////
+// Name: readmsfurl.cpp
+// Purpose:
+// Author: Ake Hedman
+// Modified by:
+// Created: 21/12/2007 17:16:49
+// RCS-ID:
+// Copyright: (C) 2007 Ake Hedman, D Of Scandinavia, <ak...@do...>
+// Licence:
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version
+// 2 of the License, or (at your option) any later version.
+//
+// This file is part of the VSCP (http://can.sourceforge.net)
+//
+// Copyright (C) 2000-2008 Ake Hedman, D Of Scandinavia, <ak...@do...>
+//
+// This file is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this file see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// Alternative licenses for VSCP & Friends may be arranged by contacting
+// D of Scandinavia at in...@do..., http://www.dofscandinavia.com
+/////////////////////////////////////////////////////////////////////////////
+
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
+#pragma implementation "readmsfurl.h"
+#endif
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+#include "wx/wx.h"
+#endif
+
+////@begin includes
+////@end includes
+
+#include "readmsfurl.h"
+
+////@begin XPM images
+////@end XPM images
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ReadMSFURL type definition
+//
+
+IMPLEMENT_DYNAMIC_CLASS( ReadMSFURL, wxDialog )
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ReadMSFURL event table definition
+//
+
+BEGIN_EVENT_TABLE( ReadMSFURL, wxDialog )
+
+////@begin ReadMSFURL event table entries
+////@end ReadMSFURL event table entries
+
+END_EVENT_TABLE()
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ReadMSFURL constructors
+//
+
+ReadMSFURL::ReadMSFURL()
+{
+ Init();
+}
+
+ReadMSFURL::ReadMSFURL( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
+{
+ Init();
+ Create(parent, id, caption, pos, size, style);
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ReadMSFURL creator
+//
+
+bool ReadMSFURL::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
+{
+////@begin ReadMSFURL creation
+ SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
+ wxDialog::Create( parent, id, caption, pos, size, style );
+
+ CreateControls();
+ if (GetSizer())
+ {
+ GetSizer()->SetSizeHints(this);
+ }
+ Centre();
+////@end ReadMSFURL creation
+ return true;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ReadMSFURL destructor
+//
+
+ReadMSFURL::~ReadMSFURL()
+{
+////@begin ReadMSFURL destruction
+////@end ReadMSFURL destruction
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Member initialisation
+//
+
+void ReadMSFURL::Init()
+{
+////@begin ReadMSFURL member initialisation
+////@end ReadMSFURL member initialisation
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Control creation for ReadMSFURL
+//
+
+void ReadMSFURL::CreateControls()
+{
+////@begin ReadMSFURL content construction
+ ReadMSFURL* itemDialog1 = this;
+
+ wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
+ itemDialog1->SetSizer(itemBoxSizer2);
+
+////@end ReadMSFURL content construction
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Should we show tooltips?
+//
+
+bool ReadMSFURL::ShowToolTips()
+{
+ return true;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Get bitmap resources
+//
+
+wxBitmap ReadMSFURL::GetBitmapResource( const wxString& name )
+{
+ // Bitmap retrieval
+////@begin ReadMSFURL bitmap retrieval
+ wxUnusedVar(name);
+ return wxNullBitmap;
+////@end ReadMSFURL bitmap retrieval
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Get icon resources
+//
+
+wxIcon ReadMSFURL::GetIconResource( const wxString& name )
+{
+ // Icon retrieval
+////@begin ReadMSFURL icon retrieval
+ wxUnusedVar(name);
+ return wxNullIcon;
+////@end ReadMSFURL icon retrieval
+}
Modified: trunk/src/vscp/vscpworks/readmsfurl.h
===================================================================
--- trunk/src/vscp/vscpworks/readmsfurl.h 2008-04-18 08:08:45 UTC (rev 886)
+++ trunk/src/vscp/vscpworks/readmsfurl.h 2008-04-20 20:45:55 UTC (rev 887)
@@ -1,127 +1,129 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name: readmsfurl.h
-// Purpose:
-// Author: Ake Hedman
-// Modified by:
-// Created: 21/12/2007 17:16:49
-// RCS-ID:
-// Copyright: (C) 2007 Ake Hedman, D Of Scandinavia, <ak...@do...>
-// Licence:
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free So...
[truncated message content] |