Example #1
0
        // 初始化.cs文件中的数据绑定,一些不方便在xaml中绑定的部分在这里绑定
        private void init_binding()
        {
            // 绑定SeqMessage的类型枚举
            ComboBox seqMessage_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "seqMessage_ComboBox");

            seqMessage_ComboBox.Items = System.Enum.GetValues(typeof(SeqMessage));
        }
Example #2
0
        public void Update_Attribute()
        {
            ListBox attr_ListBox = ControlExtensions.FindControl <ListBox>(this, "attr_ListBox");

            if (attr_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定要修改的Attribute!";
                return;
            }

            ListBox type_ListBox = ControlExtensions.FindControl <ListBox>(this, "type_ListBox");

            if (type_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定成员类型!";
                return;
            }

            TextBox attrId_TextBox = ControlExtensions.FindControl <TextBox>(this, "attrId_TextBox");

            if (attrId_TextBox.Text == null || attrId_TextBox.Text.Length == 0)
            {
                ResourceManager.mainWindowVM.Tips = "需要给出成员名称!";
                return;
            }

            // todo 变量名判重

            Attribute attribute = ((Attribute)attr_ListBox.SelectedItem);

            attribute.Type       = (sbid._M.Type)type_ListBox.SelectedItem;
            attribute.Identifier = attrId_TextBox.Text;
            ResourceManager.mainWindowVM.Tips = "为自定义类型[" + ((UserType_EW_VM)DataContext).UserType.Name + "]更新了成员变量:" + attribute;
        }
Example #3
0
        // 初始化.cs文件中的事件处理方法,一些无法在xaml中绑定的部分在这里绑定
        private void init_event()
        {
            // 绑定Method右侧列表选中项变化的处理方法
            ListBox method_ListBox = ControlExtensions.FindControl <ListBox>(this, "method_ListBox");

            method_ListBox.SelectionChanged += method_ListBox_Changed;
        }
        public void Append_Inv_PropNav()
        {
            if (process_Inv_ComboBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定进程模板!";
                return;
            }
            Process process = (Process)process_Inv_ComboBox.SelectedItem;

            TreeView invPropNav_TreeView = ControlExtensions.FindControl <TreeView>(this, nameof(invPropNav_TreeView));

            if (invPropNav_TreeView.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定要接入的属性!";
                return;
            }

            Nav    nav    = (Nav)invPropNav_TreeView.SelectedItem;
            string navStr = nav.Identifier + (nav.IsArray ? ("[" + nav.ArrayIndex + "]") : "");

            while (nav.ParentNav != null)
            {
                nav    = nav.ParentNav;
                navStr = nav.Identifier + (nav.IsArray ? ("[" + nav.ArrayIndex + "]") : "") + "." + navStr;
            }
            navStr = process.RefName.Content + "." + navStr;

            Append_Inv_Symbol(navStr);
        }
Example #5
0
        // 初始化.cs文件中的事件处理方法,一些无法在xaml中绑定的部分在这里绑定
        private void init_event()
        {
            // 绑定进程模板ComboBox选中项变化的处理方法
            ComboBox process_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "process_ComboBox");

            process_ComboBox.SelectionChanged += process_ComboBox_Changed;
        }
Example #6
0
        public void Add_ProcessMethod()
        {
            ListBox process_ListBox = ControlExtensions.FindControl <ListBox>(this, "process_ListBox");

            if (process_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定进程模板!";
                return;
            }
            Process process = (Process)process_ListBox.SelectedItem;

            ListBox method_ListBox = ControlExtensions.FindControl <ListBox>(this, "method_ListBox");

            if (method_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定方法!";
                return;
            }
            Method method = (Method)method_ListBox.SelectedItem;

            ProcessMethod processMethod = new ProcessMethod(process, method);

            ((Axiom_EW_VM)DataContext).Axiom.ProcessMethods.Add(processMethod);
            ResourceManager.mainWindowVM.Tips = "添加了ProcessMethod:" + processMethod;
        }
 private void get_control_reference()
 {
     attackRelation_ComboBox       = ControlExtensions.FindControl <ComboBox>(this, nameof(attackRelation_ComboBox));
     attackRelation_ComboBox.Items = System.Enum.GetValues(typeof(AttackRelation));
     description_TextBox           = ControlExtensions.FindControl <TextBox>(this, nameof(description_TextBox));
     visible_CheckBox = ControlExtensions.FindControl <CheckBox>(this, nameof(visible_CheckBox));
 }
Example #8
0
        public void Update_Formula()
        {
            ListBox axiom_ListBox = ControlExtensions.FindControl <ListBox>(this, "axiom_ListBox");

            if (axiom_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定要更新的公理公式!";
                return;
            }

            TextBox axiom_TextBox = ControlExtensions.FindControl <TextBox>(this, "axiom_TextBox");

            if (axiom_TextBox.Text == null || axiom_TextBox.Text.Length == 0)
            {
                ResourceManager.mainWindowVM.Tips = "需要给出修改后的公理公式!";
                return;
            }

            ObservableCollection <Formula> formulas = ((Axiom_EW_VM)DataContext).Axiom.Formulas;

            // 判重
            foreach (Formula formu in formulas)
            {
                if (formu.Content == axiom_TextBox.Text)
                {
                    ResourceManager.mainWindowVM.Tips = "无效的操作。该公理公式已经添加过";
                    return;
                }
            }

            Formula formula = (Formula)axiom_ListBox.SelectedItem;

            formula.Content = axiom_TextBox.Text;
            ResourceManager.mainWindowVM.Tips = "更新了公理公式:" + formula.Content;
        }
Example #9
0
        public void Delete_Attribute()
        {
            ListBox attr_ListBox = ControlExtensions.FindControl <ListBox>(this, "attr_ListBox");

            if (attr_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定要删除的Attribute!";
                return;
            }

            // 获取要删除的Attribute对象
            Attribute attribute = (Attribute)attr_ListBox.SelectedItem;

            // 判断并删除Authenticity
            bool del_auth = attribute.Type is UserType?JudgeAndDeleteAuthenticity((UserType)attribute.Type, null) : false;

            ((Process_EW_VM)DataContext).Process.Attributes.Remove(attribute);
            ResourceManager.mainWindowVM.Tips = "为进程模板[" + ((Process_EW_VM)DataContext).Process.RefName + "]删除了成员变量:" + attribute + "。";

            // Tips补充
            if (del_auth)
            {
                ResourceManager.mainWindowVM.Tips += "[!]因UserType被修改,SecurityProperty中依赖于它的Authenticity的二级属性失配,被一同删除。";
            }
        }
Example #10
0
        public void Add_NZMethod()
        {
            ListBox innerMethod_ListBox = ControlExtensions.FindControl <ListBox>(this, "innerMethod_ListBox");

            if (innerMethod_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定内置方法!";
                return;
            }

            ComboBox crypto_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "crypto_ComboBox");

            if (crypto_ComboBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定加密算法!";
                return;
            }

            // todo 方法判重

            Method method_template = (Method)innerMethod_ListBox.SelectedItem;
            // 形参表要拷贝一份,以防止在自定Method中对其修改时影响到内置Method
            ObservableCollection <Attribute> paramerters = new ObservableCollection <Attribute>();

            foreach (Attribute attribute in method_template.Parameters)
            {
                paramerters.Add(new Attribute(attribute.Type, attribute.Identifier));
            }
            // 这里加密方法要用用户选中的,而不是内置方法模板里的None
            Method method = new Method(method_template.ReturnType, method_template.Name, paramerters, (Crypto)crypto_ComboBox.SelectedItem);

            ((Process_EW_VM)DataContext).Process.Methods.Add(method);
            ResourceManager.mainWindowVM.Tips = "为进程模板[" + ((Process_EW_VM)DataContext).Process.Name + "]添加了成员方法:" + method;
        }
Example #11
0
        public void Add_Formula()
        {
            TextBox axiom_TextBox = ControlExtensions.FindControl <TextBox>(this, "axiom_TextBox");

            if (axiom_TextBox.Text == null || axiom_TextBox.Text.Length == 0)
            {
                ResourceManager.mainWindowVM.Tips = "需要给出要添加的公理公式!";
                return;
            }

            ObservableCollection <Formula> formulas = ((Axiom_EW_VM)DataContext).Axiom.Formulas;

            // 判重
            foreach (Formula formu in formulas)
            {
                if (formu.Content == axiom_TextBox.Text)
                {
                    ResourceManager.mainWindowVM.Tips = "无效的操作。该公理公式已经添加过";
                    return;
                }
            }

            Formula formula = new Formula(axiom_TextBox.Text);

            formulas.Add(formula);
            ResourceManager.mainWindowVM.Tips = "添加了公理公式:" + formula.Content;
        }
Example #12
0
        // 内置Method列表选中项变化的处理
        private void innerMethod_ListBox_Changed(object sender, SelectionChangedEventArgs e)
        {
            // 根据不同内置Method应允许不同的算法
            ListBox  innerMethod_ListBox = ControlExtensions.FindControl <ListBox>(this, "innerMethod_ListBox");
            ComboBox crypto_ComboBox     = ControlExtensions.FindControl <ComboBox>(this, "crypto_ComboBox");

            if (innerMethod_ListBox.SelectedItem == null) // 变成没有选中时,恢复全列表
            {
                crypto_ComboBox.Items        = System.Enum.GetValues(typeof(Crypto));
                crypto_ComboBox.SelectedItem = Crypto.None;
                return;
            }
            Method method = (Method)innerMethod_ListBox.SelectedItem;

            switch (method.Name)
            {
            // 对称加解密
            case "SymEnc":
            case "SymDec":
                crypto_ComboBox.Items        = Method.Sym;
                crypto_ComboBox.SelectedItem = Method.Sym[0];
                break;

            // 签名和验证
            case "Sign":
            case "Verify":
                crypto_ComboBox.Items        = Method.ASym.Union(Method.Hash).ToList();
                crypto_ComboBox.SelectedItem = Method.ASym[0];
                break;

            // 如果添加了其他的内置方法,要在这里加逻辑
            default:
                break;
            }
        }
Example #13
0
        public void Update_KnowledgePair()
        {
            ListBox knowledgePair_ListBox = ControlExtensions.FindControl <ListBox>(this, "knowledgePair_ListBox");

            if (knowledgePair_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定要修改的KnowledgePair!";
                return;
            }

            ListBox process_ListBox = ControlExtensions.FindControl <ListBox>(this, "process_ListBox");

            if (process_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定Process!";
                return;
            }

            ListBox attribute_ListBox = ControlExtensions.FindControl <ListBox>(this, "attribute_ListBox");

            if (attribute_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定Attribute!";
                return;
            }

            KnowledgePair knowledgePair = (KnowledgePair)knowledgePair_ListBox.SelectedItem;

            knowledgePair.Process             = (Process)process_ListBox.SelectedItem;
            knowledgePair.Attribute           = (Attribute)attribute_ListBox.SelectedItem;
            ResourceManager.mainWindowVM.Tips = "修改了KnowledgePair:" + knowledgePair;
        }
        private void init_event()
        {
            // 锁头按下时反转IsLock属性
            Lock lockControl = ControlExtensions.FindControl <Lock>(this, nameof(lockControl));

            lockControl.Tapped += reverseIsLock;
        }
Example #15
0
        public void Add_Knowledge()
        {
            ListBox process_ListBox = ControlExtensions.FindControl<ListBox>(this, "process_ListBox");
            if (process_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定Process!";
                return;
            }
            Process process = (Process)process_ListBox.SelectedItem;

            ListBox attribute_ListBox = ControlExtensions.FindControl<ListBox>(this, "attribute_ListBox");
            if (attribute_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定Attribute!";
                return;
            }
            Attribute attribute = (Attribute)attribute_ListBox.SelectedItem;

            ObservableCollection<Knowledge> knowledges = ((InitialKnowledge_EW_VM)DataContext).InitialKnowledge.Knowledges;
            // 判重
            foreach (Knowledge know in knowledges)
            {
                if (know.Process == process && know.Attribute == attribute)
                {
                    ResourceManager.mainWindowVM.Tips = "无效的操作。该单知识已经存在";
                    return;
                }
            }

            Knowledge knowledge = new Knowledge(process, attribute);
            knowledges.Add(knowledge);
            ResourceManager.mainWindowVM.Tips = "添加了Knowledge:" + knowledge;
        }
Example #16
0
        // 初始化.cs文件中的数据绑定,一些不方便在xaml中绑定的部分在这里绑定
        private void init_binding()
        {
            // 绑定Method的内置方法
            ListBox innerMethod_ListBox = ControlExtensions.FindControl <ListBox>(this, "innerMethod_ListBox");

            innerMethod_ListBox.Items = Method.InnerMethods;

            // 绑定内置Method的加密算法枚举
            ComboBox crypto_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "crypto_ComboBox");

            crypto_ComboBox.Items        = System.Enum.GetValues(typeof(Crypto));
            crypto_ComboBox.SelectedItem = Crypto.None;

            // 绑定CommMethod的InOut枚举
            ComboBox inout_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "inout_ComboBox");

            inout_ComboBox.Items        = System.Enum.GetValues(typeof(InOut));
            inout_ComboBox.SelectedItem = InOut.In;

            // 绑定CommMethod的CommWay枚举
            ComboBox commWay_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "commWay_ComboBox");

            commWay_ComboBox.Items        = System.Enum.GetValues(typeof(CommWay));
            commWay_ComboBox.SelectedItem = CommWay.NativeEthernetFrame;
        }
Example #17
0
        private void init_binding()
        {
            // 绑定Axiom的内置公理公式
            ListBox innerFormula_ListBox = ControlExtensions.FindControl <ListBox>(this, "innerFormula_ListBox");

            innerFormula_ListBox.Items = Axiom.InnerFormulas;
        }
Example #18
0
        public void Update_ZDMethod()
        {
            ListBox method_ZD_ListBox = ControlExtensions.FindControl <ListBox>(this, "method_ZD_ListBox");

            if (method_ZD_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定要更新的Method!";
                return;
            }

            ComboBox returnType_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "returnType_ComboBox");

            if (returnType_ComboBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定自定Method的返回类型!";
                return;
            }

            TextBox methodName_TextBox = ControlExtensions.FindControl <TextBox>(this, "methodName_TextBox");

            if (methodName_TextBox.Text == null || methodName_TextBox.Text.Length == 0)
            {
                ResourceManager.mainWindowVM.Tips = "需要给出自定Method的方法名!";
                return;
            }

            ObservableCollection <Attribute> parameters = ((Process_EW_VM)DataContext).ZDParams;

            if (parameters.Count == 0)
            {
                ResourceManager.mainWindowVM.Tips = "至少要在形参表中添加一个参数!";
                return;
            }

            Method method = (Method)method_ZD_ListBox.SelectedItem;

            if (methodName_TextBox.Text != method.Name && Checker.Process_Contain_PropName(VM.Process, methodName_TextBox.Text))
            {
                ResourceManager.mainWindowVM.Tips = "标识符重复!";
                return;
            }

            method.ReturnType   = (Type)returnType_ComboBox.SelectedItem;
            method.Name         = methodName_TextBox.Text;
            method.Parameters   = parameters;
            method.CryptoSuffix = Crypto.None;
            ResourceManager.mainWindowVM.Tips = "更新了自定Method:" + method;

            // 更新完成后,要将临时参数列表拿掉,这样再向临时参数列表中添加/更新内容也不会影响刚刚添加的Method
            // ((Process_EW_VM)DataContext).ZDParams = new ObservableCollection<Attribute>();

            // 【11月10日bugfix】更新完成后,将这个临时参数表复制一份保留
            ObservableCollection <Attribute> tmp = new ObservableCollection <Attribute>();

            foreach (Attribute attribute in ((Process_EW_VM)DataContext).ZDParams)
            {
                tmp.Add(new Attribute(attribute));
            }
            ((Process_EW_VM)DataContext).ZDParams = tmp;
        }
Example #19
0
        public void Update_ProcessMethod()
        {
            ListBox processMethod_ListBox = ControlExtensions.FindControl <ListBox>(this, "processMethod_ListBox");

            if (processMethod_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定要更新的ProcessMethod!";
                return;
            }
            ProcessMethod processMethod = (ProcessMethod)processMethod_ListBox.SelectedItem;

            ListBox process_ListBox = ControlExtensions.FindControl <ListBox>(this, "process_ListBox");

            if (process_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定进程模板!";
                return;
            }
            Process process = (Process)process_ListBox.SelectedItem;

            ListBox method_ListBox = ControlExtensions.FindControl <ListBox>(this, "method_ListBox");

            if (method_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定方法!";
                return;
            }
            Method method = (Method)method_ListBox.SelectedItem;

            processMethod.Process             = process;
            processMethod.Method              = method;
            ResourceManager.mainWindowVM.Tips = "更新了ProcessMethod:" + processMethod;
        }
Example #20
0
        // 初始化.cs文件中的事件处理方法,一些无法在xaml中绑定的部分在这里绑定
        private void init_event()
        {
            // 绑定自定Method右侧列表选中项变化的处理方法
            ListBox method_ZD_ListBox = ControlExtensions.FindControl <ListBox>(this, nameof(method_ZD_ListBox));

            method_ZD_ListBox.SelectionChanged += method_ZD_ListBox_Changed;
            // 发生点击的处理方法
            method_ZD_ListBox.Tapped += Utils.ListBox_Tapped;

            // 绑定CommMethod右侧列表选中项变化的处理方法
            ListBox commMethod_ListBox = ControlExtensions.FindControl <ListBox>(this, nameof(commMethod_ListBox));

            commMethod_ListBox.SelectionChanged += commMethod_ListBox_Changed;
            // 发生点击的处理方法
            commMethod_ListBox.Tapped += Utils.ListBox_Tapped;

            // 绑定内置Method列表选中项变化的处理方法
            ListBox innerMethod_ListBox = ControlExtensions.FindControl <ListBox>(this, nameof(innerMethod_ListBox));

            innerMethod_ListBox.SelectionChanged += innerMethod_ListBox_Changed;
            // 发生点击的处理方法
            innerMethod_ListBox.Tapped += Utils.ListBox_Tapped;

            // 绑定CommMethod的CommWay选中项变化的处理方法
            ComboBox commWay_ComboBox = ControlExtensions.FindControl <ComboBox>(this, nameof(commWay_ComboBox));

            commWay_ComboBox.SelectionChanged += commWay_ComboBox_Changed;
        }
Example #21
0
        // 进程模板选中项变化的处理
        private void process_ComboBox_Changed(object sender, SelectionChangedEventArgs e)
        {
            // 安全锁锁定时不做任何修改
            if (ObjLifeLineEWVM.SafetyLock)
            {
                return;
            }
            // 获取选中的Process
            ComboBox process_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "process_ComboBox");

            if (process_ComboBox.SelectedItem == null)
            {
                return;
            }
            Process process = (Process)process_ComboBox.SelectedItem;

            // 清空从该ObjLifeLine_VM出发的消息连线上的CommMethod
            foreach (Connector_VM connector_VM in ObjLifeLineEWVM.ObjLifeLine_VM.ConnectorVMs)
            {
                Message_VM message_VM = (Message_VM)connector_VM.ConnectionVM;
                if (message_VM != null && message_VM.Source == connector_VM)
                {
                    message_VM.CommMessage.CommMethod = null;
                }
            }
            // 提示
            ResourceManager.mainWindowVM.Tips = "进程模板被修改为[" + process.Name + "],旧的消息通信已清除";
        }
        public void Update_Confidential()
        {
            ListBox confidential_ListBox = ControlExtensions.FindControl <ListBox>(this, "confidential_ListBox");

            if (confidential_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定要修改的Confidential!";
                return;
            }

            ListBox process_Con_ListBox = ControlExtensions.FindControl <ListBox>(this, "process_Con_ListBox");

            if (process_Con_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定Process!";
                return;
            }

            ListBox attribute_Con_ListBox = ControlExtensions.FindControl <ListBox>(this, "attribute_Con_ListBox");

            if (attribute_Con_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定Attribute!";
                return;
            }

            Confidential confidential = (Confidential)confidential_ListBox.SelectedItem;

            confidential.Process              = (Process)process_Con_ListBox.SelectedItem;
            confidential.Attribute            = (Attribute)attribute_Con_ListBox.SelectedItem;
            ResourceManager.mainWindowVM.Tips = "修改了Confidential:" + confidential;
        }
Example #23
0
        // 进程模板选中项变化的处理
        private void process_ComboBox_Changed(object sender, SelectionChangedEventArgs e)
        {
            // 安全锁锁定时不做任何修改
            if (TopoNodeEWVM.SafetyLock)
            {
                return;
            }
            // 清空属性列表
            TopoNodeEWVM.TopoNode.Properties.Clear();
            // 获取选中的Process
            ComboBox process_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "process_ComboBox");

            if (process_ComboBox.SelectedItem == null)
            {
                return;
            }
            Process process = (Process)process_ComboBox.SelectedItem;

            // 构造这个属性列表
            foreach (Attribute attribute in process.Attributes)
            {
                if (attribute.Type is UserType) // 复合类型
                {
                    ReferenceInstance referenceInstance = ReferenceInstance.build((UserType)attribute.Type, attribute.Identifier);
                    TopoNodeEWVM.TopoNode.Properties.Add(referenceInstance);
                }
                else // 基本类型
                {
                    ValueInstance valueInstance = new ValueInstance(attribute.Type, attribute.Identifier);
                    TopoNodeEWVM.TopoNode.Properties.Add(valueInstance);
                }
            }
            ResourceManager.mainWindowVM.Tips = "进程模板被修改为[" + process.Name + "],例化对象已重新生成";
        }
Example #24
0
        // 初始化.cs文件中的数据绑定,一些不方便在xaml中绑定的部分在这里绑定
        private void init_binding()
        {
            // 绑定结点颜色枚举
            ComboBox color_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "color_ComboBox");

            color_ComboBox.Items = TopoNode.NodeColors;
        }
Example #25
0
        public void Add_Attribute()
        {
            ListBox type_ListBox = ControlExtensions.FindControl <ListBox>(this, "type_ListBox");

            if (type_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定成员类型!";
                return;
            }

            TextBox attrId_TextBox = ControlExtensions.FindControl <TextBox>(this, "attrId_TextBox");

            if (attrId_TextBox.Text == null || attrId_TextBox.Text.Length == 0)
            {
                ResourceManager.mainWindowVM.Tips = "需要给出成员名称!";
                return;
            }

            // todo 变量名判重

            Attribute attribute = new Attribute((sbid._M.Type)type_ListBox.SelectedItem, attrId_TextBox.Text);

            ((UserType_EW_VM)DataContext).UserType.Attributes.Add(attribute);
            ResourceManager.mainWindowVM.Tips = "为自定义类型[" + ((UserType_EW_VM)DataContext).UserType.Name + "]添加了成员变量:" + attribute;
        }
Example #26
0
        public void Update_Method()
        {
            ListBox method_ListBox = ControlExtensions.FindControl <ListBox>(this, "method_ListBox");

            if (method_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定要更新的Method!";
                return;
            }

            ComboBox returnType_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "returnType_ComboBox");

            if (returnType_ComboBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定自定Method的返回类型!";
                return;
            }

            TextBox methodName_TextBox = ControlExtensions.FindControl <TextBox>(this, "methodName_TextBox");

            if (methodName_TextBox.Text == null || methodName_TextBox.Text.Length == 0)
            {
                ResourceManager.mainWindowVM.Tips = "需要给出自定Method的方法名!";
                return;
            }

            if (((Method)method_ListBox.SelectedItem).Name != methodName_TextBox.Text && Checker.UserType_Contain_PropName(VM.UserType, methodName_TextBox.Text))
            {
                ResourceManager.mainWindowVM.Tips = "标识符重复!";
                return;
            }

            ObservableCollection <Attribute> parameters = ((UserType_EW_VM)DataContext).Params;

            Method method = new Method(
                (Type)returnType_ComboBox.SelectedItem,
                methodName_TextBox.Text,
                parameters,
                Crypto.None
                );

            string achieve = ((Method)method_ListBox.SelectedItem).Achieve;

            method.Achieve = achieve;

            VM.UserType.Methods[method_ListBox.SelectedIndex] = method;
            ResourceManager.mainWindowVM.Tips = "更新了自定Method:" + method;

            // 更新完成后,要将临时参数列表拿掉,这样再向临时参数列表中添加/更新内容也不会影响刚刚添加的Method
            // ((UserType_EW_VM)DataContext).Params = new ObservableCollection<Attribute>();

            // 【11月10日bugfix】更新完成后,将这个临时参数表复制一份保留
            ObservableCollection <Attribute> tmp = new ObservableCollection <Attribute>();

            foreach (Attribute attribute in ((UserType_EW_VM)DataContext).Params)
            {
                tmp.Add(new Attribute(attribute));
            }
            ((UserType_EW_VM)DataContext).Params = tmp;
        }
Example #27
0
        private void init_event()
        {
            // 锁头按下时反转IsLock属性
            Lock lockShape = ControlExtensions.FindControl <Lock>(this, "lockShape");

            lockShape.Tapped += reverseIsLock;
        }
Example #28
0
        // 写入继承关系
        public void Set_Parent()
        {
            ComboBox userType_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "userType_ComboBox");

            if (userType_ComboBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定UserType!";
                return;
            }
            // 选中的UserType
            UserType userType = (UserType)userType_ComboBox.SelectedItem;
            // 当前UserType
            UserType nowUserType = ((UserType_EW_VM)DataContext).UserType;

            // 判断环形继承
            if (JudgeLoopExtend(userType))
            {
                string way = userType.Parent == nowUserType ? "直接" : "间接";
                ResourceManager.mainWindowVM.Tips = "禁止!该操作会引起环形继承,因为" + userType.Name + way + "继承了" + nowUserType.Name;
                return;
            }

            // 设置继承关系
            nowUserType.Parent = userType;
            ResourceManager.mainWindowVM.Tips = "写入继承关系,使继承自UserType:" + userType.Name;
        }
Example #29
0
        public void Update_Param()
        {
            ListBox param_ListBox = ControlExtensions.FindControl <ListBox>(this, "param_ListBox");

            if (param_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要在临时参数列表中选定要修改的参数!";
                return;
            }

            ComboBox paramType_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "paramType_ComboBox");

            if (paramType_ComboBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定参数类型!";
                return;
            }

            TextBox paramName_TextBox = ControlExtensions.FindControl <TextBox>(this, "paramName_TextBox");

            if (paramName_TextBox.Text == null || paramName_TextBox.Text.Length == 0)
            {
                ResourceManager.mainWindowVM.Tips = "需要提供参数名称!";
                return;
            }

            Attribute attribute = (Attribute)param_ListBox.SelectedItem;

            attribute.Type       = (Type)paramType_ComboBox.SelectedItem;
            attribute.Identifier = paramName_TextBox.Text;
            ResourceManager.mainWindowVM.Tips = "已在临时参数列表中更新参数:" + attribute;
        }
Example #30
0
        public void Update_CommMethodPair()
        {
            ListBox commMethodPair_ListBox = ControlExtensions.FindControl <ListBox>(this, "commMethodPair_ListBox");

            if (commMethodPair_ListBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要在域内成员列表中选定要修改的成员!";
                return;
            }

            ComboBox process_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "process_ComboBox");

            if (process_ComboBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定进程模板!";
                return;
            }

            ComboBox commMethod_ComboBox = ControlExtensions.FindControl <ComboBox>(this, "commMethod_ComboBox");

            if (commMethod_ComboBox.SelectedItem == null)
            {
                ResourceManager.mainWindowVM.Tips = "需要选定通信方法!";
                return;
            }

            CommMethodPair commMethodPair = (CommMethodPair)commMethodPair_ListBox.SelectedItem;

            commMethodPair.Process            = (Process)process_ComboBox.SelectedItem;
            commMethodPair.CommMethod         = (CommMethod)commMethod_ComboBox.SelectedItem;
            ResourceManager.mainWindowVM.Tips = "已在临时域内成员列表中更新成员:" + commMethodPair;
        }