public AddRemoveNode(NodeChangeType nodeChangeType, Node node, Node parent1, Node parent2, List<Node> outputs, Network network)
        {
            if (node == null)
                throw new ArgumentNullException("node");
            if (parent1 == null)
                throw new ArgumentNullException("parent1");
            if (parent2 == null)
                throw new ArgumentNullException("parent2");
            if (outputs == null)
                throw new ArgumentNullException("output");
            //if (node == parent1 || node == parent2 || node == outputs || //TODO: FIX THIS checker
            //    parent1 == parent2 || parent1 == outputs || parent2 == outputs)
            //    throw new ArgumentException();

            nodeChangeType_ = nodeChangeType;
            node_ = node;
            parent1_ = parent1;
            parent2_ = parent2;
            outputs_ = outputs;
            network_ = network;

            // NODE: it is only way I was able to create to make parent 2 children stay in same order after revert
            parent2NodeToInsertAfter_ = null;
            if (nodeChangeType == NodeChangeType.Remove)
            {
                LinkedListNode<Node> parent2LinkedListNodeToInsertAfter = parent2_.Outputs.Find(node_).Previous;
                if (parent2LinkedListNodeToInsertAfter != null)
                {
                    parent2NodeToInsertAfter_ = parent2_.Outputs.Find(node_).Previous.Value;
                }
            }
        }
        public virtual void OnDescendantChanged(NodeChangeType changeType, ITreeNode node)
        {
            if (DescendantChanged != null)
            {
                DescendantChanged(changeType, node);
            }

            if (Parent != null)
            {
                Parent.OnDescendantChanged(changeType, node);
            }
        }
        public virtual void OnAncestorChanged(NodeChangeType changeType, ITreeNode node)
        {
            if (AncestorChanged != null)
            {
                AncestorChanged(changeType, node);
            }

            foreach (ITreeNode <T> child in Children)
            {
                child.OnAncestorChanged(changeType, node);
            }
        }
Beispiel #4
0
        public AddRemoveNode(NodeChangeType nodeChangeType, Node node, Node parent1, Node parent2, List <Node> outputs, Network network)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }
            if (parent1 == null)
            {
                throw new ArgumentNullException("parent1");
            }
            if (parent2 == null)
            {
                throw new ArgumentNullException("parent2");
            }
            if (outputs == null)
            {
                throw new ArgumentNullException("output");
            }
            //if (node == parent1 || node == parent2 || node == outputs || //TODO: FIX THIS checker
            //    parent1 == parent2 || parent1 == outputs || parent2 == outputs)
            //    throw new ArgumentException();

            nodeChangeType_ = nodeChangeType;
            node_           = node;
            parent1_        = parent1;
            parent2_        = parent2;
            outputs_        = outputs;
            network_        = network;

            // NODE: it is only way I was able to create to make parent 2 children stay in same order after revert
            parent2NodeToInsertAfter_ = null;
            if (nodeChangeType == NodeChangeType.Remove)
            {
                LinkedListNode <Node> parent2LinkedListNodeToInsertAfter = parent2_.Outputs.Find(node_).Previous;
                if (parent2LinkedListNodeToInsertAfter != null)
                {
                    parent2NodeToInsertAfter_ = parent2_.Outputs.Find(node_).Previous.Value;
                }
            }
        }
Beispiel #5
0
        void QcMessagner_ReciveCmd(object sender, QcCmdEventArgs e)
        {
            try
            {
                if (e.Cmd.CmdType == QcProtocol.QcCommand.Undefine)
                {
                    return;
                }
                QcMsgUser userfrom = null;
                if (lstUser.ContainsKey(e.Cmd.From))
                {
                    userfrom = lstUser[e.Cmd.From];
                }
                if (this.ReciveCmd != null)
                {
                    var cmdevt = new QcMessagerCmdEventArg()
                    {
                        cmd  = e.Cmd,
                        user = userfrom
                    };
                    this.ReciveCmd(this, cmdevt);
                }

                switch (e.Cmd.CmdType)
                {
                case QcProtocol.QcCommand.QcLoginReplay:
                    client.Send(QcCmd.MakeCmd(QcProtocol.QcCommand.QcListUser));
                    break;

                case QcProtocol.QcCommand.QcLoginOut:
                    if (userfrom != null)
                    {
                        userfrom.Chanel   = null;
                        userfrom.IsLinked = false;
                    }
                    if (this.Loginout != null)
                    {
                        if (userfrom != null)
                        {
                            this.Loginout(this, new QcMessagerLoginEventArg(userfrom));
                        }
                    }

                    break;

                case QcProtocol.QcCommand.QcMsg:
                    if (this.ReciveMsg != null)
                    {
                        var msgevt = new QcMessagerMsgEventArg(userfrom.Name, e.Cmd.tokens(3), e.Cmd.tokens(4));
                        this.ReciveMsg(this, msgevt);
                    }
                    break;

                case QcProtocol.QcCommand.QcSystemMsg:
                    if (this.ReciveSystemMsg != null)
                    {
                        var systemevt = new QcSystemMsgEventArg(e.Cmd.tokens(5), e.Cmd.From, e.Cmd.tokens(3), e.Cmd.tokens(4));
                        this.ReciveSystemMsg(this, systemevt);
                    }
                    break;

                case QcProtocol.QcCommand.QcUserLogin:
                    foreach (QcMsgUser u in lstUser.Values)
                    {
                        if (u.Name == userfrom.Name)
                        {
                            u.IsLinked = true;
                            break;
                        }
                    }


                    if (this.Logined != null)
                    {
                        this.Logined(this, new QcMessagerLoginEventArg(userfrom));
                    }
                    break;

                case QcProtocol.QcCommand.QcListUser:
                    var v = e.Cmd.tokens(1).Split(',');
                    foreach (var u in v)
                    {
                        if (lstUser.ContainsKey(u))
                        {
                            lstUser[u].Chanel = new QcChanel();
                        }
                    }
                    break;

                case QcProtocol.QcCommand.QcUpdateMsg:
                    if (ReciveUpdateMsg != null)
                    {
                        var msg = QcMsg.GetMsg(e.Cmd.tokens(4));
                        ReciveUpdateMsg(this, new QcMessagerUpdateMsgEventArg(msg));
                    }
                    break;

                case QcProtocol.QcCommand.QcDataUpdate:
                    string index = e.Cmd.tokens(2) + "|" + e.Cmd.tokens(1);

                    //收到数据更新消息,进行更新
                    //   QcLog.LogString(e.Cmd.ToString());
                    NodeChangeType type = NodeChangeType.Create;
                    if (Enum.TryParse <NodeChangeType>(e.Cmd.tokens(3), out type))
                    {
                        switch (type)
                        {
                        case NodeChangeType.Create:

                            break;

                        case NodeChangeType.Update:
                            if (QcNode.lstNode.ContainsKey(index))
                            {
                                QcNode.lstNode[index].Refresh();
                            }
                            break;

                        case NodeChangeType.Delete:
                            if (QcNode.lstNode.ContainsKey(index))
                            {
                                QcNode.lstNode[index].RiseDelete();
                            }
                            break;
                        }
                        if (DataUpdate != null)
                        {
                            if (QcNode.lstNode.ContainsKey(index))
                            {
                                DataUpdate(this, new QcMessagerDataUpdateEventArg(QcNode.lstNode[index], type));
                            }
                            else
                            {
                                string tablename = e.Cmd.tokens(2);
                                string code      = e.Cmd.tokens(1);
                                string codefield = e.Cmd.tokens(4);
                                QcNode node      = new QcNewNode(tablename, code, codefield);
                                node.InitFromString(e.Cmd.tokens(5));
                                DataUpdate(this, new QcMessagerDataUpdateEventArg(node, type));
                            }
                        }
                    }
                    break;
                }
            }
            catch (Exception ex)
            {
                QcLog.LogException("QcMessagner:", ex);
            }
        }
Beispiel #6
0
 public QcMessagerDataUpdateEventArg(QcNode node, NodeChangeType type)
 {
     this.node = node;
     this.type = type;
 }
Beispiel #7
0
 protected override void UpdateTotalSummaryOnNodeCollectionChanged(TreeListNodeBase node, NodeChangeType changeType, IEnumerable <DevExpress.Data.TreeList.TreeListSummaryItem> changedItems, Dictionary <TreeListNodeBase, SummaryDataItem> summaryData)
 {
     base.UpdateTotalSummaryOnNodeCollectionChanged(node, changeType, changedItems, summaryData);
     UpdateGroupSummaries();
 }
Beispiel #8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="Code">数据编码值</param>
 /// <param name="TableName">表明</param>
 /// <param name="CodeField">数据编码字段名</param>
 /// <param name="ChangeType">变更类型</param>
 /// <returns></returns>
 public static bool PostMeassage(string Code, string TableName, string CodeField, NodeChangeType ChangeType = NodeChangeType.Update)
 {
     return(PostMessage(QcNet.QcCmd.MakeCmd(QcProtocol.QcCommand.QcDataUpdate
                                            , Code
                                            , TableName
                                            , ChangeType
                                            , CodeField)));
 }
Beispiel #9
0
 public QcNodeEventArg(QcNode node, NodeChangeType type)
 {
     this.node = node;
     this.type = type;
 }
Beispiel #10
0
 public override void OnDescendantChanged(NodeChangeType changeType, ITreeNode node)
 {
     base.OnDescendantChanged(changeType, node);
     Console.WriteLine("Space.OnDescendantChanged: " + changeType + " " + ((Space)node).Name);
 }