[commit] r2659 - in trunk: Doc Doc/GME Manual and User Guide Doc/GME Manual and User Guide/images GME/Gme GME/Gme/res Install
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Thu Jan 26 10:02:54 CST 2017
Author: volgy
Date: Thu Jan 26 10:02:54 2017
New Revision: 2659
Log:
Happy New Year! GME Forever.
Modified:
trunk/Doc/GME Manual and User Guide/GME Manual and User Guide.chm
trunk/Doc/GME Manual and User Guide/GME Manual and User Guide.pdf
trunk/Doc/GME Manual and User Guide/GME Manual and User Guide.xml
trunk/Doc/GME Manual and User Guide/images/Splsh16.png
trunk/Doc/README_in.txt
trunk/GME/Gme/GME.rc
trunk/GME/Gme/Splsh16.bmp
trunk/GME/Gme/aboutpic.bmp
trunk/GME/Gme/res/AboutBox.rc
trunk/GME/Gme/res/about.psd
trunk/GME/Gme/res/splash.psd
trunk/Install/dialog.psd
Modified: trunk/Doc/GME Manual and User Guide/GME Manual and User Guide.chm
==============================================================================
Binary file (source and/or target). No diff available.
Modified: trunk/Doc/GME Manual and User Guide/GME Manual and User Guide.pdf
==============================================================================
Binary file (source and/or target). No diff available.
Modified: trunk/Doc/GME Manual and User Guide/GME Manual and User Guide.xml
==============================================================================
--- trunk/Doc/GME Manual and User Guide/GME Manual and User Guide.xml Thu Dec 8 13:31:43 2016 (r2658)
+++ trunk/Doc/GME Manual and User Guide/GME Manual and User Guide.xml Thu Jan 26 10:02:54 2017 (r2659)
@@ -18,7 +18,7 @@
</affiliation>
<copyright>
- <year>2000-2016</year>
+ <year>2000-2017</year>
<holder>Vanderbilt University</holder>
</copyright>
@@ -30,7 +30,7 @@
<releaseinfo><ulink
url="http://www.isis.vanderbilt.edu">http://www.isis.vanderbilt.edu</ulink></releaseinfo>
</articleinfo>
-
+
<section>
<title>Introduction</title>
@@ -2397,7 +2397,7 @@
on the user's machine and it's up to the user to send it to the developers.
It can be found "%OSDir%\Documents and Settings\%UserName%\Application Data\GME\"
folder on Windows XP or
- "%OSDir%\Users\%UserName%\AppData\Roaming\GME\" folder on Windows Vista or Windows 7.
+ "%OSDir%\Users\%UserName%\AppData\Roaming\GME\" folder on Windows Vista or Windows 7.
Please open the folder and attach the file to the e-mail to the mentioned
e-mail address (see next paragraph or the crashdump dialog).</para>
@@ -2795,13 +2795,13 @@
invoking an interpreter on the currently opened model (if any).</para>
<para><blockquote>
- <programlisting format="linespecific"># hiding the ActiveBrowser window
-gme.panels[0].Visible = 0
-
-# check the constraints
-gme.CheckAllConstraints()
-
-# invoking an interpreter
+ <programlisting format="linespecific"># hiding the ActiveBrowser window
+gme.panels[0].Visible = 0
+
+# check the constraints
+gme.CheckAllConstraints()
+
+# invoking an interpreter
gme.RunComponent('Mga.Interpreter.ComponentC') </programlisting>
</blockquote></para>
@@ -2813,13 +2813,13 @@
MGA project transactions must be used.</para>
<para><blockquote>
- <programlisting format="linespecific">gme.OpenProject('MGA=f:\\sf-sample.mga')
-terr = project.CreateTerritory( None, None, None)
-project.BeginTransaction( terr )
-mf = project.RootFolder.ChildObject(‘MainFolder’)
-mf.Name = ‘main_folder’
-mf.ChildFCO(‘MainCompound’).Name = ‘main_compound’
-project.CommitTransaction()
+ <programlisting format="linespecific">gme.OpenProject('MGA=f:\\sf-sample.mga')
+terr = project.CreateTerritory( None, None, None)
+project.BeginTransaction( terr )
+mf = project.RootFolder.ChildObject(‘MainFolder’)
+mf.Name = ‘main_folder’
+mf.ChildFCO(‘MainCompound’).Name = ‘main_compound’
+project.CommitTransaction()
gme.CloseProject( 1 ) </programlisting>
</blockquote></para>
@@ -2853,13 +2853,13 @@
or <code>IMgaFCO</code> pointers as incoming parameters, the latter
method names being suffixed with “FCO”. The code sample below shows
duplicating (clone) of objects: <blockquote>
- <programlisting format="linespecific"># clones object (if any) named “InSignal”, renames the clone to “ClonedInSignal” and returns it
-clonedInSignalPtr = it.Duplicate( “InSignal”, “ClonedInSignal”)
-
-# cloning clonedInSignal object 4 times, with different names
-for i in range(5): it.DuplicateFCO( clonedInSignalPtr, “twiceClonedInSignal” + str(i))
-
-# cloning “twiceClonedInSignal2” object, using the it.Child() method
+ <programlisting format="linespecific"># clones object (if any) named “InSignal”, renames the clone to “ClonedInSignal” and returns it
+clonedInSignalPtr = it.Duplicate( “InSignal”, “ClonedInSignal”)
+
+# cloning clonedInSignal object 4 times, with different names
+for i in range(5): it.DuplicateFCO( clonedInSignalPtr, “twiceClonedInSignal” + str(i))
+
+# cloning “twiceClonedInSignal2” object, using the it.Child() method
it.DuplicateFCO( it.Child( “twiceClonedInSignal2”), “thriceClonedInSignal”) </programlisting>
</blockquote></para>
@@ -6477,24 +6477,24 @@
high-level C++ component interface. The entry point of the component
is defined in the Component.h in the appropriate subdirectory of the
components directory. Here is the file at the start of the component
- writing process: <programlisting format="linespecific">#ifndef GME_INTERPRETER_H
-#define GME_INTERPRETER_H
-
-#include "Builder.h"
-
-#define NEW_BON_INVOKE
-//#define DEPRECATED_BON_INVOKE_IMPLEMENTED
-
-class CComponent {
-public:
- CComponent() : focusfolder(NULL) { ; }
- CBuilderFolder *focusfolder;
- CBuilderFolderList selectedfolders;
- void InvokeEx(CBuilder &builder,CBuilderObject *focus,
- CBuilderObjectList &selected, long param);
-// void Invoke(CBuilder &builder, CBuilderObjectList &selected, long param);
-};
-
+ writing process: <programlisting format="linespecific">#ifndef GME_INTERPRETER_H
+#define GME_INTERPRETER_H
+
+#include "Builder.h"
+
+#define NEW_BON_INVOKE
+//#define DEPRECATED_BON_INVOKE_IMPLEMENTED
+
+class CComponent {
+public:
+ CComponent() : focusfolder(NULL) { ; }
+ CBuilderFolder *focusfolder;
+ CBuilderFolderList selectedfolders;
+ void InvokeEx(CBuilder &builder,CBuilderObject *focus,
+ CBuilderObjectList &selected, long param);
+// void Invoke(CBuilder &builder, CBuilderObjectList &selected, long param);
+};
+
#endif // whole file </programlisting></para>
<para>Before GME version 1.2 this used to be simpler, but not as
@@ -6578,13 +6578,13 @@
<para>Plug-Ins are paradigm-independent components. The example Noname
plug-in displays a message. The implementation is in the
<filename>component.cpp</filename> file shown below: <programlisting
- format="linespecific">#include "stdafx.h"
-#include "Component.h"
-
-void CComponent:: InvokeEx(CBuilder &builder,CBuilderObject *focus,
- CBuilderObjectList &selected, long param)
-{
- AfxMessageBox("Plug-In Sample");
+ format="linespecific">#include "stdafx.h"
+#include "Component.h"
+
+void CComponent:: InvokeEx(CBuilder &builder,CBuilderObject *focus,
+ CBuilderObjectList &selected, long param)
+{
+ AfxMessageBox("Plug-In Sample");
} </programlisting></para>
<para>The <filename moreinfo="none">component.h</filename> and
@@ -6615,23 +6615,23 @@
builder object network. It provides access to the model folders and
supplies the name of the current project. The public interface of the
<code>CBuilder</code> class is shown below. <programlisting
- format="linespecific">class CBuilder : public CObject {
-public:
- CBuilderFolder *GetRootFolder() const;
- const CBuilderFolderList *GetFolders() const;
- CBuilderFolder *GetFolder(CString &name) const;
- CString GetProjectName() const;
+ format="linespecific">class CBuilder : public CObject {
+public:
+ CBuilderFolder *GetRootFolder() const;
+ const CBuilderFolderList *GetFolders() const;
+ CBuilderFolder *GetFolder(CString &name) const;
+ CString GetProjectName() const;
}; </programlisting></para>
<para>The <code>CBuilderFolder</code> class provides access to the
root models of the given folder. It can also be used to create new
- root models. <programlisting format="linespecific">class CBuilderFolder : public CObject {
-public:
- const CString& GetName() const;
- const CBuilderModelList *GetRootModels() const;
- const CBuilderFolderList *GetSubFolders() const
- CBuilderModel *GetRootModel(CString &name) const;
- CBuilderModel *CreateNewModel(CString kindName);
+ root models. <programlisting format="linespecific">class CBuilderFolder : public CObject {
+public:
+ const CString& GetName() const;
+ const CBuilderModelList *GetRootModels() const;
+ const CBuilderFolderList *GetSubFolders() const
+ CBuilderModel *GetRootModel(CString &name) const;
+ CBuilderModel *CreateNewModel(CString kindName);
}; </programlisting></para>
<para>The <code>CBuilderObject</code> is the base class for several
@@ -6676,52 +6676,52 @@
class does override this function. It enumerates all of its children
and calls their <code>Traverse</code> method.</para>
- <programlisting format="linespecific"> class CBuilderObject : public CObject {
- const CString& GetName();
- const bool SetName(CString newname);
-
+ <programlisting format="linespecific"> class CBuilderObject : public CObject {
+ const CString& GetName();
+ const bool SetName(CString newname);
+
void GetNamePath(CString &namePath) const
- const CString& GetKindName() const;
- const CString& GetPartName() const;
-
- const CBuilderModel *GetParent() const;
- CBuilderFolder* GetFolder() const;
-
- bool GetLocation(CString &aspectName,CRect &loc);
- bool SetLocation(CString aspectName,CPoint loc);
- void DisplayError(CString &msg) const;
- void DisplayError(char *msg) const;
- void DisplayWarning(CString &msg) const;
- void DisplayWarning(char *msg) const;
- bool GetAttribute(CString &name,CString &val) const;
- bool GetAttribute(char *name,CString &val) const;
- bool GetAttribute(CString &name,int &val) const;
- bool GetAttribute(char *name,int &val) const;
- bool GetAttribute(CString &name,bool &val) const;
- bool GetAttribute(char *name,bool &val) const;
- bool SetAttribute(CString &name, CString &val);
- bool SetAttribute(CString &name, int val);
- bool SetAttribute(CString &name, bool val);
- void GetStrAttributeNames(CStringList &list) const;
- void GetIntAttributeNames(CStringList &list) const;
- void GetBoolAttributeNames(CStringList &list) const;
- void GetReferencedBy(CBuilderObjectList &list) const;
+ const CString& GetKindName() const;
+ const CString& GetPartName() const;
+
+ const CBuilderModel *GetParent() const;
+ CBuilderFolder* GetFolder() const;
+
+ bool GetLocation(CString &aspectName,CRect &loc);
+ bool SetLocation(CString aspectName,CPoint loc);
+ void DisplayError(CString &msg) const;
+ void DisplayError(char *msg) const;
+ void DisplayWarning(CString &msg) const;
+ void DisplayWarning(char *msg) const;
+ bool GetAttribute(CString &name,CString &val) const;
+ bool GetAttribute(char *name,CString &val) const;
+ bool GetAttribute(CString &name,int &val) const;
+ bool GetAttribute(char *name,int &val) const;
+ bool GetAttribute(CString &name,bool &val) const;
+ bool GetAttribute(char *name,bool &val) const;
+ bool SetAttribute(CString &name, CString &val);
+ bool SetAttribute(CString &name, int val);
+ bool SetAttribute(CString &name, bool val);
+ void GetStrAttributeNames(CStringList &list) const;
+ void GetIntAttributeNames(CStringList &list) const;
+ void GetBoolAttributeNames(CStringList &list) const;
+ void GetReferencedBy(CBuilderObjectList &list) const;
const CBuilderConnectionList *GetInConnections(CString &name) const;
- const CBuilderConnectionList *GetInConnections(char *name) const;
- const CBuilderConnectionList *GetOutConnections(CString name)const;
+ const CBuilderConnectionList *GetInConnections(char *name) const;
+ const CBuilderConnectionList *GetOutConnections(CString name)const;
const CBuilderConnectionList *GetOutConnections(char *name) const;
-
- bool GetInConnectedObjects(const CString &name, CBuilderObjectList &list);
- bool GetInConnectedObjects(const char *name, CBuilderObjectList &list);
- bool GetOutConnectedObjects(const CString &name, BuilderObjectList &list);
- bool GetOutConnectedObjects(const char *name, CBuilderObjectList &list);
-
- bool GetDirectInConnections(CString &name, CBuilderObjectList &list);
- bool GetDirectInConnections(char *name, CBuilderObjectList &list);
- bool GetDirectOutConnections(CString &name, CBuilderObjectList &list);
- bool GetDirectOutConnections(char *name, CBuilderObjectList &list);
-
- virtual void TraverseChildren(void *pointer = 0);
+
+ bool GetInConnectedObjects(const CString &name, CBuilderObjectList &list);
+ bool GetInConnectedObjects(const char *name, CBuilderObjectList &list);
+ bool GetOutConnectedObjects(const CString &name, BuilderObjectList &list);
+ bool GetOutConnectedObjects(const char *name, CBuilderObjectList &list);
+
+ bool GetDirectInConnections(CString &name, CBuilderObjectList &list);
+ bool GetDirectInConnections(char *name, CBuilderObjectList &list);
+ bool GetDirectOutConnections(CString &name, CBuilderObjectList &list);
+ bool GetDirectOutConnections(char *name, CBuilderObjectList &list);
+
+ virtual void TraverseChildren(void *pointer = 0);
};</programlisting>
<para>The <code>CBuilderModel</code> class is the most important class
@@ -6752,43 +6752,43 @@
<para>The <code>TraverseModels</code> function is similar to the
<code>TraverseChildren</code> but it only traverses models.</para>
- <programlisting format="linespecific">class CBuilderModel : public CBuilderObject {
-public:
- const CBuilderObjectList *GetChildren() const;
- const CBuilderModelList *GetModels() const;
- const CBuilderModelList *GetModels(CString partName) const;
- const CBuilderAtomList *GetAtoms(CString partName) const;
- const CBuilderModelReferenceList *GetModelReferences( CString refPartName) const;
- const CBuilderAtomReferenceList *GetAtomReferences( CString refPartName ) const;
- const CBuilderConnectionList *GetConnections(CString name) const;
- const CBuilderSetList *GetSets(CString name) const;
-
- void GetAspectNames(CStringList &list);
-
- CBuilderModel *CreateNewModel(CString partName);
- CBuilderAtom *CreateNewAtom(CString partName);
- CBuilderModelReference *CreateNewModelReference(CString refPartName, CBuilderObject* refTo);
- CBuilderAtomReference *CreateNewAtomReference(CString refPartName, CBuilderObject* refTo);
- CBuilderSet *CreateNewSet(CString partName);
- CBuilderConnection *CreateNewConnection(CString connName, CBuilderObject *src, CBuilderObject *dst);
-
- virtual void TraverseModels(void *pointer = 0);
- virtual void TraverseChildren(void *pointer = 0);
+ <programlisting format="linespecific">class CBuilderModel : public CBuilderObject {
+public:
+ const CBuilderObjectList *GetChildren() const;
+ const CBuilderModelList *GetModels() const;
+ const CBuilderModelList *GetModels(CString partName) const;
+ const CBuilderAtomList *GetAtoms(CString partName) const;
+ const CBuilderModelReferenceList *GetModelReferences( CString refPartName) const;
+ const CBuilderAtomReferenceList *GetAtomReferences( CString refPartName ) const;
+ const CBuilderConnectionList *GetConnections(CString name) const;
+ const CBuilderSetList *GetSets(CString name) const;
+
+ void GetAspectNames(CStringList &list);
+
+ CBuilderModel *CreateNewModel(CString partName);
+ CBuilderAtom *CreateNewAtom(CString partName);
+ CBuilderModelReference *CreateNewModelReference(CString refPartName, CBuilderObject* refTo);
+ CBuilderAtomReference *CreateNewAtomReference(CString refPartName, CBuilderObject* refTo);
+ CBuilderSet *CreateNewSet(CString partName);
+ CBuilderConnection *CreateNewConnection(CString connName, CBuilderObject *src, CBuilderObject *dst);
+
+ virtual void TraverseModels(void *pointer = 0);
+ virtual void TraverseChildren(void *pointer = 0);
}; </programlisting>
<para>The <code>CBuilderAtom</code> class does not provide any new
public methods.</para>
- <programlisting format="linespecific">class CBuilderAtom : public CBuilderObject {
-public:
+ <programlisting format="linespecific">class CBuilderAtom : public CBuilderObject {
+public:
}; </programlisting>
<para>The <code>CBuilderAtomReference</code> class provides the
<code>GetReferred</code> function that returns the atom (or atom
reference) referred to by the given reference.</para>
- <programlisting format="linespecific">class CBuilderAtomReference : public CBuilderObject {
- const CBuilderObject *GetReferred() const;
+ <programlisting format="linespecific">class CBuilderAtomReference : public CBuilderObject {
+ const CBuilderObject *GetReferred() const;
}; </programlisting>
<para>Even though the GME deals with ports of models (since models
@@ -6802,10 +6802,10 @@
atom that corresponds to the port of the model that the model
reference port represents.</para>
- <programlisting format="linespecific">class CBuilderReferencePort : public CBuilderObject {
-public:
- const CBuilderModelReference *GetOwner() const;
- const CBuilderAtom *GetAtom() const;
+ <programlisting format="linespecific">class CBuilderReferencePort : public CBuilderObject {
+public:
+ const CBuilderModelReference *GetOwner() const;
+ const CBuilderAtom *GetAtom() const;
}; </programlisting>
<para>The <code>CBuilderModelReference</code> class provides the
@@ -6814,9 +6814,9 @@
<code>GetRefereePorts</code> return the list of
<code>CBuilderReferencePorts</code>.</para>
- <programlisting format="linespecific">class CBuilderModelReference : public CBuilderObject {
- const CBuilderReferencePortList &GetRefereePorts() const;
- const CBuilderObject *GetReferred() const;
+ <programlisting format="linespecific">class CBuilderModelReference : public CBuilderObject {
+ const CBuilderReferencePortList &GetRefereePorts() const;
+ const CBuilderObject *GetReferred() const;
}; </programlisting>
<para>A <code>CBuilderConnection</code> instance describes a relation
@@ -6829,23 +6829,23 @@
a reference port, its owner must be a child of the owner of the
connection.</para>
- <programlisting format="linespecific">class CBuilderConnection : public CBuilderObject {
-public:
- CBuilderModel *GetOwner() const;
- CBuilderObject *GetSource() const;
- CBuilderObject *GetDestination() const;
+ <programlisting format="linespecific">class CBuilderConnection : public CBuilderObject {
+public:
+ CBuilderModel *GetOwner() const;
+ CBuilderObject *GetSource() const;
+ CBuilderObject *GetDestination() const;
}; </programlisting>
<para>The <code>CBuilderSet</code> class member function provide
straightforward access to the different components of sets.</para>
- <programlisting format="linespecific">class CBuilderSet : public CBuilderObject {
-public:
- const CBuilderModel *GetOwner() const;
- const CBuilderObjectList *GetMembers() const;
-
- bool AddMember(CBuilderObject *part);
- bool RemoveMember(CBuilderObject *part);
+ <programlisting format="linespecific">class CBuilderSet : public CBuilderObject {
+public:
+ const CBuilderModel *GetOwner() const;
+ const CBuilderObjectList *GetMembers() const;
+
+ bool AddMember(CBuilderObject *part);
+ bool RemoveMember(CBuilderObject *part);
}; </programlisting>
</section>
@@ -6858,32 +6858,32 @@
<filename moreinfo="none">component.cpp</filename> file is shown
below.</para>
- <programlisting format="linespecific">#include "stdafx.h"
-#include "Component.h"
-
-void CComponent:: InvokeEx(CBuilder &builder,CBuilderObject *focus,
- CBuilderObjectList &selected, long param)
-{
- const CBuilderFolderList *folds = builder.GetFolders();
- POSITION fPos = folds->GetHeadPosition();
- while(fPos) {
- CBuilderFolder *fold = folds->GetNext(fPos);
- const CBuilderModelList *roots = fold->GetRootModels();
- POSITION rootPos = roots->GetHeadPosition();
- while(rootPos)
- ScanModels(roots->GetNext(rootPos),fold->GetName());
- }
-}
-
-void CComponent::ScanModels(CBuilderModel *model, CString fName)
-{
- AfxMessageBox(model->GetName() + " model found in the " +
- fName + " folder");
-
- const CBuilderModelList *models = model->GetModels();
- POSITION pos = models->GetHeadPosition();
- while(pos)
- ScanModels(models->GetNext(pos),fName);
+ <programlisting format="linespecific">#include "stdafx.h"
+#include "Component.h"
+
+void CComponent:: InvokeEx(CBuilder &builder,CBuilderObject *focus,
+ CBuilderObjectList &selected, long param)
+{
+ const CBuilderFolderList *folds = builder.GetFolders();
+ POSITION fPos = folds->GetHeadPosition();
+ while(fPos) {
+ CBuilderFolder *fold = folds->GetNext(fPos);
+ const CBuilderModelList *roots = fold->GetRootModels();
+ POSITION rootPos = roots->GetHeadPosition();
+ while(rootPos)
+ ScanModels(roots->GetNext(rootPos),fold->GetName());
+ }
+}
+
+void CComponent::ScanModels(CBuilderModel *model, CString fName)
+{
+ AfxMessageBox(model->GetName() + " model found in the " +
+ fName + " folder");
+
+ const CBuilderModelList *models = model->GetModels();
+ POSITION pos = models->GetHeadPosition();
+ while(pos)
+ ScanModels(models->GetNext(pos),fName);
} </programlisting>
</section>
@@ -6903,18 +6903,18 @@
for models, atoms, model- and atom references, connections and sets.
The following list describes their generic form.</para>
- <programlisting format="linespecific">DECLARE_CUSTOMMODEL(<CLASS>,<BASE CLASS>)
-DECLARE_CUSTOMMODELREF(<CLASS>,<BASE CLASS>)
-DECLARE_CUSTOMATOM(<CLASS>,<BASE CLASS>)
-DECLARE_CUSTOMATOMREF(<CLASS>,<BASE CLASS>)
-DECLARE_CUSTOMCONNECTION(<CLASS>,<BASE CLASS>)
-DECLARE_CUSTOMSET(<CLASS>,<BASE CLASS>)
-
-IMPLEMENT_CUSTOMMODEL(<CLASS>,<BASE CLASS>,<NAMES>)
-IMPLEMENT_CUSTOMMODELREF(<CLASS>,<BASE CLASS>,<NAMES>)
-IMPLEMENT_CUSTOMATOM(<CLASS>,<BASE CLASS>,<NAMES>)
-IMPLEMENT_CUSTOMATOMREF(<CLASS>,<BASE CLASS>,<NAMES>)
-IMPLEMENT_CUSTOMCONNECTION(<CLASS>,<BASE CLASS>,<NAMES>)
+ <programlisting format="linespecific">DECLARE_CUSTOMMODEL(<CLASS>,<BASE CLASS>)
+DECLARE_CUSTOMMODELREF(<CLASS>,<BASE CLASS>)
+DECLARE_CUSTOMATOM(<CLASS>,<BASE CLASS>)
+DECLARE_CUSTOMATOMREF(<CLASS>,<BASE CLASS>)
+DECLARE_CUSTOMCONNECTION(<CLASS>,<BASE CLASS>)
+DECLARE_CUSTOMSET(<CLASS>,<BASE CLASS>)
+
+IMPLEMENT_CUSTOMMODEL(<CLASS>,<BASE CLASS>,<NAMES>)
+IMPLEMENT_CUSTOMMODELREF(<CLASS>,<BASE CLASS>,<NAMES>)
+IMPLEMENT_CUSTOMATOM(<CLASS>,<BASE CLASS>,<NAMES>)
+IMPLEMENT_CUSTOMATOMREF(<CLASS>,<BASE CLASS>,<NAMES>)
+IMPLEMENT_CUSTOMCONNECTION(<CLASS>,<BASE CLASS>,<NAMES>)
IMPLEMENT_CUSTOMSET(<CLASS>,<BASE CLASS>,<NAMES>) </programlisting>
<para>Here, the <CLASS> is the name of the new class, while the
@@ -6928,33 +6928,33 @@
<para>For example, if we have a "Compound" model in our paradigm, we
can create a builder class for it the following way.</para>
- <programlisting format="linespecific">// Component.h
-
-class CCompoundBuilder : public CBuilderModel
-{
- DECLARE_CUSTOMMODEL(CCompoundBuilder, CBuilderModel)
-public:
- virtual void Initialize();
- virtual ~CCompoundBuilder();
-
-// more declarations
-};
-
-// Component.cpp
-
-IMPLEMENT_CUSTOMMODEL(CCompoundBuilder, CBuilderModel, "Compound")
-
-void CCompoundBuilder::Initialize()
-{
- // code that otherwise would go into a constructor
-
- CBuilderModel::Initialize();
-}
-
-CCompoundBuilder::~CCompoundBuilder()
-{
- // the destructor
-}
+ <programlisting format="linespecific">// Component.h
+
+class CCompoundBuilder : public CBuilderModel
+{
+ DECLARE_CUSTOMMODEL(CCompoundBuilder, CBuilderModel)
+public:
+ virtual void Initialize();
+ virtual ~CCompoundBuilder();
+
+// more declarations
+};
+
+// Component.cpp
+
+IMPLEMENT_CUSTOMMODEL(CCompoundBuilder, CBuilderModel, "Compound")
+
+void CCompoundBuilder::Initialize()
+{
+ // code that otherwise would go into a constructor
+
+ CBuilderModel::Initialize();
+}
+
+CCompoundBuilder::~CCompoundBuilder()
+{
+ // the destructor
+}
// more code </programlisting>
<para>The macros create a constructor and a Create function in order
@@ -6970,18 +6970,18 @@
from the list below. Note that the <NAMES> argument is missing
because there is no need for it.</para>
- <programlisting format="linespecific">DECLARE_CUSTOMMODELBASE(<CLASS>,<BASE CLASS>)
-DECLARE_CUSTOMMODELREFBASE(<CLASS>,<BASE CLASS>)
-DECLARE_CUSTOMATOMBASE(<CLASS>,<BASE CLASS>)
-DECLARE_CUSTOMATOMREFBASE(<CLASS>,<BASE CLASS>)
-DECLARE_CUSTOMCONNECTIONBASE(<CLASS>,<BASE CLASS>)
-DECLARE_CUSTOMSETBASE(<CLASS>,<BASE CLASS>)
-
-IMPLEMENT_CUSTOMMODELBASE(<CLASS>,<BASE CLASS>)
-IMPLEMENT_CUSTOMMODELREFBASE(<CLASS>,<BASE CLASS>)
-IMPLEMENT_CUSTOMATOMBASE(<CLASS>,<BASE CLASS>)
-IMPLEMENT_CUSTOMATOMREFBASE(<CLASS>,<BASE CLASS>)
-IMPLEMENT_CUSTOMCONNECTIONBASE(<CLASS>,<BASE CLASS>)
+ <programlisting format="linespecific">DECLARE_CUSTOMMODELBASE(<CLASS>,<BASE CLASS>)
+DECLARE_CUSTOMMODELREFBASE(<CLASS>,<BASE CLASS>)
+DECLARE_CUSTOMATOMBASE(<CLASS>,<BASE CLASS>)
+DECLARE_CUSTOMATOMREFBASE(<CLASS>,<BASE CLASS>)
+DECLARE_CUSTOMCONNECTIONBASE(<CLASS>,<BASE CLASS>)
+DECLARE_CUSTOMSETBASE(<CLASS>,<BASE CLASS>)
+
+IMPLEMENT_CUSTOMMODELBASE(<CLASS>,<BASE CLASS>)
+IMPLEMENT_CUSTOMMODELREFBASE(<CLASS>,<BASE CLASS>)
+IMPLEMENT_CUSTOMATOMBASE(<CLASS>,<BASE CLASS>)
+IMPLEMENT_CUSTOMATOMREFBASE(<CLASS>,<BASE CLASS>)
+IMPLEMENT_CUSTOMCONNECTIONBASE(<CLASS>,<BASE CLASS>)
IMPLEMENT_CUSTOMSETBASE(<CLASS>,<BASE CLASS>) </programlisting>
<para>For casting, use the <code>BUILDER_CAST(CLASS, PTR)</code> macro
@@ -6998,66 +6998,66 @@
models. Again, the folder hierarchy is not considered. Here is the
<filename moreinfo="none">Component.h</filename> file:</para>
- <programlisting format="linespecific">#ifndef GME_INTERPRETER_H
-#define GME_INTERPRETER_H
-
-#include "Builder.h"
-
-#define NEW_BON_INVOKE
-//#define DEPRECATED_BON_INVOKE_IMPLEMENTED
-
-class CComponent {
-public:
- CComponent() : focusfolder(NULL) { ; }
- CBuilderFolder *focusfolder;
- CBuilderFolderList selectedfolders;
- void InvokeEx(CBuilder &builder,CBuilderObject *focus,
- CBuilderObjectList &selected, long param);
-};
-
-class CCompoundBuilder : public CBuilderModel
-{
- DECLARE_CUSTOMMODEL(CCompoundBuilder, CBuilderModel)
-public:
- void Scan(CString foldName);
-};
-
+ <programlisting format="linespecific">#ifndef GME_INTERPRETER_H
+#define GME_INTERPRETER_H
+
+#include "Builder.h"
+
+#define NEW_BON_INVOKE
+//#define DEPRECATED_BON_INVOKE_IMPLEMENTED
+
+class CComponent {
+public:
+ CComponent() : focusfolder(NULL) { ; }
+ CBuilderFolder *focusfolder;
+ CBuilderFolderList selectedfolders;
+ void InvokeEx(CBuilder &builder,CBuilderObject *focus,
+ CBuilderObjectList &selected, long param);
+};
+
+class CCompoundBuilder : public CBuilderModel
+{
+ DECLARE_CUSTOMMODEL(CCompoundBuilder, CBuilderModel)
+public:
+ void Scan(CString foldName);
+};
+
#endif // whole file </programlisting>
<para>The <filename moreinfo="none">component.cpp</filename> file is
shown below.</para>
- <programlisting format="linespecific">#include "stdafx.h"
-#include "Component.h"
-
-void CComponent::InvokeEx(CBuilder &builder,CBuilderObject *focus,
- CBuilderObjectList &selected, long param)
-{
- const CBuilderFolderList *folds = builder.GetFolders();
- POSITION foldPos = folds->GetHeadPosition();
- while(foldPos) {
- CBuilderFolder *fold = folds->GetNext(foldPos);
- const CBuilderModelList *roots = fold->GetRootModels();
- POSITION rootPos = roots->GetHeadPosition();
- while(rootPos) {
- CBuilderModel *root = roots->GetNext(rootPos);
- if(root->IsKindOf(RUNTIME_CLASS(CCompoundBuilder)))
- BUILDER_CAST(CCompoundBuilder,root)->Scan(fold->GetName());
- }
- }
-}
-
-IMPLEMENT_CUSTOMMODEL(CCompoundBuilder, CBuilderModel, "Compound")
-
-void CCompoundBuilder::Scan(CString foldName)
-{
- AfxMessageBox(GetName() + " model found in " + foldName +
- " folder");
-
- const CBuilderModelList *models = GetModels("CompoundParts");
- POSITION pos = models->GetHeadPosition();
- while(pos)
- BUILDER_CAST(CCompoundBuilder,models->GetNext(pos))->Scan(foldName);
+ <programlisting format="linespecific">#include "stdafx.h"
+#include "Component.h"
+
+void CComponent::InvokeEx(CBuilder &builder,CBuilderObject *focus,
+ CBuilderObjectList &selected, long param)
+{
+ const CBuilderFolderList *folds = builder.GetFolders();
+ POSITION foldPos = folds->GetHeadPosition();
+ while(foldPos) {
+ CBuilderFolder *fold = folds->GetNext(foldPos);
+ const CBuilderModelList *roots = fold->GetRootModels();
+ POSITION rootPos = roots->GetHeadPosition();
+ while(rootPos) {
+ CBuilderModel *root = roots->GetNext(rootPos);
+ if(root->IsKindOf(RUNTIME_CLASS(CCompoundBuilder)))
+ BUILDER_CAST(CCompoundBuilder,root)->Scan(fold->GetName());
+ }
+ }
+}
+
+IMPLEMENT_CUSTOMMODEL(CCompoundBuilder, CBuilderModel, "Compound")
+
+void CCompoundBuilder::Scan(CString foldName)
+{
+ AfxMessageBox(GetName() + " model found in " + foldName +
+ " folder");
+
+ const CBuilderModelList *models = GetModels("CompoundParts");
+ POSITION pos = models->GetHeadPosition();
+ while(pos)
+ BUILDER_CAST(CCompoundBuilder,models->GetNext(pos))->Scan(foldName);
} </programlisting>
</section>
</section>
@@ -7373,10 +7373,10 @@
<para>BON2 wrapper classes use the operator <code>-></code> to
access functionality, in contrast to MON wrappers which use the simple
operator <code>.</code>. Here is an example:<programlisting
- format="linespecific">BON::FCO fco; // Here is an fco.
-// fco.isPort( ); // This would result a compiler error because the wrapper does not have this operation.
-fco->isPort( ); // The operator[->] dereferences a BON::FCOImpl pointer.
-MON::FCO metafco = fco->getFCOMeta(); // obtain the definition of the FCO.
+ format="linespecific">BON::FCO fco; // Here is an fco.
+// fco.isPort( ); // This would result a compiler error because the wrapper does not have this operation.
+fco->isPort( ); // The operator[->] dereferences a BON::FCOImpl pointer.
+MON::FCO metafco = fco->getFCOMeta(); // obtain the definition of the FCO.
std::string strKindName = metafco.name(); // get the name of the meta, the kindname of the object </programlisting></para>
<important>
@@ -7387,10 +7387,10 @@
object can be determined by operator[bool] and operator[!].</para>
</important>
- <programlisting format="linespecific">BON::Project project; // Let’s assume the project is valid.
-BON::Folder root = project->getRootFolder( ); // Get the root folder
-if ( root ) AfxMessageBox( “RootFolder always exists!” );
-BON::Folder parent = root->getParentFolder(); // Get the parent of the root, which is NULL.
+ <programlisting format="linespecific">BON::Project project; // Let’s assume the project is valid.
+BON::Folder root = project->getRootFolder( ); // Get the root folder
+if ( root ) AfxMessageBox( “RootFolder always exists!” );
+BON::Folder parent = root->getParentFolder(); // Get the parent of the root, which is NULL.
if ( ! parent ) AfxMessageBox( “RootFolder never has parent” ); </programlisting>
<para>The user can check the equality of two BON objects with the
@@ -7409,11 +7409,11 @@
operators. If the cast succeeds, then the pointer held by the
appropriate wrapper will be valid, otherwise it will be null. To
understand this, let's see the following example. <programlisting
- format="linespecific">BON:.Model child; // Let’s assume child is valid
-BON::Object parent = child->getParent();
-if ( parent ) AfxMessageBox( “This is always valid” );
-BON::Model model = object;
-if ( model ) AfxMessageBox( “The parent is a model” );
+ format="linespecific">BON:.Model child; // Let’s assume child is valid
+BON::Object parent = child->getParent();
+if ( parent ) AfxMessageBox( “This is always valid” );
+BON::Model model = object;
+if ( model ) AfxMessageBox( “The parent is a model” );
if ( BON::Folder( object ) ) AfxMessageBox( “The parent is a folder” ); </programlisting></para>
<para>These facilities are implemented in the wrapper classes. For
@@ -7541,18 +7541,18 @@
<para>The interpreters' entry point is the <code>invokeEx()</code> of
<code>BON::Component</code> and this is the main part. Here is a
- descriptive example: <programlisting format="linespecific">void Component::invokeEx( Project& project, FCO& currentFCO, const std::set<FCO>& setSelectedFCOs, long lParam )
-{
- AfxMessageBox( “Project: “ + CString( project->getName().c_str() ) );
- if ( ! Model( currentFCO ) ) {
- AfxMessageBox( “The context of the component must be a model!” )
- return;
- }
- CString strObjects( “Selected objects are: \r\n” );
- for ( std::set<FCO>::iterator it = setSelectedFCOs.begin() ; it != setSelectedFCOs.end() ; it++ ) {
- strObjects += CString( (*it)->getName().c_str() ) + “\r\n” );
- }
- AfxMessageBox( strObjects );
+ descriptive example: <programlisting format="linespecific">void Component::invokeEx( Project& project, FCO& currentFCO, const std::set<FCO>& setSelectedFCOs, long lParam )
+{
+ AfxMessageBox( “Project: “ + CString( project->getName().c_str() ) );
+ if ( ! Model( currentFCO ) ) {
+ AfxMessageBox( “The context of the component must be a model!” )
+ return;
+ }
+ CString strObjects( “Selected objects are: \r\n” );
+ for ( std::set<FCO>::iterator it = setSelectedFCOs.begin() ; it != setSelectedFCOs.end() ; it++ ) {
+ strObjects += CString( (*it)->getName().c_str() ) + “\r\n” );
+ }
+ AfxMessageBox( strObjects );
} // end of invokeEx </programlisting></para>
</section>
@@ -7565,17 +7565,17 @@
<para>The user may handle and react to all events in
<code>objectEventPerformed()</code> of <code>BON::Component</code>.
- Here is an example: <programlisting format="linespecific">void Component::objectEventPerformed( Object& object, unsigned long event, VARIANT v )
-{
- // v in this version of BON2 is unused, in the future it will contain
- // appropriate event parameter(s)
- AfxMessageBox( “The context: “ + CString( object->getName().c_str() ) );
- // At the same time more than one event may be performed.
- CString strEvents( “Events: \r\n” );
- for ( MON::ObjectEventType eType = MON::OET_ObjectCreated ; eType != MON::OET_All ; eType++ ) {
- strEvents += CString( toString( eType ).c_str() ) + “\r\n”;
- }
- AfxMessageBox( strEvents );
+ Here is an example: <programlisting format="linespecific">void Component::objectEventPerformed( Object& object, unsigned long event, VARIANT v )
+{
+ // v in this version of BON2 is unused, in the future it will contain
+ // appropriate event parameter(s)
+ AfxMessageBox( “The context: “ + CString( object->getName().c_str() ) );
+ // At the same time more than one event may be performed.
+ CString strEvents( “Events: \r\n” );
+ for ( MON::ObjectEventType eType = MON::OET_ObjectCreated ; eType != MON::OET_All ; eType++ ) {
+ strEvents += CString( toString( eType ).c_str() ) + “\r\n”;
+ }
+ AfxMessageBox( strEvents );
} </programlisting></para>
<para>This way of handling events is the most general. It is likely
@@ -7670,36 +7670,36 @@
</itemizedlist></para>
<para>Here is our Compound implementation:<programlisting
- format="linespecific">class CompoundImpl
- : public BON::ModelImpl // extending the implementation class
-{
-public :
- void initialize()
- {
- // cache the proper child models
- std::set<BON::Model> temp = getChildModels();
- for ( std::set<BON::Model>::iterator it = temp.begin() ;
- it != temp.end() ; it++ ) {
- if ( (*it)->getObjectMeta().name() == “Compound” &&
- (*it)->getChildFCOs().size() >= 2 ) {
- mySet.insert( *it );
- }
- }
- }
-
- void finalize()
- {
- mySet.clear(); // important to avoid reference cycles
- }
-
- std::set<BON::Model> getMyCompounds()
- {
- return mySet;
- }
-
-private :
- std::set<BON::Model> mySet;
-
+ format="linespecific">class CompoundImpl
+ : public BON::ModelImpl // extending the implementation class
+{
+public :
+ void initialize()
+ {
+ // cache the proper child models
+ std::set<BON::Model> temp = getChildModels();
+ for ( std::set<BON::Model>::iterator it = temp.begin() ;
+ it != temp.end() ; it++ ) {
+ if ( (*it)->getObjectMeta().name() == “Compound” &&
+ (*it)->getChildFCOs().size() >= 2 ) {
+ mySet.insert( *it );
+ }
+ }
+ }
+
+ void finalize()
+ {
+ mySet.clear(); // important to avoid reference cycles
+ }
+
+ std::set<BON::Model> getMyCompounds()
+ {
+ return mySet;
+ }
+
+private :
+ std::set<BON::Model> mySet;
+
}; // end of class </programlisting></para>
</section>
@@ -7855,12 +7855,12 @@
After that she extends the <code>AtomEx</code> with
<code>Parameter</code>, and <code>Parameter</code> is extended with
<code>MainParameter</code> which is assigned to a specific role.
- <programlisting format="linespecific">DECLARE_BONEXTENSION(BON::Atom,AtomExImpl,AtomEx);
-DECLARE_BONEXTENSION(AtomEx,ParameterImpl,Parameter);
-DECLARE_BONEXTENSION(Parameter,MainParameterImpl,MainParameter);
-....
-IMPLEMENT_BONEXTENSION(AtomEx,“BON::Atom”);
-IMPLEMENT_BONEXTENSION(Parameter,“InputParameter OutputParameter Parameter”);
+ <programlisting format="linespecific">DECLARE_BONEXTENSION(BON::Atom,AtomExImpl,AtomEx);
+DECLARE_BONEXTENSION(AtomEx,ParameterImpl,Parameter);
+DECLARE_BONEXTENSION(Parameter,MainParameterImpl,MainParameter);
+....
+IMPLEMENT_BONEXTENSION(AtomEx,“BON::Atom”);
+IMPLEMENT_BONEXTENSION(Parameter,“InputParameter OutputParameter Parameter”);
IMPLEMENT_BONEXTENSION(MainParameter,“MainParameter”); </programlisting></para>
</section>
@@ -7929,41 +7929,41 @@
</listitem>
</itemizedlist></para>
- <para>The example code:<programlisting format="linespecific">// Realization of the implementation classes
-class ProcessingUnitImpl
- : virtual public BON::FCOImpl
-{
- // Note: BON::FCOImpl is an abstract class by default
- .....
- void doSomething( ) { .... }
-};
-
-class CompoundImpl
- : public BON::ModelImpl, public ProcessingUnitImpl
-{
- .....
-};
-
-// Declare BON extensions
-DECLARE_ABSTRACT_BONEXTENSION( BON::FCO, ProcessingUnitImpl, ProcessingUnit);
-DECLARE_BONEXTENSION2( BON::Model, ProcessingUnit, CompoundImpl, Compound);
-
-// Implement BON wrappers (assignment if it is required)
-IMPLEMENT_ABSTRACT_BONEXTENSION( ProcessingUnit );
-IMPLEMENT_BONEXTENSION( Compound, “Compound” );
-
-// Using the extensions
-void print( const BON::FCO& fco )
-{
- if ( BON::Model( fco ) ) AfxMessageBox( “It is a model!” );
- ProcessingUnit unit = fco;
- if ( unit ) {
- unit->doSomething();
- if ( Compound( unit ) )
- AfxMessageBox( “It is a Compound!” );
- else
- AfxMessageBox( “It is another descendant of ProcessingUnit!” );
- }
+ <para>The example code:<programlisting format="linespecific">// Realization of the implementation classes
+class ProcessingUnitImpl
+ : virtual public BON::FCOImpl
+{
+ // Note: BON::FCOImpl is an abstract class by default
+ .....
+ void doSomething( ) { .... }
+};
+
+class CompoundImpl
+ : public BON::ModelImpl, public ProcessingUnitImpl
+{
+ .....
+};
+
+// Declare BON extensions
+DECLARE_ABSTRACT_BONEXTENSION( BON::FCO, ProcessingUnitImpl, ProcessingUnit);
+DECLARE_BONEXTENSION2( BON::Model, ProcessingUnit, CompoundImpl, Compound);
+
+// Implement BON wrappers (assignment if it is required)
+IMPLEMENT_ABSTRACT_BONEXTENSION( ProcessingUnit );
+IMPLEMENT_BONEXTENSION( Compound, “Compound” );
+
+// Using the extensions
+void print( const BON::FCO& fco )
+{
+ if ( BON::Model( fco ) ) AfxMessageBox( “It is a model!” );
+ ProcessingUnit unit = fco;
+ if ( unit ) {
+ unit->doSomething();
+ if ( Compound( unit ) )
+ AfxMessageBox( “It is a Compound!” );
+ else
+ AfxMessageBox( “It is another descendant of ProcessingUnit!” );
+ }
} // end of method </programlisting></para>
</section>
</section>
@@ -8142,37 +8142,37 @@
<para>Let's see the following examples considering the previous
figure to understand the described issues.</para>
- <programlisting format="linespecific">// the model called Model in the figure
-BON::Model model;
-// P2 of Model, we omit the acquiring operations
-BON::Atom p2_model;
-// Ref1 refers to Model
-BON::Reference ref1 = model->getReferredBy();
-// PortContainer of the model reference
-BON::ReferencePortContainer rpc_ref1 = ref1->getRefPortContainer();
-// Find the ReferencePort referring to P2
-BON::ReferencePort p2_ref1 = rpc_ref1->getReferencePort( p2_model )
-....
-// Parent of this ReferencePort is null
-p2_ref1->getParentPort();
-// Descendants of P2 of Ref1 containing P2 of Ref2, Ref3 and Ref4
-p2_ref1->getDescendantPorts();
-// Children of P2 of Ref1 containing P2 of Ref2 and Ref3
-p2_ref1->getChildPorts();
-// Get referred FCO (i.e. p2_model, P2 of Model) of P2 of Ref1.
-p2_ref1->getFCO();
-....
-// Get objects connected to P2 of Model directly or indirectly (via reference
-// ports). It includes A, A1, A2, A3 and A4.
-p2_model->getConnEnds( “”, “”, true );
-// Get objects connected to P2 of Model directly without reference ports
-// It includes only A.
-p2_model->getConnEnds( “”, “”, false );
-// Get objects connected to P2 of Ref1 directly or indirectly (via descendant
-// reference ports). It includes A1, A2, A3 and A4. A is not included.
-p2_ref1->getConnEnds( “”, “”, true );
-// Get objects connected to P2 of Ref1 directly without descendant reference
-// ports. It includes only A1.
+ <programlisting format="linespecific">// the model called Model in the figure
+BON::Model model;
+// P2 of Model, we omit the acquiring operations
+BON::Atom p2_model;
+// Ref1 refers to Model
+BON::Reference ref1 = model->getReferredBy();
+// PortContainer of the model reference
+BON::ReferencePortContainer rpc_ref1 = ref1->getRefPortContainer();
+// Find the ReferencePort referring to P2
+BON::ReferencePort p2_ref1 = rpc_ref1->getReferencePort( p2_model )
+....
+// Parent of this ReferencePort is null
+p2_ref1->getParentPort();
+// Descendants of P2 of Ref1 containing P2 of Ref2, Ref3 and Ref4
+p2_ref1->getDescendantPorts();
+// Children of P2 of Ref1 containing P2 of Ref2 and Ref3
+p2_ref1->getChildPorts();
+// Get referred FCO (i.e. p2_model, P2 of Model) of P2 of Ref1.
+p2_ref1->getFCO();
+....
+// Get objects connected to P2 of Model directly or indirectly (via reference
+// ports). It includes A, A1, A2, A3 and A4.
+p2_model->getConnEnds( “”, “”, true );
+// Get objects connected to P2 of Model directly without reference ports
+// It includes only A.
+p2_model->getConnEnds( “”, “”, false );
+// Get objects connected to P2 of Ref1 directly or indirectly (via descendant
+// reference ports). It includes A1, A2, A3 and A4. A is not included.
+p2_ref1->getConnEnds( “”, “”, true );
+// Get objects connected to P2 of Ref1 directly without descendant reference
+// ports. It includes only A1.
p2_ref1->getConnEnds( “”, “”, false );
// Gets objects connected to P1 of Ref3 or its referencers that have the "src" role in the connection (A3, A4)
@@ -8194,8 +8194,8 @@
decide whether a connection end is a reference port we can do this
in two ways.</para>
- <programlisting format="linespecific">
-if ( BON::ReferencePort( connectionend ) ) { // do something }
+ <programlisting format="linespecific">
+if ( BON::ReferencePort( connectionend ) ) { // do something }
if ( connectionend->isReferencePort() ) { // do something } </programlisting>
</section>
</section>
@@ -8275,10 +8275,10 @@
<code>FCOExRegistryNode</code>, which can be obtained from fcos which
are not connections, the use of the others is obvious.</para>
- <para>An example:<programlisting format="linespecific">// Get the color of the portnames of the port
-COLORREF crPort = BON::ModelRegistryNode( model->getRegistry() )->getPortNameColor();
-...
-// Obtaining the position of an FCO in the Aspect ‘Aspect’
+ <para>An example:<programlisting format="linespecific">// Get the color of the portnames of the port
+COLORREF crPort = BON::ModelRegistryNode( model->getRegistry() )->getPortNameColor();
+...
+// Obtaining the position of an FCO in the Aspect ‘Aspect’
BON::Point pt = BON::FCOExRegistryNode( fco->getRegistry() )->getLocation( “Aspect” ); </programlisting></para>
</section>
</section>
@@ -8370,21 +8370,21 @@
<para>Below are some examples generated based on the SF paradigm.
Processing and Compound are model kinds in this paradigm.
- <programlisting format="linespecific">namespace SF_BON {
-DECLARE_ABSTRACT_BONEXTENSION( Model, ProcessingImpl, Processing);
-DECLARE_BONEXTENSION( Processing, CompoundImpl, Compound);
-class ProcessingImpl : public ModelImpl {
-public:
- std::set<InputSignals> getInputSignals();
- std::set<OutputSignals> getOutputSignals();
- std::set<Signals> gets();
-};
-class CompoundImpl : public ProcessingImpl
-{
-public:
- // kind and role getters
- std::set<Processing> getParts();
-};
+ <programlisting format="linespecific">namespace SF_BON {
+DECLARE_ABSTRACT_BONEXTENSION( Model, ProcessingImpl, Processing);
+DECLARE_BONEXTENSION( Processing, CompoundImpl, Compound);
+class ProcessingImpl : public ModelImpl {
+public:
+ std::set<InputSignals> getInputSignals();
+ std::set<OutputSignals> getOutputSignals();
+ std::set<Signals> gets();
+};
+class CompoundImpl : public ProcessingImpl
+{
+public:
+ // kind and role getters
+ std::set<Processing> getParts();
+};
}; // end namespace </programlisting></para>
<para><code>Processing</code> (with <code>Model</code> stereotype) has
@@ -8421,12 +8421,12 @@
<para>If the <code>Signal</code> atom had been non-abstract and the
rolename empty in the meta-model the following
<emphasis>get</emphasis> methods would have been generated:
- <programlisting format="linespecific">class ProcessingImpl : public ModelImpl {
-public:
- std::set<InputSignals> getInputSignals();
- std::set<OutputSignals> getOutputSignals();
- std::set<Signals> getSignals(); // role getter
- std::set<Signals> getSignals(int dummy); // aggregated
+ <programlisting format="linespecific">class ProcessingImpl : public ModelImpl {
+public:
+ std::set<InputSignals> getInputSignals();
+ std::set<OutputSignals> getOutputSignals();
+ std::set<Signals> getSignals(); // role getter
+ std::set<Signals> getSignals(int dummy); // aggregated
}; </programlisting></para>
<para>Connections will have specialized source and destination
@@ -8434,15 +8434,15 @@
a reference port as its end, the return value will be simply
<code>BON::ConnectionEnd</code>. In the case below no reference ports
are involved, so a specialized class like Signal will be returned by
- the get methods: <programlisting format="linespecific">class DataflowConnImpl : public ConnectionImpl
-{
-public:
- // connectionEnd getters
- Signal getSrc();
- Signal getDst();
- ///BUP
- // add your own members here
- ///EUP
+ the get methods: <programlisting format="linespecific">class DataflowConnImpl : public ConnectionImpl
+{
+public:
+ // connectionEnd getters
+ Signal getSrc();
+ Signal getDst();
+ ///BUP
+ // add your own members here
+ ///EUP
}; </programlisting></para>
<para>Beside this, the source and destination kinds will have two
@@ -8451,20 +8451,20 @@
the kinds connected to the object through a particular
connection.</para>
- <programlisting format="linespecific">class SignalImpl : public AtomImpl
-{
-public:
- // connection end getters
- std::multiset<Signal> getDataflowConnSrcs();
- std::multiset<Signal> getDataflowConnDsts();
- // connection link getters
- std::set<DataflowConn> getDataflowConnLinks();
- std::set<DataflowConn> getInDataflowConnLinks();
- std::set<DataflowConn> getOutDataflowConnLinks();
- ///BUP
- bool isMyParentPrimitive();
- std::string className() { return "Signal"; }
- ///EUP
+ <programlisting format="linespecific">class SignalImpl : public AtomImpl
+{
+public:
+ // connection end getters
+ std::multiset<Signal> getDataflowConnSrcs();
+ std::multiset<Signal> getDataflowConnDsts();
+ // connection link getters
+ std::set<DataflowConn> getDataflowConnLinks();
+ std::set<DataflowConn> getInDataflowConnLinks();
+ std::set<DataflowConn> getOutDataflowConnLinks();
+ ///BUP
+ bool isMyParentPrimitive();
+ std::string className() { return "Signal"; }
+ ///EUP
}; </programlisting>
<para>Furthermore, all FCOs which have attributes will have special
@@ -8535,10 +8535,10 @@
the nearest extended ancestor (<code>Signals</code>). There is a
similar mechanism for connections, too.</para>
- <programlisting format="linespecific">class ProcessingImpl : public BON::ModelImpl
-{
-public:
- std::set<Signal> getInputSignals();
+ <programlisting format="linespecific">class ProcessingImpl : public BON::ModelImpl
+{
+public:
+ std::set<Signal> getInputSignals();
}; </programlisting>
<para>Since FCO (as a stereotype) objects are extended too, and may
@@ -10037,10 +10037,10 @@
<code>self</code> - can be renamed; in this case, <code>self</code>
is not accessible.</para>
- <programlisting format="linespecific">“context” { <contextName> “:” } <typeName> “inv” { <constraintName> } “:”
-<expression>
-e.g.:
-context Person inv DontHaveDogs : ……
+ <programlisting format="linespecific">“context” { <contextName> “:” } <typeName> “inv” { <constraintName> } “:”
+<expression>
+e.g.:
+context Person inv DontHaveDogs : ……
context p : Person inv : …….. </programlisting>
</sect3>
@@ -10065,12 +10065,12 @@
implemented, because so far it has not been a requirement for GME
and UDM.</para>
- <programlisting format="linespecific">“context” { <contextName> “:” } <typeName> “::” <featureName> “(“ {
-<paramName> “:” <paramType> ( “;” <paramName> “:” <paramType> )* } “)” { “:”
-<typeName> } “pre“ { <constraintName> } “:” <expression>
-
-e.g.:
-context Person::GetSalary( month : int ) : real pre ValidMonth : ……
+ <programlisting format="linespecific">“context” { <contextName> “:” } <typeName> “::” <featureName> “(“ {
+<paramName> “:” <paramType> ( “;” <paramName> “:” <paramType> )* } “)” { “:”
+<typeName> } “pre“ { <constraintName> } “:” <expression>
+
+e.g.:
+context Person::GetSalary( month : int ) : real pre ValidMonth : ……
context p : Person::CheckOut() pre : …….. </programlisting>
</sect3>
@@ -10100,12 +10100,12 @@
implemented, because so far it has not been a requirement for GME
and UDM.</para>
- <programlisting format="linespecific">“context” { <contextName> “:” } <typeName> “::” <featureName> “(“ {
-<paramName> “:” <paramType> ( “;” <paramName> “:” <paramType> )* } “)” { “:”
-<typeName> } “post“ { <constraintName> } “:” <expression>
-
-e.g.:
-context Person::GetSalary( month : int ) : real post ValidSalary : ……
+ <programlisting format="linespecific">“context” { <contextName> “:” } <typeName> “::” <featureName> “(“ {
+<paramName> “:” <paramType> ( “;” <paramName> “:” <paramType> )* } “)” { “:”
+<typeName> } “post“ { <constraintName> } “:” <expression>
+
+e.g.:
+context Person::GetSalary( month : int ) : real post ValidSalary : ……
context p : Person::CheckIn() post : …….. </programlisting>
</sect3>
@@ -10126,10 +10126,10 @@
attributes of the type, or roles and names of types, which can be
accessed through navigation.</para>
- <programlisting format="linespecific">“context” <typeName> “::” <attributeName> “:” <typeName> “defattribute“ “:”
-<expression>
-
-e.g.:
+ <programlisting format="linespecific">“context” <typeName> “::” <attributeName> “:” <typeName> “defattribute“ “:”
+<expression>
+
+e.g.:
context Person::friendNames : Set defattribute : …… </programlisting>
</sect3>
</sect2>
@@ -10299,21 +10299,21 @@
<code>true</code>, assuming that there is a variable
<code>var</code> initialized with 5.</para>
- <programlisting format="linespecific">let var = 5 in
-…..
-var.oclAsType( “ocl::Any” ) = var.oclAsType( “ocl::Any” ) -- 1. Standard way
-to test identity
-var.oclAsType( “ocl::Any” ) == var.oclAsType( “ocl::Any” ) -- 2. Redundant,
-complex, but valid expression, same as 1.
-var == var -- 3. Same as 1, short and
-compact form of 1.
-not var != var -- 4. Meaning of operator !=
-var != 5 -- 5. Because 5 is stored in
-different memory space as var’s value
-var = 5 -- 6. Equality of integers
-not var <> 5 -- 7. Non-equality of
-integers
-5 != 5 -- 8. Two fives are in
+ <programlisting format="linespecific">let var = 5 in
+…..
+var.oclAsType( “ocl::Any” ) = var.oclAsType( “ocl::Any” ) -- 1. Standard way
+to test identity
+var.oclAsType( “ocl::Any” ) == var.oclAsType( “ocl::Any” ) -- 2. Redundant,
+complex, but valid expression, same as 1.
+var == var -- 3. Same as 1, short and
+compact form of 1.
+not var != var -- 4. Meaning of operator !=
+var != 5 -- 5. Because 5 is stored in
+different memory space as var’s value
+var = 5 -- 6. Equality of integers
+not var <> 5 -- 7. Non-equality of
+integers
+5 != 5 -- 8. Two fives are in
different memory spaces. </programlisting>
<para>During the evaluation of an OCL expression, none of the
@@ -10346,13 +10346,13 @@
<para>Because basic primitive types are well-known, their literals
are discussed through examples.</para>
- <programlisting format="linespecific">“string”, “\r\n: <CR><LF>”, “” -- String literals
-0.0, -1.0, 5.232, -234.232 -- Real literals (reals are represented
-as 64bit long signed floating-point numbers)
-0, -1, 5, 2131 -- Integer literals (integers are
-represented as 64bit long signed integer numbers)
-#enabled, #disabled, #unknown -- Enumeration literals (enumeration values
-begins with # character)
+ <programlisting format="linespecific">“string”, “\r\n: <CR><LF>”, “” -- String literals
+0.0, -1.0, 5.232, -234.232 -- Real literals (reals are represented
+as 64bit long signed floating-point numbers)
+0, -1, 5, 2131 -- Integer literals (integers are
+represented as 64bit long signed integer numbers)
+#enabled, #disabled, #unknown -- Enumeration literals (enumeration values
+begins with # character)
true, false -- Boolean literals </programlisting>
<para>Compound types’ literals are a bit more complex than primitive
@@ -10370,9 +10370,9 @@
<code>ocl::Set</code>, <code>Bag</code>, <code>ocl::Bag</code>,
<code>Sequence</code>, <code>ocl::Sequence</code>.</para>
- <programlisting format="linespecific"><compoundType> “{“ { <expression> ( “,” <expression> )* } “}”
-
-e.g.
+ <programlisting format="linespecific"><compoundType> “{“ { <expression> ( “,” <expression> )* } “}”
+
+e.g.
Sequence{ 0, 1, 2, “23”, true } </programlisting>
</sect3>
@@ -10395,10 +10395,10 @@
<para>Let expression may have a type declaration, as well.</para>
- <programlisting format="linespecific">“let” <variableName> { “:“ <declarationType> } “=” <expression> “in”
-<expression>
-
-e.g. in GME
+ <programlisting format="linespecific">“let” <variableName> { “:“ <declarationType> } “=” <expression> “in”
+<expression>
+
+e.g. in GME
let dogs = persons.connectedFCOs( “src”, “Partners” ) in ……… </programlisting>
</sect3>
@@ -10426,9 +10426,9 @@
first expression will be evaluated; otherwise, only the second will
be evaluated.</para>
- <programlisting format="linespecific">“if” <condition> “then” <expression> “else” <expression> “endif”
-
-e.g.
+ <programlisting format="linespecific">“if” <condition> “then” <expression> “else” <expression> “endif”
+
+e.g.
if mySet -> isEmpty() then 0 else mySet -> size endif </programlisting>
</sect3>
@@ -10474,13 +10474,13 @@
<para>These are true only for predefined iterators discussed in a
later section.</para>
- <programlisting format="linespecific"><expression> “->” <iteratorName> “(“ { <declarator> ( “,” <declarator> )* {
-“:” <declarationType> } } “|” <expression> “)”
-
-e.g.
-let mySet = Set { “1”, “2”, “3”, “10” } in
-…
-mySet -> forAll( elem1, elem2 : int | elem1 <> elem2 )
+ <programlisting format="linespecific"><expression> “->” <iteratorName> “(“ { <declarator> ( “,” <declarator> )* {
+“:” <declarationType> } } “|” <expression> “)”
+
+e.g.
+let mySet = Set { “1”, “2”, “3”, “10” } in
+…
+mySet -> forAll( elem1, elem2 : int | elem1 <> elem2 )
mySet -> one( size = 2 ) </programlisting>
<para>Here we discuss only the generic iterator of OCL called
@@ -10496,21 +10496,21 @@
<para><code>Iterate</code> is the foundation of all predefined
iterator.</para>
- <programlisting format="linespecific"><expression> “->” “iterate” “(“ { <declarator> { “:” <declarationType> } “;”
-} <accumulator> { “:” <accumulatorType> } “=” <expression> “|” <expression>
-“)”
-
-e.g.
-let mySet = Set { “1”, “2”, “3”, “10” } in
-
--- Expressing the functionality of “exists” predefined iterator
-mySet -> exists( i | i.size = 2 )
-mySet -> iterate( i ; accu = false | accu or i.size = 2 )
-
--- Expressing the functionality of “isUnique” predefined iterator
-mySet -> isUnique( i | i )
-mySet -> forAll( i1, i2 | i1 != i2 implies i1 <> i2 )
-mySet -> iterate( i1 ; accu1 = true | accu1 and mySet -> iterate( i2 ; accu2
+ <programlisting format="linespecific"><expression> “->” “iterate” “(“ { <declarator> { “:” <declarationType> } “;”
+} <accumulator> { “:” <accumulatorType> } “=” <expression> “|” <expression>
+“)”
+
+e.g.
+let mySet = Set { “1”, “2”, “3”, “10” } in
+
+-- Expressing the functionality of “exists” predefined iterator
+mySet -> exists( i | i.size = 2 )
+mySet -> iterate( i ; accu = false | accu or i.size = 2 )
+
+-- Expressing the functionality of “isUnique” predefined iterator
+mySet -> isUnique( i | i )
+mySet -> forAll( i1, i2 | i1 != i2 implies i1 <> i2 )
+mySet -> iterate( i1 ; accu1 = true | accu1 and mySet -> iterate( i2 ; accu2
= true | accu2 and ( i1 != i2 implies i1 <> i2 ) ) ) </programlisting>
</sect3>
</sect2>
@@ -10630,11 +10630,11 @@
<code>=></code>). They can be useful when the user wants to alter
the process of the evaluation.</para>
- <programlisting format="linespecific"><expression> <binaryOperator> <expression>
-<unaryOperator> <expression>
-
-e.g.
-“This forms” + “ a string”
+ <programlisting format="linespecific"><expression> <binaryOperator> <expression>
+<unaryOperator> <expression>
+
+e.g.
+“This forms” + “ a string”
not person.isRetired() </programlisting>
</sect3>
@@ -10668,9 +10668,9 @@
<para>There are some predefined functions in OCL, in particularly
for <code>ocl::Real</code> and <code>ocl::Integer</code>.</para>
- <programlisting format="linespecific"><functionName> “(“ { <expression> ( “,” <expression> )* } “)”
-
-e.g.
+ <programlisting format="linespecific"><functionName> “(“ { <expression> ( “,” <expression> )* } “)”
+
+e.g.
floor( 3.14 ) </programlisting>
</sect3>
@@ -10696,14 +10696,14 @@
if and only if the object contained by the compound object has
them.</para>
- <programlisting format="linespecific"><expression> ( “.“ | “->” ) <attributeName>
-
--- Assuming that there is a Set mySet which consists objects with type Person
-(Person has an attribute, called age)
--- The result is the same in both cases (a Bag consisting integers - age of
-persons)
-
-mySet -> collect( person : Person | person.name )
+ <programlisting format="linespecific"><expression> ( “.“ | “->” ) <attributeName>
+
+-- Assuming that there is a Set mySet which consists objects with type Person
+(Person has an attribute, called age)
+-- The result is the same in both cases (a Bag consisting integers - age of
+persons)
+
+mySet -> collect( person : Person | person.name )
mySet -> name </programlisting>
<para>In some circumstances, attributes of the compound object and
@@ -10735,10 +10735,10 @@
case the member selection operator will be used to call either the
method or the iterator.</para>
- <programlisting format="linespecific"><expression> ( “.” | “->” ) <methodName> “(“ { <expression> ( “,”
-<expression> )* } “)”
-
-e.g.
+ <programlisting format="linespecific"><expression> ( “.” | “->” ) <methodName> “(“ { <expression> ( “,”
+<expression> )* } “)”
+
+e.g.
object.isUndefined( ) </programlisting>
</sect3>
@@ -10792,7 +10792,7 @@
may lead to errors in those implementations, because they follow the
strict rules of OCL.</para>
- <programlisting format="linespecific"><expression> “.” <roleName>
+ <programlisting format="linespecific"><expression> “.” <roleName>
<expression> “.” <typeName> { “[“ <roleName> “]” } </programlisting>
<para>Here are some examples to facilitate the understanding of
@@ -10809,57 +10809,57 @@
<para>Regarding these parts of a paradigm, the following OCL
expression can be written:</para>
- <programlisting format="linespecific">-- Assuming that “b” is a Box, “bc” is a BoxContainment
--- If Box had further association, which has “elements” or “container” roles,
-then these roles could not be used because of ambiguity.
-
--- Cannot be used in any cases because of recursive containment.
- b.box
+ <programlisting format="linespecific">-- Assuming that “b” is a Box, “bc” is a BoxContainment
+-- If Box had further association, which has “elements” or “container” roles,
+then these roles could not be used because of ambiguity.
+
+-- Cannot be used in any cases because of recursive containment.
+ b.box
-- Returns in ocl::Set( Box ). If “elements” was missing, that association-
-end would not be accessible from Box.
- b.elements
--- Returns in Box. If “container” was missing, that association-end would not
-be accessible from Box.
- b.container
--- Cannot be used in any cases because of recursive containment.
- b.boxContainment
--- Returns in ocl::Set( BoxContainment ). If “container” was missing, that
-association-class would not be accessible from Box as container.
- b.boxContainment[ container ]
+end would not be accessible from Box.
+ b.elements
+-- Returns in Box. If “container” was missing, that association-end would not
+be accessible from Box.
+ b.container
+-- Cannot be used in any cases because of recursive containment.
+ b.boxContainment
+-- Returns in ocl::Set( BoxContainment ). If “container” was missing, that
+association-class would not be accessible from Box as container.
+ b.boxContainment[ container ]
-- Returns in BoxContainment. If “elements” was missing, that association-
-class would not be accessible from Box as element.
- b.boxContainment[ elements ]
--- Cannot be used in any cases because of recursive containment.
- bc.box
--- Returns in Box. If “elements” was missing, that association-end would not
-be accessible from BoxContainment.
- bc.elements
--- Returns in Box. If “container” was missing, that association-end would not
-be accessible from BoxContainment.
+class would not be accessible from Box as element.
+ b.boxContainment[ elements ]
+-- Cannot be used in any cases because of recursive containment.
+ bc.box
+-- Returns in Box. If “elements” was missing, that association-end would not
+be accessible from BoxContainment.
+ bc.elements
+-- Returns in Box. If “container” was missing, that association-end would not
+be accessible from BoxContainment.
bc.container
--- Assuming that “p” is a Person, “d” is a Dog, “hd” is a HasDog
--- If Person, Dog, HasDog had further association, which has “owner” or
-“dogs” roles, then these roles could not be used because of ambiguity.
--- If these classes have further association between them, then the name of
-the appropriate classes cannot be used as role.
--- If role exists, then the role has to be used to navigate, otherwise the
-name of class has to be used.
-
--- Returns in ocl::Set( Dog ).
- p.dogs
- p.dog
--- Returns in Person.
- d.owner
- d.person
--- Returns in ocl::Set( HasDog ).
- p.hasDog
--- Returns in HasDog.
- d.hasDog
--- Returns in Dog.
- hd.dogs
- hd.dog
--- Returns in Person.
- hd.owner
+-- Assuming that “p” is a Person, “d” is a Dog, “hd” is a HasDog
+-- If Person, Dog, HasDog had further association, which has “owner” or
+“dogs” roles, then these roles could not be used because of ambiguity.
+-- If these classes have further association between them, then the name of
+the appropriate classes cannot be used as role.
+-- If role exists, then the role has to be used to navigate, otherwise the
+name of class has to be used.
+
+-- Returns in ocl::Set( Dog ).
+ p.dogs
+ p.dog
+-- Returns in Person.
+ d.owner
+ d.person
+-- Returns in ocl::Set( HasDog ).
+ p.hasDog
+-- Returns in HasDog.
+ d.hasDog
+-- Returns in Dog.
+ hd.dogs
+ hd.dog
+-- Returns in Person.
+ hd.owner
hd.person </programlisting>
</sect3>
@@ -10910,59 +10910,59 @@
declared last is examined first). If a feature is resolved (even if
it is ambiguous), then resolution is stopped.</para>
- <programlisting format="linespecific">-- Assuming that “Person” and “Dog” are defined by the paradigm. They have an
-association called “HasDog” with roles “owner” and “dogs”.
--- Both classes have an attribute called “age”. Person has an attribute
-called “gender”.
-
--- First “age” is resolved as “self.age”, because there is only one implicit
-variable called “self”.
--- “dogs” is resolved as “self.dogs”, because there is only one implicit
-variable called “self”.
--- Iterator called “forAll” creates a new implicit variable. We refers to
-that as “iter1”. These variables are not accessible in the expression
-directly.
--- “gender” is resolved “self.gender”, because “iter1” which is a Dog, does
-not have any feature called “gender”.
--- Second and third “age” is resolved as “iter1.age”, because “iter1” is
-defined latter than “self”, i.e. the examination started with “iter1”.
--- “owner” is resolved as if it had been written “iter1.owner” where iter1 is
-an implicit declarator created by the iterator
- context Person inv :
- age < 4 implies dogs -> forAll( if gender = #male then age < 1 else age <
+ <programlisting format="linespecific">-- Assuming that “Person” and “Dog” are defined by the paradigm. They have an
+association called “HasDog” with roles “owner” and “dogs”.
+-- Both classes have an attribute called “age”. Person has an attribute
+called “gender”.
+
+-- First “age” is resolved as “self.age”, because there is only one implicit
+variable called “self”.
+-- “dogs” is resolved as “self.dogs”, because there is only one implicit
+variable called “self”.
+-- Iterator called “forAll” creates a new implicit variable. We refers to
+that as “iter1”. These variables are not accessible in the expression
+directly.
+-- “gender” is resolved “self.gender”, because “iter1” which is a Dog, does
+not have any feature called “gender”.
+-- Second and third “age” is resolved as “iter1.age”, because “iter1” is
+defined latter than “self”, i.e. the examination started with “iter1”.
+-- “owner” is resolved as if it had been written “iter1.owner” where iter1 is
+an implicit declarator created by the iterator
+ context Person inv :
+ age < 4 implies dogs -> forAll( if gender = #male then age < 1 else age <
0.5 endif ) </programlisting>
- <programlisting format="linespecific">-- Assuming that “Box” is defined by the paradigm. Box has a containment with
-roles “container” and “elements”.
--- Box has a query method called “includes” with one argument with type Box.
--- The example does not make sense, it demonstrates the resolution only.
-
--- First “elements” is resolved as “self.elements”, because there is only one
-implicit variable called “self”.
--- Iterator called “collect” creates a new variable. We refers to that as
-“iter1”. These variables are not accessible in the expression directly.
--- Second “elements” is resolved as “iter1.elements”, because “iter1”
-precedes “self” during the resolution, and it is a Box.
--- Type of “boxes” will be ocl::Bag( ocl::Set( Box ) ).
--- In the third line “boxes” and “self” are not subject of resolution because
-they are known variables.
--- Iterator called “forAll” creates a new implicit variable. We refers to
-that as “iter1”. Former “iter1” exists in the context of “collect” only.
--- First “includes” resolved as “iter1.includes( ocl::Any )”, because type of
-“iter1” is ocl::Set( Box ), and ocl::Set has a method called “includes”.
--- Iterator called “exists” creates a new implicit variable. We refers to
-that as “iter1”. Former “iter1” exists in the context of “forAll” only.
--- “one” is resolved as “iter1.one( ocl::Boolean ), because type of “iter1”
-is ocl::Set( Box ), and ocl::Set has an iterator called “one”.
--- The resolved iterator called “one” creates a new implicit variable. We
-refers to that as “iter2”.
--- Second “includes” resolved as “iter2.includes( Box )”, because “iter2”
-precedes “iter1” and the type of “iter2” is Box.
--- “size” is resolved as “iter1.size”, because the type of “iter2” (Box) does
-not have any feature called “size”, but “iter1”.
- context Box inv :
- let boxes = self.elements -> collect( iter1.elements ) in
- boxes -> forAll( not includes( self ) ) and boxes -> exists( one(
+ <programlisting format="linespecific">-- Assuming that “Box” is defined by the paradigm. Box has a containment with
+roles “container” and “elements”.
+-- Box has a query method called “includes” with one argument with type Box.
+-- The example does not make sense, it demonstrates the resolution only.
+
+-- First “elements” is resolved as “self.elements”, because there is only one
+implicit variable called “self”.
+-- Iterator called “collect” creates a new variable. We refers to that as
+“iter1”. These variables are not accessible in the expression directly.
+-- Second “elements” is resolved as “iter1.elements”, because “iter1”
+precedes “self” during the resolution, and it is a Box.
+-- Type of “boxes” will be ocl::Bag( ocl::Set( Box ) ).
+-- In the third line “boxes” and “self” are not subject of resolution because
+they are known variables.
+-- Iterator called “forAll” creates a new implicit variable. We refers to
+that as “iter1”. Former “iter1” exists in the context of “collect” only.
+-- First “includes” resolved as “iter1.includes( ocl::Any )”, because type of
+“iter1” is ocl::Set( Box ), and ocl::Set has a method called “includes”.
+-- Iterator called “exists” creates a new implicit variable. We refers to
+that as “iter1”. Former “iter1” exists in the context of “forAll” only.
+-- “one” is resolved as “iter1.one( ocl::Boolean ), because type of “iter1”
+is ocl::Set( Box ), and ocl::Set has an iterator called “one”.
+-- The resolved iterator called “one” creates a new implicit variable. We
+refers to that as “iter2”.
+-- Second “includes” resolved as “iter2.includes( Box )”, because “iter2”
+precedes “iter1” and the type of “iter2” is Box.
+-- “size” is resolved as “iter1.size”, because the type of “iter2” (Box) does
+not have any feature called “size”, but “iter1”.
+ context Box inv :
+ let boxes = self.elements -> collect( iter1.elements ) in
+ boxes -> forAll( not includes( self ) ) and boxes -> exists( one(
includes( self ) or size = 0 ) ) </programlisting>
</sect3>
@@ -11216,7 +11216,7 @@
<sect3>
<title>Operators</title>
- <para><programlisting format="linespecific">operator[ == ]( any1 : ocl::Any , any2 : ocl::Any ) : ocl::Boolean
+ <para><programlisting format="linespecific">operator[ == ]( any1 : ocl::Any , any2 : ocl::Any ) : ocl::Boolean
operator[ = ]( any1 : ocl::Any , any2 : ocl::Any ) : ocl::Boolean </programlisting>Returns
<code>true</code> if <code>any1</code> is the same as
<code>any2</code>. This equality means identity. <code>any1</code>
@@ -11225,7 +11225,7 @@
<code>false</code>; if both of them are <code>undefined</code>, the
result is <code>true</code>.</para>
- <para><programlisting format="linespecific">operator[ != ]( any1 : ocl::Any , any2 : ocl::Any ) : ocl::Boolean
+ <para><programlisting format="linespecific">operator[ != ]( any1 : ocl::Any , any2 : ocl::Any ) : ocl::Boolean
operator[ <> ]( any1 : ocl::Any , any2 : ocl::Any ) : ocl::Boolean </programlisting>Returns
<code>true</code> if <code>any1</code> is not the same as
<code>any2</code>. This equality means identity. <code>any1</code>
@@ -11394,7 +11394,7 @@
<code>true</code> if <code>enum1</code> is the same value as
<code>enum2</code>.</para>
- <para><programlisting format="linespecific">operator[ <> ]( enum1 : ocl::Enumeration , enum2 : ocl::Enumeration ) :
+ <para><programlisting format="linespecific">operator[ <> ]( enum1 : ocl::Enumeration , enum2 : ocl::Enumeration ) :
ocl::Boolean </programlisting>Returns <code>true</code> if <code>enum1</code>
is not the same value as <code>enum2</code>.</para>
</sect3>
@@ -11424,7 +11424,7 @@
<code>true</code> if <code>bool1</code> does not equal to
<code>bool2</code>.</para>
- <para><programlisting format="linespecific">operator[ and ]( bool1 : ocl::Boolean , enum2 : ocl::Boolean ) : ocl::Boolean
+ <para><programlisting format="linespecific">operator[ and ]( bool1 : ocl::Boolean , enum2 : ocl::Boolean ) : ocl::Boolean
operator[ && ]( bool1 : ocl::Boolean , bool2 : ocl::Boolean ) : ocl::Boolean </programlisting>Returns
true if <code>bool1</code> and <code>bool2</code> are
<code>true</code>. Returns <code>undefined</code> if
@@ -11433,7 +11433,7 @@
<code>bool1</code> is <code>false</code> or <code>undefined</code>,
<code>bool2</code> will not be evaluated.</para>
- <para><programlisting format="linespecific">operator[ or ]( bool1 : ocl::Boolean , enum2 : ocl::Boolean ) : ocl::Boolean
+ <para><programlisting format="linespecific">operator[ or ]( bool1 : ocl::Boolean , enum2 : ocl::Boolean ) : ocl::Boolean
operator[ || ]( bool1 : ocl::Boolean , bool2 : ocl::Boolean ) : ocl::Boolean </programlisting>Returns
<code>true</code> if <code>bool1</code> or <code>bool2</code> are
true. Returns <code>undefined</code> if <code>bool1</code> and
@@ -11441,7 +11441,7 @@
||</code> is a short-circuit operator. If <code>bool1</code> is
<code>true</code>, <code>bool2</code> will not be evaluated.</para>
- <para><programlisting format="linespecific">operator[ implies ]( bool1 : ocl::Boolean , enum2 : ocl::Boolean ) : ocl::Boolean
+ <para><programlisting format="linespecific">operator[ implies ]( bool1 : ocl::Boolean , enum2 : ocl::Boolean ) : ocl::Boolean
operator[ => ]( bool1 : ocl::Boolean , bool2 : ocl::Boolean ) : ocl::Boolean </programlisting>Returns
<code>true</code> if <code>bool1</code> is <code>false</code> or if
both operands are <code>true</code>. Returns <code>undefined</code>
@@ -11836,7 +11836,7 @@
<code>set1</code> contains at least one element that
<code>set2</code> does not.</para>
- <para><programlisting format="linespecific">operator[ + ]( set1 : ocl::Set , set2 : ocl::Set ) : ocl::Set
+ <para><programlisting format="linespecific">operator[ + ]( set1 : ocl::Set , set2 : ocl::Set ) : ocl::Set
operator[ + ]( set : ocl::Set , bag : ocl::Bag ) : ocl::Bag </programlisting>Returns
the union of <code>set1</code> and <code>set2</code>, or
<code>set</code> and <code>bag</code>.</para>
@@ -11845,7 +11845,7 @@
a <code>set</code>, which contains all elements that are contained
in <code>set</code> but not in <code>collection</code>.</para>
- <para><programlisting format="linespecific">operator[ * ]( set1 : ocl::Set , set2 : ocl::Set ) : ocl::Set
+ <para><programlisting format="linespecific">operator[ * ]( set1 : ocl::Set , set2 : ocl::Set ) : ocl::Set
operator[ * ]( set : ocl::Set , bag : ocl::Bag ) : ocl::Set </programlisting>Returns
the intersection of <code>set1</code> and <code>set2</code>, or
<code>set</code> and <code>bag</code>.</para>
@@ -11858,7 +11858,7 @@
<sect3>
<title>Methods</title>
- <para><programlisting format="linespecific">ocl::Set::union( set : ocl::Set ) : ocl::Set
+ <para><programlisting format="linespecific">ocl::Set::union( set : ocl::Set ) : ocl::Set
ocl::Set::union( bag : ocl::Bag ) : ocl::Bag </programlisting>Returns the
union of the <code>set</code> and <code>set</code> or
<code>bag</code>.</para>
@@ -11867,7 +11867,7 @@
a <code>set</code> which contains all elements that are contained in
set but not in <code>collection</code>.</para>
- <para><programlisting format="linespecific">ocl::Set::intersection( set : ocl::Set ) : ocl::Set
+ <para><programlisting format="linespecific">ocl::Set::intersection( set : ocl::Set ) : ocl::Set
ocl::Set::intersection( bag : ocl::Bag ) : ocl::Set </programlisting>Returns
the intersection of the <code>set</code> and <code>set</code> or
<code>bag</code>.</para>
@@ -11914,12 +11914,12 @@
<code>bag2</code> does not contain all elements of <code>bag1</code>
with the same counts.</para>
- <para><programlisting format="linespecific">operator[ + ]( bag : ocl::Bag , set : ocl::Set ) : ocl::Set
+ <para><programlisting format="linespecific">operator[ + ]( bag : ocl::Bag , set : ocl::Set ) : ocl::Set
operator[ + ]( bag1 : ocl::Bag , bag2 : ocl::Bag ) : ocl::Bag </programlisting>Returns
the union of <code>bag</code> and <code>set</code>, or
<code>bag1</code> and <code>bag2</code>.</para>
- <para><programlisting format="linespecific">operator[ * ]( bag : ocl::Bag , set : ocl::Set ) : ocl::Set
+ <para><programlisting format="linespecific">operator[ * ]( bag : ocl::Bag , set : ocl::Set ) : ocl::Set
operator[ * ]( bag1 : ocl::Bag , bag2 : ocl::Bag ) : ocl::Bag </programlisting>Returns
the intersection of <code>bag</code> and <code>set</code>, or
<code>bag1</code> and <code>bag2</code>.</para>
@@ -11928,11 +11928,11 @@
<sect3>
<title>Methods</title>
- <para><programlisting format="linespecific">ocl::Bag::union( set : ocl::Set ) : ocl::Bag
+ <para><programlisting format="linespecific">ocl::Bag::union( set : ocl::Set ) : ocl::Bag
ocl::Bag::union( bag : ocl::Bag ) : ocl::Bag </programlisting>Returns the
union of the bag and <code>set</code> or <code>bag</code>.</para>
- <para><programlisting format="linespecific">ocl::Bag::intersection( set : ocl::Set ) : ocl::Set
+ <para><programlisting format="linespecific">ocl::Bag::intersection( set : ocl::Set ) : ocl::Set
ocl::Bag::intersection( bag : ocl::Bag ) : ocl::Bag </programlisting>Returns
the intersection of the bag and <code>set</code> or
<code>bag</code>.</para>
@@ -12181,7 +12181,7 @@
a <code>set</code> which contains all fcos which are root objects of
the folder.</para>
- <para><programlisting format="linespecific">gme::Folder::models( { kind : ocl::String } ) : ocl::Set( gme::Model ) (D)
+ <para><programlisting format="linespecific">gme::Folder::models( { kind : ocl::String } ) : ocl::Set( gme::Model ) (D)
gme::Folder::models( { kind : ocl::Type } ) : ocl::Set( gme::Model ) </programlisting>Returns
a <code>set</code> which contains all models contained by the folder
or by any child folder or model that the folder contains
@@ -12192,7 +12192,7 @@
<code>gme::Model</code>, then an exception is thrown and
<code>undefined</code> is returned.</para>
- <para><programlisting format="linespecific">gme::Folder::atoms( { kind : ocl::String } ) : ocl::Set( gme::Atom ) (D)
+ <para><programlisting format="linespecific">gme::Folder::atoms( { kind : ocl::String } ) : ocl::Set( gme::Atom ) (D)
gme::Folder::atoms( { kind : ocl::Type } ) : ocl::Set( gme::Atom ) </programlisting>Returns
a <code>set</code> which contains all atoms contained by the folder,
or by any child folder or model that the folder contains
@@ -12239,11 +12239,11 @@
method has the same functionality as
<code>gme::FCO::roleName</code>.</para>
- <para><programlisting format="linespecific">gme::FCO::connected( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::FCO ) (D)
-gme::FCO::connectedFCOs( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::FCO ) (D)
-gme::FCO::connectedFCOs( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Set( gme::FCO )
-gme::FCO::connectedFCOs( kind : ocl::Type ) : ocl::Set( gme::FCO )
-gme::FCO::bagConnectedFCOs( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Bag( gme::FCO )
+ <para><programlisting format="linespecific">gme::FCO::connected( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::FCO ) (D)
+gme::FCO::connectedFCOs( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::FCO ) (D)
+gme::FCO::connectedFCOs( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Set( gme::FCO )
+gme::FCO::connectedFCOs( kind : ocl::Type ) : ocl::Set( gme::FCO )
+gme::FCO::bagConnectedFCOs( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Bag( gme::FCO )
gme::FCO::bagConnectedFCOs( kind : ocl::Type ) : ocl::Bag( gme::FCO ) </programlisting>Returns
a <code>set</code> or a <code>bag</code> which contains all fcos
that are associated with the fco. If role is specified, then it
@@ -12255,11 +12255,11 @@
<code>gme::Connection</code>, then an exception is thrown and
<code>undefined</code> is returned.</para>
- <para><programlisting format="linespecific">gme::FCO::connectedAs( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::FCO ) (D)
-gme::FCO::reverseConnectedFCOs( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::FCO ) (D)
-gme::FCO::reverseConnectedFCOs( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Set( gme::FCO )
-gme::FCO::reverseConnectedFCOs( kind : ocl::Type ) : ocl::Set( gme::FCO )
-gme::FCO::bagReverseConnectedFCOs( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Bag( gme::FCO )
+ <para><programlisting format="linespecific">gme::FCO::connectedAs( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::FCO ) (D)
+gme::FCO::reverseConnectedFCOs( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::FCO ) (D)
+gme::FCO::reverseConnectedFCOs( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Set( gme::FCO )
+gme::FCO::reverseConnectedFCOs( kind : ocl::Type ) : ocl::Set( gme::FCO )
+gme::FCO::bagReverseConnectedFCOs( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Bag( gme::FCO )
gme::FCO::bagReverseConnectedFCOs( kind : ocl::Type ) : ocl::Bag( gme::FCO ) </programlisting>Returns
a <code>set</code> or a <code>bag</code> which contains all fcos
that are associated with this fco. If <code>role</code> is
@@ -12271,8 +12271,8 @@
gme::Connection, then an exception is thrown and
<code>undefined</code> is returned.</para>
- <para><programlisting format="linespecific">gme::FCO::attachingConnPoints ( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::ConnectionPoint ) (D)
-gme::FCO::attachingConnPoints ( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Set( gme::ConnectionPoint )
+ <para><programlisting format="linespecific">gme::FCO::attachingConnPoints ( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::ConnectionPoint ) (D)
+gme::FCO::attachingConnPoints ( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Set( gme::ConnectionPoint )
gme::FCO::attachingConnPoints ( kind : ocl::Type ) : ocl::Set( gme::ConnectionPoint ) </programlisting>Returns
a <code>set</code> which contains all connection points (association
ends) of the fco. If <code>role</code> is specified, then the role
@@ -12284,8 +12284,8 @@
<code>gme::Connection</code>, then an exception is thrown and
<code>undefined</code> is returned.</para>
- <para><programlisting format="linespecific">gme::FCO::attachingConnections ( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::Connection ) (D)
-gme::FCO::attachingConnections ( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Set( gme::Connection )
+ <para><programlisting format="linespecific">gme::FCO::attachingConnections ( { role : ocl::String {, kind : ocl::String } } ) : ocl::Set( gme::Connection ) (D)
+gme::FCO::attachingConnections ( { role : ocl::String {, kind : ocl::Type } } ) : ocl::Set( gme::Connection )
gme::FCO::attachingConnections ( kind : ocl::Type ) : ocl::Set( gme::Connection ) </programlisting>Returns
a <code>set</code> which contains all connections (instances of
association class) that is a link of the fco. If <code>role</code>
@@ -12298,8 +12298,8 @@
<code>gme::Connection</code>, then an exception is thrown and
<code>undefined</code> is returned.</para>
- <para><programlisting format="linespecific">gme::FCO::isConnectedTo ( fco : gme::FCO {, role : ocl::String {, kind : ocl::String } } ) : ocl::Boolean (D)
-gme::FCO::isConnectedTo ( fco : gme::FCO {, role : ocl::String {, kind : ocl::Type } } ) : ocl::Boolean
+ <para><programlisting format="linespecific">gme::FCO::isConnectedTo ( fco : gme::FCO {, role : ocl::String {, kind : ocl::String } } ) : ocl::Boolean (D)
+gme::FCO::isConnectedTo ( fco : gme::FCO {, role : ocl::String {, kind : ocl::Type } } ) : ocl::Boolean
gme::FCO::isConnectedTo ( fco : gme::FCO, kind : ocl::Type ) : ocl::Boolean </programlisting>Returns
<code>true</code> if <code>fco</code> is connected to the fco. If
<code>role</code> is specified, then the role of fco has to match
@@ -12336,7 +12336,7 @@
the closest folder which contains this fco recursively over
models.</para>
- <para><programlisting format="linespecific">gme::FCO::referencedBy( { kind : ocl::String } ) : ocl::Set( gme::Reference ) (D)
+ <para><programlisting format="linespecific">gme::FCO::referencedBy( { kind : ocl::String } ) : ocl::Set( gme::Reference ) (D)
gme::FCO::referencedBy( { kind : ocl::Type } ) : ocl::Set( gme::Reference ) </programlisting>Returns
a <code>set</code> of <code>reference</code>s which refer to this
fco. If <code>kind</code> is specified, then only those references
@@ -12346,7 +12346,7 @@
<code>gme::Reference</code>, then an exception is thrown and
<code>undefined</code> is returned.</para>
- <para><programlisting format="linespecific">gme::FCO::memberOfSets( { kind : ocl::String } ) : ocl::Set( gme::Set ) (D)
+ <para><programlisting format="linespecific">gme::FCO::memberOfSets( { kind : ocl::String } ) : ocl::Set( gme::Set ) (D)
gme::FCO::memberOfSets( { kind : ocl::Type } ) : ocl::Set( gme::Set ) </programlisting>Returns
a <code>set</code> of <code>set</code>s of GME that contains this
fco. If <code>kind</code> is specified, then only those sets of GME
@@ -12375,7 +12375,7 @@
<sect3>
<title>Methods</title>
- <para><programlisting format="linespecific">gme::Connection::connectionPoints( { role : ocl::String } ) : ocl::Set( gme::ConnectionPoint )
+ <para><programlisting format="linespecific">gme::Connection::connectionPoints( { role : ocl::String } ) : ocl::Set( gme::ConnectionPoint )
gme::Connection::connectionPoint( role : ocl::String ) : gme::ConnectionPoint </programlisting>The
first call returns a <code>set</code> of connection points
(association ends) of the connection. If <code>role</code> is
@@ -12401,7 +12401,7 @@
<sect3>
<title>Methods</title>
- <para><programlisting format="linespecific">gme::Reference::usedByConnPoints( { kind : ocl::String } ) : ocl::Set( gme::ConnectionPoint ) (D)
+ <para><programlisting format="linespecific">gme::Reference::usedByConnPoints( { kind : ocl::String } ) : ocl::Set( gme::ConnectionPoint ) (D)
gme::Reference::usedByConnPoints( { kind : ocl::Type } ) : ocl::Set( gme::ConnectionPoint ) </programlisting>Returns
a <code>set</code> of connection points (association ends) of the
reference in which the reference participates. With kind, we can
@@ -12472,17 +12472,17 @@
<sect3>
<title>Methods</title>
- <para><programlisting format="linespecific">gme::Model::atomParts( { role : ocl::String } ) : ocl::Set( gme::Atom )
-gme::Model::modelParts( { role : ocl::String } ) : ocl::Set( gme::Model )
-gme::Model::connectionParts( { role : ocl::String } ) : ocl::Set( gme::Connection )
-gme::Model::referenceParts( { role : ocl::String } ) : ocl::Set( gme::Reference )
-gme::Model::setParts( { role : ocl::String } ) : ocl::Set( gme::Set )
-gme::Model::parts( { role : ocl::String } ) : ocl::Set( gme::FCO )
-gme::Model::atomParts( kind : ocl::Type ) : ocl::Set( gme::Atom )
-gme::Model::modelParts( kind : ocl::Type ) : ocl::Set( gme::Model )
-gme::Model::connectionParts( kind : ocl::Type ) : ocl::Set( gme::Connection )
-gme::Model::referenceParts( kind : ocl::Type ) : ocl::Set( gme::Reference )
-gme::Model::setParts( kind : ocl::Type ) : ocl::Set( gme::Set )
+ <para><programlisting format="linespecific">gme::Model::atomParts( { role : ocl::String } ) : ocl::Set( gme::Atom )
+gme::Model::modelParts( { role : ocl::String } ) : ocl::Set( gme::Model )
+gme::Model::connectionParts( { role : ocl::String } ) : ocl::Set( gme::Connection )
+gme::Model::referenceParts( { role : ocl::String } ) : ocl::Set( gme::Reference )
+gme::Model::setParts( { role : ocl::String } ) : ocl::Set( gme::Set )
+gme::Model::parts( { role : ocl::String } ) : ocl::Set( gme::FCO )
+gme::Model::atomParts( kind : ocl::Type ) : ocl::Set( gme::Atom )
+gme::Model::modelParts( kind : ocl::Type ) : ocl::Set( gme::Model )
+gme::Model::connectionParts( kind : ocl::Type ) : ocl::Set( gme::Connection )
+gme::Model::referenceParts( kind : ocl::Type ) : ocl::Set( gme::Reference )
+gme::Model::setParts( kind : ocl::Type ) : ocl::Set( gme::Set )
gme::Model::parts( kind : ocl::Type ) : ocl::Set( gme::FCO ) </programlisting>These
methods return a <code>set</code> which contains the immediate children of the model.</para>
@@ -12498,9 +12498,9 @@
correspond to the method name, then an exception is thrown and
<code>undefined</code> is returned.</para>
- <para><programlisting format="linespecific">gme::Model::models( { kind : ocl::String } ) : ocl::Set( gme::Model ) (D)
-gme::Model::models( { kind : ocl::Type } ) : ocl::Set( gme::Model )
-gme::Model::atoms( { kind : ocl::String } ) : ocl::Set( gme::Atom ) (D)
+ <para><programlisting format="linespecific">gme::Model::models( { kind : ocl::String } ) : ocl::Set( gme::Model ) (D)
+gme::Model::models( { kind : ocl::Type } ) : ocl::Set( gme::Model )
+gme::Model::atoms( { kind : ocl::String } ) : ocl::Set( gme::Atom ) (D)
gme::Model::atoms( { kind : ocl::Type } ) : ocl::Set( gme::Atom ) </programlisting>These
methods have the same functionality as the parts methods have, except these methods return the set of contained objects which are
contained recursively by the model (its immediate children and its
@@ -12528,7 +12528,7 @@
<sect3>
<title>Operators</title>
- <para><programlisting format="linespecific">operator[ = ]( project1 : gme::Project, project2 : gme::Project ) : ocl::Boolean
+ <para><programlisting format="linespecific">operator[ = ]( project1 : gme::Project, project2 : gme::Project ) : ocl::Boolean
operator[ <> ]( project1 : gme::Project, project2 : gme::Project ) : ocl::Boolean </programlisting>These
operators are defined because of consistency. But since there is
only one instance of <code>gme::Project</code> in all projects,
@@ -12599,7 +12599,7 @@
<sect3>
<title>Operators</title>
- <para><programlisting format="linespecific">operator[ = ]( cp1 : gme::ConnectionPoint, cp2 : gme:: ConnectionPoint ) : ocl::Boolean
+ <para><programlisting format="linespecific">operator[ = ]( cp1 : gme::ConnectionPoint, cp2 : gme:: ConnectionPoint ) : ocl::Boolean
operator[ <> ]( cp1 : gme:: ConnectionPoint, cp2 : gme:: ConnectionPoint ) : ocl::Boolean </programlisting>The
first operator returns <code>true</code> if <code>cp1</code> and
<code>cp2</code> have the same role, are attached to the same fco,
Modified: trunk/Doc/GME Manual and User Guide/images/Splsh16.png
==============================================================================
Binary file (source and/or target). No diff available.
Modified: trunk/Doc/README_in.txt
==============================================================================
--- trunk/Doc/README_in.txt Thu Dec 8 13:31:43 2016 (r2658)
+++ trunk/Doc/README_in.txt Thu Jan 26 10:02:54 2017 (r2659)
@@ -1,5 +1,5 @@
Generic Modeling Environment
- Copyright © 2000-2016 Vanderbilt University
+ Copyright © 2000-2017 Vanderbilt University
************************************************
@@ -44,7 +44,7 @@
- Fix hotspots for quick connect mode when scrolled or zoomed
- Component window: fix bug where .NET interpreters with long paths would incorrectly be listed as GAC
- Other bugfixes
-
+
Release Notes of Release 15.5.8
----------------------------------
- Binary compatibility with 11.12.2
@@ -149,7 +149,7 @@
- CSharpComponentWizard: support Visual Studio 2012
- Disable reg-free activation for CCoreCollectionHandler (GME-418)
- Fixed a memory leak in opening MgaMetaProjects
-
+
Release Notes of Release 13.7.10
----------------------------------
- Binary compatibility with 11.12.2
@@ -276,7 +276,7 @@
- Fix display of non-default empty value in Object Inspector
- Fix the IErrorInfo when there's an Mga error under TRANSACTION_NON_NESTED
- Implement Equals and GetHashCode in CSharpDsmlGenerator base class
- - Don't return E_MGA_NOT_DERIVABLE when trying to make an instance of something whose children has an instance
+ - Don't return E_MGA_NOT_DERIVABLE when trying to make an instance of something whose children has an instance
- Open drag-n-dropped .html files in console
Release Notes of Release r12.2.7
@@ -385,36 +385,36 @@
- This is a service release for r10.8.18
Hence, it is binary compatible with that.
- Fixing ObjectInspector bug ("could not write..." error messages)
- - Upgrade to Subversion-1.6.13/OpenSSL-0.9.8o
+ - Upgrade to Subversion-1.6.13/OpenSSL-0.9.8o
compiled with VS2010. Remove GPL neon lib.
- - Fixing several memory leaks in apr/svn
+ - Fixing several memory leaks in apr/svn
- Fixing GME-280: dont throw exceptions beyond the COM boundary
- - Remove internal XmlBackend SVN COM interfaces.
+ - Remove internal XmlBackend SVN COM interfaces.
Remove Multi User>Subversion... dialog
- Remove SVN by CMD access method from MU backend
- Remove ClearCase and SourceSafe support from MU backend
-
-
+
+
Release Notes of Release r10.8.18
---------------------------------
- Fixing GME-281: Crash while closing XML progress dialog
- - Fixing race conditions in the threading logic in the
+ - Fixing race conditions in the threading logic in the
multiuser backend
- Fixing SAFEARRAY ownerhip and allocation strategy in the
multiuser backend
- Fixing multiuser progress window messages (speed locking)
- Adding support for registering .NET components
- - Fixing GME-292: fix crash when a decorator editing operation
+ - Fixing GME-292: fix crash when a decorator editing operation
causes a constraint violation
-
+
Release Notes of Release r10.6.29
---------------------------------
- Fixing GME-287: unhandled exceptions in CCoreXmlFile:ProjectOpen.
- Fixing GME-285: Multiuser project open silently fails
- Inform user which automatic addons failed to start
- - Multiuser backend crash fix: comp. operator for
+ - Multiuser backend crash fix: comp. operator for
std::set did not handle NULL values properly.
Release Notes of Release r10.6.24
@@ -433,16 +433,16 @@
Release Notes of Release r10.6.4
--------------------------------
- - Rolled back breaking COM interface changes.
+ - Rolled back breaking COM interface changes.
Hence, it is binary compatible with r9.8.28 and later.
- New multiuser progress dialog (GME-271)
-
+
Release Notes of Release r10.6.1
--------------------------------
- - This release contains minor changes to the COM interface definitions.
+ - This release contains minor changes to the COM interface definitions.
Please, re-compile existing interpreters, add-ons, decorators
- Fixing GME-270: GUI random crashes with multiuser projects
- - OBJEVENT_PRE_DESTROYED event is introduced in the MGA layer for
+ - OBJEVENT_PRE_DESTROYED event is introduced in the MGA layer for
easier handling of to be deleted objects
- New crash reporting facility (using CrashRpt)
- Fix crash with reference ports when the referee is deleted before the refport
@@ -483,7 +483,7 @@
- This is a service release for r9.8.28
Hence, it is binary compatible with that.
- Fixed bugs: GME-217, GME-225, GME-227, GME-240, GME-241, GME-242
- - Addditional checks in the GUI for non-ASCII characters
+ - Addditional checks in the GUI for non-ASCII characters
(we do not support them)
Release Notes of Release r10.1.11
@@ -501,12 +501,12 @@
Hence, it is binary compatible with that.
- Bugfix: crashes related to automatic unloading of
the Constraint Manager
-
+
Release Notes of Release r9.12.29
---------------------------------
- This is a service release for r9.8.28
Hence, it is binary compatible with that.
- - Bugfix: random crashes while editing labels, crash (exception)
+ - Bugfix: random crashes while editing labels, crash (exception)
handling
Release Notes of Release r9.12.21
@@ -521,13 +521,13 @@
- This is a service release for r9.8.28
Hence, it is binary compatible with that.
- It fixes a bug which prevented the Constraint Manager
- to be disabled
-
+ to be disabled
+
Release Notes of Release r9.11.12
---------------------------------
- This is a service release for r9.8.28 with minor bugfixes
Hence, it is binary compatible with that.
-
+
Release Notes of Release r9.8.28
-------------------------------
- Fixed: decorator in-place edit bug
@@ -535,12 +535,12 @@
Release Notes of Release r9.8.19
-------------------------------
- - GUI uses the DisplayedName property if role name and
+ - GUI uses the DisplayedName property if role name and
kind name matches
- The GME installer automatically uninstalls previous GME
instances
- Removed ModelMigrate tool
-
+
Release Notes of Release r9.8.7
-------------------------------
- User manual update
@@ -550,7 +550,7 @@
- Autorouter and decorator bug fixes.
- Visual Studio Component wizard is (back)ported for
supporting VS2005.
-
+
Release Notes of Release r9.6.16
--------------------------------
- Multiuser backend speed improvements (object
@@ -575,7 +575,7 @@
Release Notes of Release r9.5.8
--------------------------------
- - Subversion client library is updated to 1.6.1 (NOTE:
+ - Subversion client library is updated to 1.6.1 (NOTE:
working directory format is compatible with 1.6.x clients
only)
- Improved performance with multiuser/subversion locking
@@ -610,13 +610,13 @@
--------------------------------
- Subversion backend library is updated to 1.5.5
- New WiX-based installer (instead of the previous InstallShield-based)
- - xml backend crashes when creating new projects are fixed
+ - xml backend crashes when creating new projects are fixed
Release Notes of Release r8.12.22
--------------------------------
- This is an internal release, release notes are not finalized
- - The GME application and all plugins are ported to the Visual Studio 2008
+ - The GME application and all plugins are ported to the Visual Studio 2008
environment
- STLport is not used anymore
- redesigned decorator interface
@@ -627,25 +627,25 @@
Studio (this time only VS2008 is supported, the Express Edition is not)
- the application GUI got a facelift (new MFC classes, more Vista-like look
and feel)
- - Vista UAC is supported when the GUI/interpreters need access to protected
+ - Vista UAC is supported when the GUI/interpreters need access to protected
resources (mostly to the registry)
Release Notes of Release r7.6.29
--------------------------------
-
+
- Resolved bugs GME-155, GME-157: data corrupted/lost
after trying to save the project using an invalid file path.
- Updated UML paradigm: sync with the UDM/GReAT tools
-
+
Release Notes of Release r7.3.26
--------------------------------
- MetaMAid add-on: sets FCOs abstract and fixes potential
errors in specifying inheritance
-
+
- Improved (optimized) library code: if the same library
is included indirectly through multiple other libraries,
GME now merges them into a single copy.
@@ -668,18 +668,18 @@
Model View:
===================================
-Ctrl + 1..8 : switch between modes
-Ctrl + Z, Ctrl + U : Undo/Redo
-Ctrl + F : Search
-Enter: show selected models (down in hier.) or follow selected references
-Backspace: show parent model (up in hier.)
-Ctrl + B : jump to browser (just as Locate command does)
+Ctrl + 1..8 : switch between modes
+Ctrl + Z, Ctrl + U : Undo/Redo
+Ctrl + F : Search
+Enter: show selected models (down in hier.) or follow selected references
+Backspace: show parent model (up in hier.)
+Ctrl + B : jump to browser (just as Locate command does)
Ctrl + I : jump to attribute panel
Z or Alt + Left : back
X or Alt + Right: forward
TAB: cycle aspect for active model
` : cycle aspect for all open models (according to the active model's
-next aspect)
+next aspect)
C : autoconnect element under the cursor (if mouse over object notification enabled)
Ctrl + F6: next window
Numpad + : zoom in by 5%
@@ -690,23 +690,23 @@
==================================
Enter : show fco for Models: it shows a model's internals
Shift + Enter: show fco in parent: shows every fco (models too) in its parent
-TAB: jump to search combo box
-Ctrl + TAB: cycling through Aggregate, Inheritance, Meta Pages
-F2: rename active element
+TAB: jump to search combo box
+Ctrl + TAB: cycling through Aggregate, Inheritance, Meta Pages
+F2: rename active element
Ctrl + I : jump to attribute panel
-Ctrl + Z, Ctrl + U : Undo/Redo
-Ctrl + F : Search
+Ctrl + Z, Ctrl + U : Undo/Redo
+Ctrl + F : Search
Attribute Panel:
===================
TAB: cycle through elements/pages
Ctrl + B: jump to Browser
-Drag & Drop for Files
+Drag & Drop for Files
==========================
-1.Paradigm file (.mta, .xmp): gets registered (only if no project is open)
-2.mga: project file is opened
-3.xme: project file is imported
+1.Paradigm file (.mta, .xmp): gets registered (only if no project is open)
+2.mga: project file is opened
+3.xme: project file is imported
@@ -715,92 +715,92 @@
---------------------------------
- Library feature reimplementation (from scratch)
-
- - Namespace support in Meta and MGA libraries, in the meta interpreter
+
+ - Namespace support in Meta and MGA libraries, in the meta interpreter
for paradigm composition
-
+
- Namespace Config tool added to the distribution
-
+
- New connection end types in the GUI
-
+
- GME Merge tool added to the distribution
-
+
Release Notes of Release r6.5.8
---------------------------------
- Search improvements: resizebale dialog, highlights found objects in the
browser
-
+
- Bugfix: inconsitent titlebar texts
-
- - Bugfix: always enter into rename mode upon new object creation in the
+
+ - Bugfix: always enter into rename mode upon new object creation in the
browser
-
+
- Bugfix: All children (not just models) of folders are shown in the browser
by double clicking it.
-
- - Bugfix: copying sets is fixed (cases where not all members are selected
+
+ - Bugfix: copying sets is fixed (cases where not all members are selected
with the set).
Release Notes of Release r6.3.14
---------------------------------
- - Dispatch compatible method signatures introduced in IDL files
-
- - BON1 improvements: folder can contain other fcos than models
-
- - BON2 default evenlisteners react to all events (bugfix) according
- to documentation
-
- - Console timestamping feature
-
- - Parser gives better location info upon errors, exceptions
-
+ - Dispatch compatible method signatures introduced in IDL files
+
+ - BON1 improvements: folder can contain other fcos than models
+
+ - BON2 default evenlisteners react to all events (bugfix) according
+ to documentation
+
+ - Console timestamping feature
+
+ - Parser gives better location info upon errors, exceptions
+
- Toolbars are now floatable/dockable
-
- - Component icons (on toolbar) are programmable
+
+ - Component icons (on toolbar) are programmable
(enable/disable based on the active model)
-
- - Paradigm files (.xmp , .mta) if dropped on the GME window
+
+ - Paradigm files (.xmp , .mta) if dropped on the GME window
(while no project is opened ) will be registered (in user registry)
-
+
- Non-sticky connection modes added to main toolbar
-
+
- Fix for IGMEOLEApp's usage through Dispatch
-
- - 'View in parent' command (shortcut: Shift + Enter, or Shift + DblClick)
- introduced in ActiveBrowser to select and focus an element in its parent
+
+ - 'View in parent' command (shortcut: Shift + Enter, or Shift + DblClick)
+ introduced in ActiveBrowser to select and focus an element in its parent
(in the editing area)
-
- - Fixed copying of secondary derived references pointing to also
+
+ - Fixed copying of secondary derived references pointing to also
secondary derived objects
-
- - ReadOnly/ReadWrite permission flag can be applied to object hierarchies
- (accessible through the Access menu in the Browser)
-
+
+ - ReadOnly/ReadWrite permission flag can be applied to object hierarchies
+ (accessible through the Access menu in the Browser)
+
- ModelMigrate: new rules: Atom2Model, Model2Atom, Paradigm change
-
+
- ModelMigrate: new feature: automatically generate separate scripts per rules
-
+
- BonExtender: ordering of class declararation fixed
-
- - MetaInterpreter improvement: displayed name may contain special characters,
+
+ - MetaInterpreter improvement: displayed name may contain special characters,
it will be escaped
-
+
- Bond style connection end added to METAGME paradigm
-
- - Content-type attribute added to MetaGME paradigm. Mime type or extension
- (identified by the leading dot) can be specified there. Appropriate editor
- will be invoked as if the user would have initiated Open or Edit action on
+
+ - Content-type attribute added to MetaGME paradigm. Mime type or extension
+ (identified by the leading dot) can be specified there. Appropriate editor
+ will be invoked as if the user would have initiated Open or Edit action on
such a file from Windows Explorer.
-
- - If GMEEditor value is defined in Mime/Database/Content Type/<mimetype>,
+
+ - If GMEEditor value is defined in Mime/Database/Content Type/<mimetype>,
GME will prefer this editor upon editing an attribute with that content type
-
+
- Java BON bugfixes (contributed by Alex Goos)
-
+
- Dispatch support for native OLE drag'n'drop
-
+
- Updated Python component framework (PyGME) (VaNTH/CAPE project contrib.)
http:
@@ -809,12 +809,12 @@
---------------------------------
- Model migration tool added to the distribution. (ModelMigrate.exe)
-
+
Release Notes of Release r5.9.11
---------------------------------
- Updated STLport C++ library resulting performance enhancements.
- - GME is now developed and compiled with Microsoft Visual Studio.NET 2003.
+ - GME is now developed and compiled with Microsoft Visual Studio.NET 2003.
- Reliability improvements in Constraint Manager and in Expression Checker
@@ -845,15 +845,15 @@
---------------------------------
- Metamodelling constraints are added and reviewed
-
+
- XML backend supporting multiuser access added (see: muserdoc.txt)
-
+
- Introduced copy closure feature
-
+
- Java BON bug fixes
-
+
- GME now uses STLport only (in the core layers and in interpreters)
-
+
- OrderedSet datatype is introduced in the Constraint Manager
Release Notes of Release r4.8.25
@@ -862,7 +862,7 @@
- MetaInterpreter: Name selector dialog box for choosing the preferred name in case of equivalent objects.
- UTF-8 encoding introduced for GME exported projects.
-
+
- Folders may be moved, copied in GME projects.
- Selective Closure functionality added.
@@ -876,25 +876,25 @@
- Metainterpreter: In case of equivalent fcos the attribute values are merged (like isAbstract, inRootFolder, ...)
- Console window added to the GUI (accessible from GUI Automation and BON2)
-
+
- Dual interfaces added to the GUI Automation along with C++ wrappers in BON2
-
+
- AutoRouter & Model Grid take care of labels (default turned off in preferences)
-
+
- MGA generates and maintaines GUIDs for projects
-
+
- Introduced version and metaversion project properties (MGA, XML, BON2)
-
+
- Enhanced project properties dialog
-
+
- Attribute Browser displays read-write project properties when RootFolder is selected
-
+
- MetaGME: got rid of ParadigmSheet attributes (project properties are used instead)
-
+
- MgaMetaParser does not generate checksum as GUID, if one is found in the paradigm file
-
+
- Custom versioning for projects and paradigms is introduced (eg.: version column in paradigm dialogs)
-
+
- The old MetaInterpreter became deprecated, hence removed from the installation
Release Notes of Release r4.5.18
@@ -906,15 +906,15 @@
- A new Panning Window assists the user to navigate in huge models
-- The XML parser components of GME are now using Xerces 2.4.0.
+- The XML parser components of GME are now using Xerces 2.4.0.
The redistributed Xerces dll is changed. If you are using
xerces in your project(s), please upgrade to the same version
-
-- The Table Editor now has export/import to/from Excel.
+
+- The Table Editor now has export/import to/from Excel.
As it has always been with the table editor, only the name
and attributes of an FCO should be edited.
-
-
+
+
Bug fixes since r4.3.17:
- Fixed: Attribute panel deterministically made wrong assignments (#GME-52)
@@ -948,35 +948,35 @@
- External text editor support for multiline attributes
-- Periodic autosave feature added (configurable through
+- Periodic autosave feature added (configurable through
the GME settings dialog)
-
+
- Enhanced printing and print preview
- Enhanced logging (under the <USER PROFILE>/Application Data/GME folder)
- Several MetaInterpreter and BonExtender enhancements
-- Application specific notifications can be sent through the MGA layer.
+- Application specific notifications can be sent through the MGA layer.
The XML parser does signal the beginning and the completion of the import process
-
+
Bug fixes since r4.3.2:
-- Copy & paste between different instances of GME now
+- Copy & paste between different instances of GME now
properly handles references, subtypes and sets (BUG #20)
-
+
- Paste to text editors (eg: notepad) does work again (BUG #15)
- BON2 is compatibile with Visual C 7.1 (BUG #23)
-
+
- Major BON2 object factory problems are solved (BUG #16)
Release Notes of Release r4.2.3
--------------------------------
-This release contains the following significant improvements
-over the previous public version:
+This release contains the following significant improvements
+over the previous public version:
- New and redesigned Builder Object Network (BON2)
@@ -987,7 +987,7 @@
Bug fixes since r4.1.8:
-- Redirecting references with draging selfconnected objects
+- Redirecting references with draging selfconnected objects
problem is fixed
- Libraries in the meta environment are now supported by the
@@ -1055,7 +1055,7 @@
Release Notes of Release r3.10.13
---------------------------------
-- New Table Editor plug-in is introduced: to use it, open
+- New Table Editor plug-in is introduced: to use it, open
File/Register Components, select the GME Table Editor, and press
Toggle. Afterwards, it can be launched from the component toolbar
or the File menu/run Plugins command.
@@ -1105,24 +1105,24 @@
Release Notes of Release r3.4.29
--------------------------------
-This is a bugfix release. Copy operations which contain connections
+This is a bugfix release. Copy operations which contain connections
are no longer crashing the GME application. Other small fixes:
-- GME does not update the system registry now, so users without
+- GME does not update the system registry now, so users without
administrative privileges will not encounter warning messages
- Decorkit COM macros are updated
-- Small visualization problems (type/instance) are fixed in the
+- Small visualization problems (type/instance) are fixed in the
standard decorator
Release Notes of GME 3
--------------------------------
-This release contains lot of improvements and changes over the
-previous versions. Therefore it is even more important to read
+This release contains lot of improvements and changes over the
+previous versions. Therefore it is even more important to read
carefully the first section (about the upgrade process).
- We have a new OCL Constraint Manager with lot of nice features and
comprehensive documentation (as part of the User Manual)
-
-- GME3 uses the Windows Installer (2.0) interface which provides a
+
+- GME3 uses the Windows Installer (2.0) interface which provides a
standard mechanism to redistribute system DLLs.
- We got rid of the "2000" prefix everywhere. If you cannot open/import
@@ -1141,15 +1141,15 @@
Minor fixes/enhancements:
-- GUI improvements (new icons, consistent style)
+- GUI improvements (new icons, consistent style)
- XML based (inter-process) clipboard support in the Browser
- Library handling problems in the MGA
-- Single click, or multiple selections in the Browser now
+- Single click, or multiple selections in the Browser now
update the contents of the Attribute Panel.
-
+
- Context menus are enabled in GME connection modes
- Hotkeys are assigned to switch between GME modes (CTRL+1 - CTRL+6)
@@ -1158,13 +1158,13 @@
- Interpreter invocation from the Browser
-- Connection hotspot feature is now controllable
+- Connection hotspot feature is now controllable
(and is disabled for inheritance icons in the meta environment)
-
-- The installer now removes old paradigms and components
+
+- The installer now removes old paradigms and components
from the windows registry. Please, re-register your paradigms
from the .xmp files and recompile your interpreters
-
+
- Libraries can be renamed in the browser
- Interpreters based on BON can be compiled using Visual Studio.Net
@@ -1183,8 +1183,8 @@
ActiveX component. It provides a unified interface for
attributes, preferences and properties.
-In our previous service release a new component has been added.
-It is a plug-in, i.e a paradigm independent component.
+In our previous service release a new component has been added.
+It is a plug-in, i.e a paradigm independent component.
It provides comprehensive searching capability.
@@ -1202,7 +1202,7 @@
modifications. GME will automatically convert binary
files to the new format (saving the original with the .orig
extension), but it is a relatively slow process. However,
-subsequent accesses to the file are as fast as before.
+subsequent accesses to the file are as fast as before.
- ODBC backend. In addition to the MS Repository and binary
file backends, now ODBC is also supported.
@@ -1277,7 +1277,7 @@
GME uses when it needs to display the objects. The new UML class diagram
paradigm sample comes with its own decorator that displays classnames,
stereotypes and attributes inside the class icon and resizes it accordingly.
-The GME metamodeling paradigm has a similar decorator as well. A
+The GME metamodeling paradigm has a similar decorator as well. A
decorator shell is also provided with this release to help you write
your own decorators. Note that connection visualization has not changed
and is not customizable.
@@ -1298,7 +1298,7 @@
loaded automatically. Add-ons listen to events; the event set listened to
is specified through the component configurator GUI (ComponentConfig.exe) .
For efficiency reasons, Addons cannot be Builder Object Network components.
-Plug-ins are noew accessible throufg a separate command in the File menu.
+Plug-ins are noew accessible throufg a separate command in the File menu.
- OCL syntax checker add-on for the metamodeling environment. As a sample
add-on, the metamodeling environment now comes with this nice helper
@@ -1325,7 +1325,7 @@
only a warning is displayed when starting incompatible components. There
is no way to change the interface versions of compiled binaries. The only
possible way to update the inteface version number is to recompile the
-components against the up-to-date interface files.
+components against the up-to-date interface files.
- Type inheritance refinements. The previous restriction, that only root
models can be derived from or instantiated, has been relaxed. Now a
@@ -1341,7 +1341,7 @@
work if the source of the clipboard data is the same project open in the
same GME instance.
-- Instant connections through context menus. In the regular edit mode
+- Instant connections through context menus. In the regular edit mode
connections can now be made by the Connect command in the context menu.
Selecting this command changes the cursor to the connect cursor. A connection
will be made to the object that is left clicked next. (Or by selecting the
@@ -1363,7 +1363,7 @@
to fully comply with the new BON.
- Tutorials. Two short, simple tutorials have been prepared on metamodeling
-and metamodel composition.
+and metamodel composition.
- A sample UML class diagram drawing paradigm. To illustrate the user-defined
drawing capabilities of this version, we are including this simple
@@ -1427,12 +1427,12 @@
TreeCtrlEx
Copyright (c) 1997-2001 Bendik Engebretsen <bendik at techsoft.no>
-
+
Regexp
Copyright (c) 1986 by University of Toronto. (Henry Spencer)
-
+
ColourPicker, ColourPopup
- Copyright (c) 1998 Chris Maunder <chrismaunder at codeguru.com> and
+ Copyright (c) 1998 Chris Maunder <chrismaunder at codeguru.com> and
Alexander Bischofberger <bischofb at informatik.tu-muenchen.de>
MFC Grid Control - inplace editing class (CInPlaceEdit)
@@ -1440,7 +1440,7 @@
zlib
Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
-
+
CrashRpt
Copyright (c) 2003, Michael Carruth
@@ -1448,53 +1448,53 @@
Copyright (c) 2000-2009 CollabNet.
APR (Apache Portable Runtime)
- Copyright (c) 1999-2004 The Apache Software Foundation.
-
+ Copyright (c) 1999-2004 The Apache Software Foundation.
+
OpenSSL
Copyright (c) 1998-2008 The OpenSSL Project.
-
+
Serf
Copyright 2002-2004 Justin Erenkrantz and Greg Stein
neon HTTP/WebDAV client library
- Copyright (c) 2001-2008 Joe Orton
-
-
+ Copyright (c) 2001-2008 Joe Orton
+
+
*****************************************************
Appendix A. The Apache Software License, Version 1.1
*****************************************************
-
- Copyright (c) 1999-2004 The Apache Software Foundation. All rights
+
+ Copyright (c) 1999-2004 The Apache Software Foundation. All rights
reserved.
-
+
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
-
+
1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
+ notice, this list of conditions and the following disclaimer.
+
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
-
+
3. The end-user documentation included with the redistribution,
- if any, must include the following acknowledgment:
+ if any, must include the following acknowledgment:
"This product includes software developed by the
Apache Software Foundation (http:
Alternately, this acknowledgment may appear in the software itself,
if and wherever such third-party acknowledgments normally appear.
-
+
4. The names "Xalan" and "Apache Software Foundation" must
not be used to endorse or promote products derived from this
- software without prior written permission. For written
+ software without prior written permission. For written
permission, please contact apache at apache.org.
-
+
5. Products derived from this software may not be called "Apache",
nor may "Apache" appear in their name, without prior written
permission of the Apache Software Foundation.
-
+
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -1508,7 +1508,7 @@
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
====================================================================
-
+
This software consists of voluntary contributions made by many
individuals on behalf of the Apache Software Foundation and was
originally based on software copyright (c) 1999, International
Modified: trunk/GME/Gme/GME.rc
==============================================================================
--- trunk/GME/Gme/GME.rc Thu Dec 8 13:31:43 2016 (r2658)
+++ trunk/GME/Gme/GME.rc Thu Jan 26 10:02:54 2017 (r2659)
@@ -26,19 +26,19 @@
// TEXTINCLUDE
//
-1 TEXTINCLUDE
+1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
-2 TEXTINCLUDE
+2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"#include ""GMEVersion.h""\r\n"
"\0"
END
-3 TEXTINCLUDE
+3 TEXTINCLUDE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
@@ -684,7 +684,7 @@
"O", ID_FILE_OPEN, VIRTKEY, CONTROL
"S", ID_FILE_SAVE, VIRTKEY, CONTROL
"P", ID_FILE_PRINT, VIRTKEY, CONTROL
- VK_F6, ID_NEXT_PANE, VIRTKEY
+ VK_F6, ID_NEXT_PANE, VIRTKEY
VK_F6, ID_PREV_PANE, VIRTKEY, SHIFT
VK_ESCAPE, ID_CANCEL_EDIT_CNTR, VIRTKEY, NOINVERT
END
@@ -1156,7 +1156,7 @@
VALUE "FileDescription", "GME"
VALUE "FileVersion", GME_VERSION_STR
VALUE "InternalName", "GME"
- VALUE "LegalCopyright", "Copyright (C) 1999-2016 ISIS, Vanderbilt University"
+ VALUE "LegalCopyright", "Copyright (C) 1999-2017 ISIS, Vanderbilt University"
VALUE "OriginalFilename", "GME.EXE"
VALUE "ProductName", "GME Application"
VALUE "ProductVersion", GME_VERSION_STR
@@ -1370,41 +1370,41 @@
IDD_BROWSER_DIALOG DLGINIT
BEGIN
IDC_GMEACTIVEBROWSERCTRL1, 0x376, 20, 0
-0x0000, 0x0000, 0x0000, 0x0001, 0x242c, 0x0000, 0x08e3, 0x0000, 0x0000,
-0x0000,
+0x0000, 0x0000, 0x0000, 0x0001, 0x242c, 0x0000, 0x08e3, 0x0000, 0x0000,
+0x0000,
0
END
IDD_OBJECT_INSPECTOR_DIALOG DLGINIT
BEGIN
IDC_OBJECT_INSPECTOR_CTRL, 0x376, 20, 0
-0x0000, 0x0000, 0x0000, 0x0001, 0x14ac, 0x0000, 0x2113, 0x0000, 0x0000,
-0x0000,
+0x0000, 0x0000, 0x0000, 0x0001, 0x14ac, 0x0000, 0x2113, 0x0000, 0x0000,
+0x0000,
0
END
IDD_SEARCH_DIALOG DLGINIT
BEGIN
IDC_SEARCHCTRL, 0x376, 20, 0
-0x0000, 0x0000, 0x0000, 0x0001, 0x2584, 0x0000, 0x27b0, 0x0000, 0x0000,
-0x0000,
+0x0000, 0x0000, 0x0000, 0x0001, 0x2584, 0x0000, 0x27b0, 0x0000, 0x0000,
+0x0000,
0
END
IDD_CONSOLE_DIALOG DLGINIT
BEGIN
IDC_CONSOLE_CTRL, 0x376, 20, 0
-0x0000, 0x0000, 0x0000, 0x0001, 0x3acf, 0x0000, 0x085f, 0x0000, 0x0000,
-0x0000,
+0x0000, 0x0000, 0x0000, 0x0001, 0x3acf, 0x0000, 0x085f, 0x0000, 0x0000,
+0x0000,
0
END
IDD_NEW_MULTIUSER_PROJ_DLG DLGINIT
BEGIN
IDC_COMBO_SPLITALG, 0x403, 5, 0
-0x3034, 0x3639, "\000"
+0x3034, 0x3639, "\000"
IDC_COMBO_SPLITALG, 0x403, 4, 0
-0x3532, 0x0036,
+0x3532, 0x0036,
0
END
@@ -1443,7 +1443,7 @@
ID_INDICATOR_ZOOM "100%"
ID_INDICATOR_PARADIGM "-"
ID_INDICATOR_TIME "Time"
- CG_ID_VIEW_MODELPROPERTIESBAR
+ CG_ID_VIEW_MODELPROPERTIESBAR
"Show or hide ModelPropertiesBar\nToggle ModelPropertiesBar"
END
@@ -1497,9 +1497,9 @@
STRINGTABLE
BEGIN
ID_TOOLS_EXTERNAL_TOOLS "<User defined tools>\n<User defined tools>"
- ID_WINDOW_NEWHORIZONTALTABGROUP
+ ID_WINDOW_NEWHORIZONTALTABGROUP
"New Horizontal Tab Group\nNew Horizontal Tab Group"
- ID_WINDOW_NEWVERTICALTABGROUP
+ ID_WINDOW_NEWVERTICALTABGROUP
"New Vertical Tab Group\nNew Vertical Tab Group"
END
@@ -1648,7 +1648,7 @@
ID_EDIT_SHOWBASETYPE "Show bastype mdoel of current model\nShow Basetype"
ID_EDIT_SHOWTYPE "Show type model of current model\nShow Type"
ID_EDIT_PROJECTPROPERTIES "View Project Properties\nProject Properties"
- ID_FILE_REGISTERINTERPRETER
+ ID_FILE_REGISTERINTERPRETER
"Register an interpreter for the current paradigm"
ID_FILE_SETTINGS "View and change GME settings"
ID_EDIT_CLEARUNDO "Clear all undo and redo information."
@@ -1671,11 +1671,11 @@
BEGIN
ID_EDIT_COPYCLOSURE "Copy a closure of the selected objects to the Clipboard"
ID_EDIT_COPYSMART "Copies references/sets/connections to the Clipboard so that it can be reproduced upon Paste"
- ID_VIEW_REFRESH_SOURCECONTROL
+ ID_VIEW_REFRESH_SOURCECONTROL
"Refreshes checked out status for models and folders\nRefreshes checked out status for models and folders"
ID_CNTX_CHECK "Check selected or current model"
ID_CNTX_LOCATE "Locate in Object Browser"
- ID_EDIT_PASTESPECIAL_ASCLOSURE
+ ID_EDIT_PASTESPECIAL_ASCLOSURE
"Pastes copyclosured/smartcopied data without checking constraints"
END
@@ -1718,7 +1718,7 @@
ID_BUTTON33033 "Close All But Active Model\nClose All But Active Model"
ID_BUTTON33035 "Cycle Aspects\nCycle Aspects"
ID_BUTTON33037 "Cycle Aspects For All Open Models\nCycle Aspects For All Open Models"
- ID_MULTIUSER_ACTIVEUSERS
+ ID_MULTIUSER_ACTIVEUSERS
"Displays status of users working on this project\nDisplays status of users working on this project"
END
@@ -1727,7 +1727,7 @@
ID_MULTIUSER_SHOWOWNER "Displays user who controls the active model\nDisplays user who controls the active model"
ID_BUTTON33044 "Next Window\nNext Window"
ID_VIEW_CLEARCONSOLE "Clears Console Contents\nClears Console Contents"
- ID_CNTX_FOLLOWCONNECTION
+ ID_CNTX_FOLLOWCONNECTION
"Jump to the destination of an outgoing connection"
ID_CNTX_REVERSECONNECTION "Jump to the source of an incoming connection"
ID_JUMPALONGCONN "Jump to the destination of an outgoing connection\nJump Along Outgoing Connection"
@@ -1759,7 +1759,7 @@
STRINGTABLE
BEGIN
- ID_VIEW_SHOWCONNECTEDPORTSONLY
+ ID_VIEW_SHOWCONNECTEDPORTSONLY
"Show connected ports only\nConnected ports"
END
Modified: trunk/GME/Gme/Splsh16.bmp
==============================================================================
Binary file (source and/or target). No diff available.
Modified: trunk/GME/Gme/aboutpic.bmp
==============================================================================
Binary file (source and/or target). No diff available.
Modified: trunk/GME/Gme/res/AboutBox.rc
==============================================================================
--- trunk/GME/Gme/res/AboutBox.rc Thu Dec 8 13:31:43 2016 (r2658)
+++ trunk/GME/Gme/res/AboutBox.rc Thu Jan 26 10:02:54 2017 (r2659)
@@ -4,9 +4,9 @@
FONT 10, "MS Sans Serif", 0, 0, 0x0
BEGIN
CTEXT GME_VERSION_STR,IDC_STATIC,7,65,165,8,SS_NOPREFIX
- CTEXT "Copyright ? 2000-2016 Vanderbilt University",IDC_STATIC,7,135,165,8
+ CTEXT "Copyright ? 2000-2017 Vanderbilt University",IDC_STATIC,7,135,165,8
DEFPUSHBUTTON "OK",IDOK,65,161,43,12,WS_GROUP
- CTEXT "GENERIC MODELING ENVIRONMENT 16",IDC_STATIC,7,55,165,8
+ CTEXT "GENERIC MODELING ENVIRONMENT 17",IDC_STATIC,7,55,165,8
CONTROL 184,IDC_BMPABOUT,"Static",SS_BITMAP | SS_NOTIFY,7,7,165,45
CTEXT "This product includes software developed by the Apache Software Foundation (http://www.apache.org)",IDC_STATIC,7,80,165,30
CTEXT "Portions of this software are based on the Purdue Compiler Construction Tool Set (http://www.antlr.org)",IDC_STATIC,7,116,165,20
Modified: trunk/GME/Gme/res/about.psd
==============================================================================
Binary file (source and/or target). No diff available.
Modified: trunk/GME/Gme/res/splash.psd
==============================================================================
Binary file (source and/or target). No diff available.
Modified: trunk/Install/dialog.psd
==============================================================================
Binary file (source and/or target). No diff available.
More information about the gme-commit
mailing list