Page Index Toggle Pages: 1 Send TopicPrint
Normal Topic ShapeNode extender (Read 5030 times)
aortega
YaBB Newbies
*
Offline


I love YaBB 1G - SP1!

Posts: 14
Joined: Nov 2nd, 2011
ShapeNode extender
Nov 23rd, 2011 at 1:13pm
Print Post  
Hi,

I want to extend ShapeNode, I have this class:

Code
Select All
Imports Microsoft.VisualBasic

Imports MindFusion.Diagramming

Public Class ShapeNodeExtension
    Inherits ShapeNode

#Region "[Variable]"
    Private _prop1 As String = String.Empty
#End Region
#Region "[Properties]"
    Public Property Prop1() As String
        Get
            Return _prop1
        End Get
        Set(ByVal Value As String)
            _prop1 = Value
        End Set
    End Property
#End Region
#Region "[Constructor]"
    Shared Sub New()
    End Sub
    Public Sub New()
        MyBase.New()
    End Sub
    Public Sub New(ByVal diagram As Diagram)
        MyBase.New(diagram)
        _prop1 = String.Empty
    End Sub
    Public Sub New(prototype As ShapeNode)
        MyBase.New(prototype)
        _prop1 = String.Empty
    End Sub
#End Region
#Region "[Events]"
    Public Overrides Sub Draw(graphics As MindFusion.Drawing.IGraphics, options As MindFusion.Diagramming.RenderOptions)
        MyBase.Draw(graphics, options)
    End Sub
    Public Overrides Sub DrawShadow(graphics As MindFusion.Drawing.IGraphics, options As MindFusion.Diagramming.RenderOptions)
        MyBase.DrawShadow(graphics, options)
    End Sub
    Protected Overrides Sub SaveToXml(xmlElement As System.Xml.XmlElement, context As MindFusion.Diagramming.XmlPersistContext)
        MyBase.SaveToXml(xmlElement, context)
        context.WriteString(_prop1, "Prop1", xmlElement)
    End Sub
    Protected Overrides Sub LoadFromXml(xmlElement As System.Xml.XmlElement, context As MindFusion.Diagramming.XmlPersistContext)
        MyBase.LoadFromXml(xmlElement, context)
        _prop1 = context.ReadString("Prop1", xmlElement)
    End Sub
    Protected Overrides Sub SaveTo(ByVal writer As System.IO.BinaryWriter, ByVal ctx As PersistContext)
        MyBase.SaveTo(writer, ctx)
        writer.Write(_prop1)
    End Sub
    Protected Overrides Sub LoadFrom(reader As System.IO.BinaryReader, context As MindFusion.Diagramming.PersistContext)
        MyBase.LoadFrom(reader, context)
        _prop1 = reader.ReadString()
    End Sub
#End Region

End Class
 



in the Page_Load:

Code
Select All
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim diagram As Diagram = diagramView.Diagram
            diagram.SelectAfterCreate = False


            If TryCast(diagram, IItemFactory).TypeTable(GetType(ShapeNodeExtension)) Is Nothing Then
                diagram.RegisterItemClass(GetType(ShapeNodeExtension), "ShapeNodeExtension", 1)
            End If

            diagramView.CustomNodeType = GetType(ShapeNodeExtension)

            Dim start As ShapeNode = diagram.Factory.CreateShapeNode(10, 10, 20, 15)
            start.Shape = Shapes.Start
            start.Text = "Start"

            Dim start2 As New ShapeNode()
            start2.Bounds = New System.Drawing.RectangleF(30, 30, 20, 15)
            start2.Shape = Shapes.Start
            start2.Text = "Start2"
            diagram.Nodes.Add(start2)

            Dim start3 As New ShapeNodeExtension()
            start3.Bounds = New System.Drawing.RectangleF(60, 60, 20, 15)
            start3.Shape = Shapes.Start
            start3.Text = "Start3"
            start3.Prop1 = "prop1..."
            diagram.Nodes.Add(start3)

        End If
    End Sub
 




I have not got anything!!
If I remove this line: diagram.Nodes.Add(start3) I have the start1 and start2 ShapeNode...

What's the problem? ??? (I'm using ClientSideMode="JavaApplet")

Thanks,
Alberto
  
Back to top
 
IP Logged
 
Stoyo
God Member
*****
Offline


MindFusion support

Posts: 13230
Joined: Jul 20th, 2005
Re: ShapeNode extender
Reply #1 - Nov 23rd, 2011 at 1:47pm
Print Post  
I'm afraid you will also have to implement the same class in Java if using JavaApplet mode. Otherwise the applet does not know how to load the custom objects sent from the server. If you need this only in order to send additional data to the applet, you could attach the data to the Id or Tag properties.

Stoyan
  
Back to top
 
IP Logged
 
aortega
YaBB Newbies
*
Offline


I love YaBB 1G - SP1!

Posts: 14
Joined: Nov 2nd, 2011
Re: ShapeNode extender
Reply #2 - Nov 23rd, 2011 at 2:05pm
Print Post  
Thank you for answering so quickly ...

Ok, I will use the tag.

Thanks again!
  
Back to top
 
IP Logged
 
aortega
YaBB Newbies
*
Offline


I love YaBB 1G - SP1!

Posts: 14
Joined: Nov 2nd, 2011
Re: ShapeNode extender
Reply #3 - Nov 23rd, 2011 at 6:36pm
Print Post  
I'm using Tag properties. When I put information in ShapeNode.Tag all is ok, but I have a problem with the tag in diagramView.Diagram.Tag

I have this on the server:

Code
Select All
    Sub diagram_SerializeTag(ByVal sender As Object, ByVal e As SerializeTagEventArgs)

        Dim table As Dictionary(Of String, String) = CType(e.Tag, Dictionary(Of String, String))
        Dim serialized(0 To table.Count * 2 - 1) As String
        Dim c As Integer = 0
        For Each p As KeyValuePair(Of String, String) In table
            serialized(c) = p.Key
            c = c + 1
            serialized(c) = p.Value
            c = c + 1
        Next
        e.Representation.InnerText = String.Join(";", serialized)
        e.Handled = True

    End Sub
 



and this on the client:
Code
Select All
function onDeserializeTag(tagString) {
    var strings = tagString.split(";");
    var customProps = new Object();

    for (i = 0; i < strings.length; i += 2) {
        customProps[strings[i]] = strings[i + 1];
        //        alert(strings[i]); alert(strings[i + 1]);
    }
    return customProps;
}

function onSerializeTag(tag) {
    var s = "";
    for (var property in tag) {
        if (s.length != 0) s += ";";
        if (tag.hasOwnProperty(property)) {
            s = s + property + ";" + tag[property];
        }
        //alert(strings[i] + ' = ' + strings[i + 1]);
    }
    return s;
}
 




When I save the diagram:

Code
Select All
Dim sdiagrama As String
        sdiagrama = diagView.SaveToString(SaveToStringFormat.Xml, True)
 



It works very well in ShapeNode.Tag:

Code
Select All
<Tag Type="1">editable;1;anotacion;-1</Tag>
 



However, I get this in diagramView.Diagram.Tag:

Code
Select All
<Tag Type="0">AAEAAAD/////AQAAAAAAAAAEAQAAAOIBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAyW1tTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldLFtTeXN0ZW0uU3RyaW5nLCBtc2NvcmxpYiwgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODldXQQAAAAHVmVyc2lvbghDb21wYXJlcghIYXNoU2l6ZQ1LZXlWYWx1ZVBhaXJzAAMAAwiSAVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkdlbmVyaWNFcXVhbGl0eUNvbXBhcmVyYDFbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dCOYBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dW10BAAAACQIAAAADAAAACQMAAAAEAgAAAJIBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuR2VuZXJpY0VxdWFsaXR5Q29tcGFyZXJgMVtbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0AAAAABwMAAAAAAQAAAAEAAAAD5AFTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5LZXlWYWx1ZVBhaXJgMltbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XSxbU3lzdGVtLlN0cmluZywgbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0E/P///+QBU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuS2V5VmFsdWVQYWlyYDJbW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV0sW1N5c3RlbS5TdHJpbmcsIG1zY29ybGliLCBWZXJzaW9uPTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OV1dAgAAAANrZXkFdmFsdWUBAQYFAAAACG51bU5vZG9zBgYAAAABMAs=</Tag>
 



Where's the problem?

Thanks.
Alberto.
  
Back to top
 
IP Logged
 
Stoyo
God Member
*****
Offline


MindFusion support

Posts: 13230
Joined: Jul 20th, 2005
Re: ShapeNode extender
Reply #4 - Nov 24th, 2011 at 8:19am
Print Post  
I am getting the correct string on the client side in my test. If you add a breakpoint and trace through the server side SerializeTag handler, does it ever reach the e.Handled = True line when raised for the diagram's Tag?

Stoyan
  
Back to top
 
IP Logged
 
aortega
YaBB Newbies
*
Offline


I love YaBB 1G - SP1!

Posts: 14
Joined: Nov 2nd, 2011
Re: ShapeNode extender
Reply #5 - Nov 24th, 2011 at 8:38am
Print Post  
I am getting the correct string on the client side in my test too.

Please, try this on the Page_Load

[code]
Dim customPropsDiagrama As Dictionary(Of String, String) = New Dictionary(Of String, String)()
customPropsDiagrama("num") = "0"
diagView.Diagram.Tag = customPropsDiagrama
[/code]

And after that save the diagram:
[code]
Dim sdiagrama As String
sdiagrama = diagView.SaveToString(SaveToStringFormat.Xml, True)
[/code]

Look at the xml. Do you work this?


Thanks.
  
Back to top
 
IP Logged
 
Stoyo
God Member
*****
Offline


MindFusion support

Posts: 13230
Joined: Jul 20th, 2005
Re: ShapeNode extender
Reply #6 - Nov 24th, 2011 at 9:02am
Print Post  
It works fine for me when calling the Save method too. If you are getting the correct string on the client side, it would be strange not to get it in the saved XML, because the SaveToString result is what the server sends to the Java applet. Are you sure the SerializeTag event handler has already been attached when you call SaveToString?
  
Back to top
 
IP Logged
 
aortega
YaBB Newbies
*
Offline


I love YaBB 1G - SP1!

Posts: 14
Joined: Nov 2nd, 2011
Re: ShapeNode extender
Reply #7 - Nov 24th, 2011 at 10:19am
Print Post  
Yes, I am sure the SerializaTag event handler has been attached.

Ok, no problem. I do manual deserialization and it works!! (This is not elegant but ...)

[code]
diagView.Diagram.Tag = DeserializeTag(diagView.Diagram.Tag)
sdiagrama = diagView.SaveToString(SaveToStringFormat.Xml, True)
[/code]

Thank you very much for your help. You are amazing.
  
Back to top
 
IP Logged
 
Page Index Toggle Pages: 1
Send TopicPrint