home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / Data-Flow_186296392005.psc / FlowChart_301_SOURCE / Block_Collection.cls next >
Text File  |  2005-03-06  |  7KB  |  282 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "Block_Collection"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
  15. Attribute VB_Ext_KEY = "Collection" ,"cBlock"
  16. Attribute VB_Ext_KEY = "Member0" ,"cBlock"
  17. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  18. ' =========================================================
  19. '  === Project of Data-flow Visual Programming Language ===
  20. ' =========================================================
  21. ' Copyright Emu8086, Inc. Free Code !
  22. '
  23. '
  24. ' URL: http://www.emu8086.com/vb/
  25.  
  26.  
  27.  
  28. ' info@emu8086.com
  29. ' =========================================================
  30. ' Collection for cBlock objects
  31. ' =========================================================
  32.  
  33. Option Explicit
  34.  
  35. 'local variable to hold collection
  36. Private mCol As Collection
  37. 'To fire this event, use RaiseEvent with the following syntax:
  38. 'RaiseEvent linkError[(arg1, arg2, ... , argn)]
  39. Public Event linkError(sERROR As String)
  40.  
  41.  
  42. Public Function AddShape(ShapeType As Integer, sKey As String, iLeft As Single, iTop As Single) As cBlock
  43.     'create a new object
  44.     Dim objNewMember As cBlock
  45.     Set objNewMember = New cBlock
  46.  
  47.     ' in case this method is called when program is loaded
  48.     '  it is also set, but it has no effect because after
  49.     '  loading this variable is set to FALSE:
  50.     bIS_MODIFIED = True
  51.  
  52.  
  53.     'set the properties passed into the method
  54.     
  55.     If bGUI Then
  56.         MAX_SHAPE = MAX_SHAPE + 1
  57.         Load frmMain.shp(MAX_SHAPE)
  58.         
  59.         Set objNewMember.theObjectShape = frmMain.shp(MAX_SHAPE)
  60.    
  61.         ' sets last buit shape to be selected:
  62.         PREV_SELECTED_SHAPE = SELECTED_SHAPE
  63.         SELECTED_SHAPE = MAX_SHAPE
  64.     Else
  65.         ' to prevent any possible errors, it is set to first
  66.         '   static object:
  67.         Set objNewMember.theObjectShape = Nothing 'frmMain.shp(0)
  68.     End If
  69.         
  70.  
  71.     With objNewMember
  72.         If bGUI Then
  73.             .shapeLeft = iLeft 'frmMain.ScaleWidth / 2 - .shapeWidth / 2
  74.             .shapeTop = iTop 'frmMain.ScaleHeight / 2 - .shapeHeight / 2
  75.             .Shape = ShapeType
  76.             .theObjectShape.ZOrder 0
  77.             
  78.             .BGColor = vbWhite
  79.             .TextColor = vbBlack
  80.             .BorderColor = vbBlack
  81.             
  82.             .Visible = True
  83.         End If
  84.         
  85.         .TagID = sKey
  86.     End With
  87.  
  88.             
  89.     'If Len(sKey) = 0 Then
  90.     '    mCol.Add objNewMember
  91.     'Else
  92.     '    mCol.Add objNewMember, sKey
  93.     'End If
  94.  
  95.     mCol.Add objNewMember, sKey ' objNewMember.TagID
  96.         
  97.     'return the object created
  98.     Set AddShape = objNewMember
  99.     Set objNewMember = Nothing
  100.  
  101. End Function
  102.  
  103. Public Property Get item(vntIndexKey As Variant) As cBlock
  104. Attribute item.VB_UserMemId = 0
  105. On Error GoTo err1
  106.     'used when referencing an element in the collection
  107.     'vntIndexKey contains either the Index or Key to the collection,
  108.     'this is why it is declared as a Variant
  109.     'Syntax: Set foo = x.Item(xyz) or Set foo = x.Item(5)
  110.   Set item = mCol(vntIndexKey)
  111.   Exit Sub
  112. err1:
  113.   Debug.Print "NN Error on Get Item(" & vntIndexKey & "): " & Err.Description
  114. End Property
  115.  
  116.  
  117. Public Property Get Count() As Long
  118.     'used when retrieving the number of elements in the
  119.     'collection.
  120.     Count = mCol.Count
  121. End Property
  122.  
  123.  
  124. Public Sub Remove(vntIndexKey As Variant)
  125.     'used when removing an element from the collection
  126.     'vntIndexKey contains either the Index or Key, which is why
  127.     'it is declared as a Variant
  128.     'Syntax: x.Remove(xyz)
  129.  
  130.  
  131.     mCol.Remove vntIndexKey
  132. End Sub
  133.  
  134.  
  135. Public Property Get NewEnum() As IUnknown
  136. Attribute NewEnum.VB_UserMemId = -4
  137. Attribute NewEnum.VB_MemberFlags = "40"
  138.     'this property allows you to enumerate
  139.     'this collection with the For...Each syntax
  140.     Set NewEnum = mCol.[_NewEnum]
  141. End Property
  142.  
  143.  
  144. Private Sub Class_Initialize()
  145.     'creates the collection when this class is created
  146.     Set mCol = New Collection
  147. End Sub
  148.  
  149.  
  150. Private Sub Class_Terminate()
  151.     'destroys collection when this class is terminated
  152.     Set mCol = Nothing
  153. End Sub
  154.  
  155.  
  156. ' allows to remove only when there are no connections
  157. ' to this object:
  158. Public Sub removeShape(Index As Integer)
  159.     
  160.     If Index = -1 Then Exit Sub
  161.        
  162.     Dim xL As cLine
  163.     Dim sName As String
  164.     
  165.     sName = frmMain.shp(Index).Tag
  166.     
  167.     For Each xL In frmMain.theLineCollection
  168.         If (xL.sFrom = sName) Or (xL.sTo = sName) Then
  169.             RaiseEvent linkError(cLang("Cannot delete connected object."))
  170.             Exit Sub
  171.         End If
  172.     Next xL
  173.     
  174.      frmMain.shp(Index).Visible = False
  175.      
  176.  
  177.     
  178.     
  179.  
  180.     ' 2005-03-06 I'm not sure if that's required, but I think it's better this way:
  181.        frmMain.shp(Index).Tag = frmMain.shp(Index).Tag & "-DELETED"
  182.  
  183.  
  184.     
  185.     
  186.     
  187.     
  188.     ' DO NOT REMOVE! 25.07.2004
  189.     ' it causes errors when adding new boxes....
  190.     ' Me.Remove sName  ' actual delete (won't be loaded on next load).
  191.  
  192.  
  193.     ' 2005-03-06' the above is a crappy solution because it causes that deleted objects are loaded when project is reloaded.
  194.     ' 2005-03-06
  195.      Me.Remove sName  ' actual delete (won't be loaded on next load).
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.     ' hide selector:
  210.     frmMain.shp_Selector.Visible = False
  211.         
  212.     SELECTED_SHAPE = -1 ' nothing selected
  213.  
  214. End Sub
  215.  
  216. ' returns free ID for an object that is not used yet:
  217. Public Function getFreeTagID() As String
  218.  
  219.     Dim xB As cBlock
  220.     
  221.     Dim Index As Integer
  222.     Dim sName As String
  223.     Index = 1
  224.     
  225.     sName = "id" & Index
  226.     
  227.     Do While (getIndexFromTag(sName) <> -1)
  228.         Index = Index + 1
  229.         sName = "id" & Index
  230.     Loop
  231.  
  232.     getFreeTagID = sName
  233. End Function
  234.  
  235. ' returns the index of Active-X myShape that is associated
  236. ' with this cBlock:
  237. Public Function getIndexFromTag(sTag As String) As Integer
  238.     Dim xB As cBlock
  239.     
  240.     For Each xB In Me
  241.         If (xB.TagID = sTag) Then
  242.             getIndexFromTag = xB.theObjectShape.Index
  243.             Exit Function
  244.         End If
  245.     Next xB
  246.   
  247.     getIndexFromTag = -1    ' not found!
  248.     
  249. End Function
  250.  
  251. ' it may never happen...
  252. ' check anyway...
  253. Public Sub checkLinks()
  254.  
  255.     Dim xL As cLine
  256.     
  257.     For Each xL In frmMain.theLineCollection
  258.         If Me.getIndexFromTag(xL.sFrom) = -1 Then
  259.              RaiseEvent linkError("Line #" & xL.theObjectLine.Index & " has wrong FROM")
  260.         ElseIf Me.getIndexFromTag(xL.sTo) = -1 Then
  261.              RaiseEvent linkError("Line #" & xL.theObjectLine.Index & " has wrong TO")
  262.         End If
  263.     Next xL
  264.     
  265. End Sub
  266.  
  267.  
  268.  
  269. Public Function objectNameExists(sName As String) As Boolean
  270.     Dim cb As cBlock
  271.     
  272.     For Each cb In Me
  273.        If StrComp(sName, cb.TagID, vbTextCompare) = 0 Then
  274.             objectNameExists = True
  275.             Exit Function
  276.        End If
  277.     Next cb
  278.     
  279.     ' if gets here, not found:
  280.     objectNameExists = False
  281. End Function
  282.