Пример #1
0
        /// <summary>
        /// 获取一个监视表格内所有被监视的软元件
        /// </summary>
        /// <param name="table">监视表格</param>
        static private void GetRegisters(MonitorVariableTable table)
        {
            foreach (ElementModel emodel in table.Elements)
            {
                string ivname = emodel.ShowName;
                if (!regids.ContainsKey(ivname))
                {
                    IValueModel ivmodel = null;
                    switch (emodel.ShowType)
                    {
                    case "BOOL":
                        ivmodel = ValueParser.ParseBitValue(ivname);
                        break;

                    case "WORD":
                    case "UWORD":
                    case "BCD":
                        ivmodel = ValueParser.ParseWordValue(ivname);
                        break;

                    case "DWORD":
                    case "UDWORD":
                        ivmodel = ValueParser.ParseDoubleWordValue(ivname);
                        break;

                    case "FLOAT":
                        ivmodel = ValueParser.ParseFloatValue(ivname);
                        break;
                    }
                    regs.Add(ivmodel);
                    regids.Add(ivname, regids.Count());
                }
            }
        }
Пример #2
0
 /// <summary>
 /// 写入一个梯形图元件
 /// </summary>
 /// <param name="bvmodel">元件</param>
 static private void Write(BaseViewModel bvmodel)
 {
     // 连线不必写入
     if (bvmodel is HorizontalLineViewModel ||
         bvmodel is VerticalLineViewModel)
     {
         return;
     }
     // 坐标,指令ID
     edata.Add(Int32_Low(bvmodel.X));
     edata.Add(Int32_Low(bvmodel.Y));
     edata.Add(Int32_Low(LadderInstViewModelPrototype.GetOrderFromCatalog(bvmodel.GetCatalogID())));
     // 写入每个软元件参数
     for (int i = 0; i < bvmodel.Model.ParaCount; i++)
     {
         IValueModel ivmodel = bvmodel.Model.GetPara(i);
         // 在软元件表中找到,写入ID
         if (regids.ContainsKey(ivmodel.ValueString))
         {
             int regid = regids[ivmodel.ValueString];
             edata.Add(Int32_Low(regid));
             edata.Add(Int32_High(regid));
         }
         // 写入0xFFFF表示空参数
         else
         {
             edata.Add(0xFF);
             edata.Add(0xFF);
         }
     }
 }
Пример #3
0
        protected object ResolveUntypedValue(object val, IValueModel mdl)
        {
            if (val == null)
            {
                return(null);
            }

            if (mdl is IObjectReferenceValueModel)
            {
                var objRefMdl = (IObjectReferenceValueModel)mdl;
                if (val is Guid)
                {
                    return(DataContext.FindPersistenceObject(DataContext.GetInterfaceType(objRefMdl.ReferencedClass.GetDataType()), (Guid)val));
                }
                else if (val is int)
                {
                    return(DataContext.FindPersistenceObject(DataContext.GetInterfaceType(objRefMdl.ReferencedClass.GetDataType()), (int)val));
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                return(val);
            }
        }
Пример #4
0
 public CompoundObjectPropertyViewModel(
     IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent,
     IValueModel mdl)
     : base(appCtx, dataCtx, parent, mdl)
 {
     CompoundObjectModel = (ICompoundObjectValueModel)mdl;
 }
Пример #5
0
 public async Task Update(IValueModel value)
 {
     if (await IdExist(value.Id))
     {
         await Task.Run(() => { _values.Find(v => v.Id == value.Id).Name = value.Name; }); return;
     }
     throw new KeyNotFoundException($"Id '{value.Id}' is not found.");
 }
Пример #6
0
 public override void SetPara(int id, IValueModel value)
 {
     switch (id)
     {
         case 0: Value = (BitValue)value; break;
         default: throw new ArgumentOutOfRangeException(String.Format("Index {0:d} out of range for parameters", id));
     }
 }
Пример #7
0
    public override void Bind(IValueModel <string> model)
    {
        base.Bind(model);

        if (Text == null)
        {
            Text = GetComponent <TMPro.TextMeshProUGUI>();
        }
    }
Пример #8
0
    public override void Bind(IValueModel <Sprite> model)
    {
        base.Bind(model);

        if (Image == null)
        {
            Image = GetComponentInChildren <Image>();
        }
    }
Пример #9
0
    public override void Bind(IValueModel <float> model)
    {
        base.Bind(model);

        if (Slider == null)
        {
            Slider = GetComponent <Slider>();
        }
    }
Пример #10
0
 public AssemblyReferenceViewModel(
     IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent,
     IValueModel mdl)
     : base(appCtx, dataCtx, parent, mdl)
 {
     //// TODO: use a static reference here
     //if (prop.GetReferencedObjectClass() != DataContext.GetQuery<ObjectClass>().Where(oc => oc.Name == "Assembly"))
     //{
     //    throw new ArgumentOutOfRangeException("prop", "Can only handle Assembly References");
     //}
 }
Пример #11
0
 public TypeRefPropertyViewModel(
     IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent,
     IValueModel mdl)
     : base(appCtx, dataCtx, parent, mdl)
 {
     // TODO: use a static reference here
     //if (prop.GetReferencedObjectClass().Name != "TypeRef")
     //{
     //    throw new ArgumentOutOfRangeException("prop", "Can only handle TypeRef References");
     //}
 }
Пример #12
0
 public TypeRefPropertyViewModel(
     IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent,
     IValueModel mdl)
     : base(appCtx, dataCtx, parent, mdl)
 {
     // TODO: use a static reference here
     //if (prop.GetReferencedObjectClass().Name != "TypeRef")
     //{
     //    throw new ArgumentOutOfRangeException("prop", "Can only handle TypeRef References");
     //}
 }
Пример #13
0
 public AssemblyReferenceViewModel(
     IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent,
     IValueModel mdl)
     : base(appCtx, dataCtx, parent, mdl)
 {
     //// TODO: use a static reference here
     //if (prop.GetReferencedObjectClass() != DataContext.GetQuery<ObjectClass>().Where(oc => oc.Name == "Assembly"))
     //{
     //    throw new ArgumentOutOfRangeException("prop", "Can only handle Assembly References");
     //}
 }
Пример #14
0
        public override void SetPara(int id, IValueModel value)
        {
            switch (id)
            {
            case 0: InputValue = (WordValue)value; break;

            case 1: OutputValue = (WordValue)value; break;

            default: throw new ArgumentOutOfRangeException(String.Format("Index {0:d} out of range for parameters of instruction 'NEGD'", id));
            }
        }
Пример #15
0
 public async Task <IValueModel> Add(IValueModel value)
 {
     return(await Task.Run(() =>
     {
         var maxId = _values.Max(v => v.Id);
         var newItem = new ValueModel {
             Id = maxId + 1, Name = value.Name
         };
         _values.Add(newItem);
         return newItem;
     }));
 }
Пример #16
0
        public override void SetPara(int id, IValueModel value)
        {
            switch (id)
            {
            case 0: COMPort = (WordValue)value; break;

            case 1: Table = ((StringValue)value).ValueString; break;

            case 2: Message = (WordValue)value; break;

            default: throw new ArgumentOutOfRangeException(String.Format("Index {0:d} out of range for parameters", id));
            }
        }
Пример #17
0
        public override void SetPara(int id, IValueModel value)
        {
            switch (id)
            {
            case 0: SourceValue = (WordValue)value; break;

            case 1: DestinationValue = (WordValue)value; break;

            case 2: Count = (WordValue)value; break;

            default: throw new ArgumentOutOfRangeException(String.Format("Index {0:d} out of range for parameters", id));
            }
        }
Пример #18
0
 private bool IsVariable(IValueModel model)
 {
     if (model is NullBitValue || model is NullWordValue || model is NullFloatValue ||
         model is NullDoubleWordValue || model is HDoubleWordValue || model is KDoubleWordValue ||
         model is KFloatValue || model is HWordValue || model is KWordValue ||
         model is StringValue || model is ArgumentValue)
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
Пример #19
0
        public ObjectReferenceViewModel(
            IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent,
            IValueModel mdl)
            : base(appCtx, dataCtx, parent, mdl)
        {
            ObjectReferenceModel = (IObjectReferenceValueModel)mdl;
            var relEnd = ObjectReferenceModel.RelEnd;

            if (relEnd == null && mdl.IsReadOnly)
            {
                // could be e.g. a calculated object ref property
                _allowClear         = false;
                _allowCreateNewItem = false;
                _allowDelete        = false;
                _allowSelectValue   = false;
            }
            else if (relEnd == null && !mdl.IsReadOnly)
            {
                // could be e.g. a filter
                _allowClear         = true;
                _allowCreateNewItem = false;
                _allowDelete        = false;
                _allowSelectValue   = true;
            }
            else
            {
                var rel = relEnd.Parent;
                if (rel != null)
                {
                    var relType = rel.GetRelationType();
                    if (relType == RelationType.one_n && rel.Containment == ContainmentSpecification.Independent)
                    {
                        _allowCreateNewItem = false; // search first
                    }
                    else if (relType == RelationType.one_one)
                    {
                        if ((rel.Containment == ContainmentSpecification.AContainsB && rel.A == relEnd) ||
                            (rel.Containment == ContainmentSpecification.BContainsA && rel.B == relEnd))
                        {
                            _allowSelectValue = false; // This end is creating the value, don't change another item
                        }
                        else
                        {
                            _allowCreateNewItem = false; // possibility to change parent, but do not create a new one
                        }
                    }
                }
            }
            dataCtx.IsElevatedModeChanged += new EventHandler(dataCtx_IsElevatedModeChanged);
        }
Пример #20
0
        public FilterArgumentConfig(IValueModel value, ViewModelDescriptor desc)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }
            if (desc == null)
            {
                throw new ArgumentNullException("desc");
            }

            this.Value         = value;
            this.ViewModelType = desc;
        }
Пример #21
0
        public override void SetPara(int id, IValueModel value)
        {
            switch (id)
            {
            case 0: ArgumentValue = (DoubleWordValue)value; break;

            case 1: VelocityValue = (DoubleWordValue)value; break;

            case 2: OutputValue1 = (BitValue)value; break;

            case 3: OutputValue2 = (BitValue)value; break;

            default: throw new ArgumentOutOfRangeException(String.Format("Index {0:d} out of range for parameters", id));
            }
        }
Пример #22
0
 static private void Initialize(LadderDiagramViewModel ldvmodel)
 {
     foreach (LadderNetworkViewModel lnvmodel in ldvmodel.GetNetworks())
     {
         foreach (BaseViewModel bvmodel in lnvmodel.GetElements())
         {
             BaseModel bmodel = bvmodel.Model;
             if (bmodel == null)
             {
                 continue;
             }
             if (bmodel is TONModel)
             {
                 TONModel    tmodel  = (TONModel)(bmodel);
                 IValueModel ivmodel = tmodel.TimerValue;
                 if (ivmodel.IsVariable)
                 {
                     continue;
                 }
                 if (ivmodel is TVWordValue)
                 {
                     int index = (int)(ivmodel.Index);
                     timers[index] = new SFCTimerModel(tmodel);
                 }
             }
             else
             {
                 for (int i = 0; i < bmodel.ParaCount; i++)
                 {
                     IValueModel ivmodel = bmodel.GetPara(i);
                     if (ivmodel is SBitValue)
                     {
                         int index = (int)(ivmodel.Index);
                         if (status[index] == null)
                         {
                             status[index] = new SFCStatusModel(ldvmodel);
                         }
                         else if (status[index].LDVModel != ldvmodel)
                         {
                             status[index] = new SFCInvalidStatusModel();
                         }
                     }
                 }
             }
         }
     }
 }
Пример #23
0
        private static void Setup(LadderNetworkViewModel lnvmodel)
        {
            foreach (BaseViewModel bvmodel in lnvmodel.GetElements())
            {
                bvmodel.ViewCtrl = smmanager;
                BaseModel bmodel = bvmodel.Model;
                if (bmodel == null)
                {
                    continue;
                }
                for (int i = 0; i < bmodel.ParaCount; i++)
                {
                    IValueModel          vmodel = bmodel.GetPara(i);
                    SimulateVariableUnit svunit = null;
                    if (vmodel.ValueString.Equals(String.Empty))
                    {
                        continue;
                    }
                    switch (vmodel.Type)
                    {
                    case LadderValueType.Bool:
                        svunit = smodel.GetVariableUnit(vmodel.ValueString, "BIT");
                        break;

                    case LadderValueType.Word:
                        svunit = smodel.GetVariableUnit(vmodel.ValueString, "WORD");
                        break;

                    case LadderValueType.DoubleWord:
                        svunit = smodel.GetVariableUnit(vmodel.ValueString, "DWORD");
                        break;

                    case LadderValueType.Float:
                        svunit = smodel.GetVariableUnit(vmodel.ValueString, "FLOAT");
                        break;

                    case LadderValueType.String:
                        svunit = new SimulateStringUnit(vmodel.ValueString);
                        break;
                    }
                    svunit.CanClose = false;
                    SimuMoniValueModel smvmodel = new SimuMoniValueModel(svunit, smodel);
                    bvmodel.SetValueModel(i, smvmodel);
                }
            }
        }
Пример #24
0
        public override void SetPara(int id, IValueModel value)
        {
            switch (id)
            {
            case 0: FunctionName = value.ValueString; break;

            case 1: Value1 = (ArgumentValue)value; break;

            case 2: Value2 = (ArgumentValue)value; break;

            case 3: Value3 = (ArgumentValue)value; break;

            case 4: Value4 = (ArgumentValue)value; break;

            default: throw new ArgumentOutOfRangeException(String.Format("Index {0:d} out of range for parameters", id));
            }
        }
Пример #25
0
    public CrewManagementViewModel(Settlement settlement)
    {
        GameVars   = Globals.GameVars;
        Settlement = settlement;

        Money        = new BoundModel <int>(GameVars.playerShipVariables.ship, nameof(GameVars.playerShipVariables.ship.currency));
        CrewCapacity = new BoundModel <int>(GameVars.playerShipVariables.ship, nameof(GameVars.playerShipVariables.ship.crewCapacity));

        CrewCount = ValueModel.Wrap(GameVars.playerShipVariables.ship.crewRoster)
                    .Select(c => c.Count());

        AvailableCrew = ValueModel.Wrap(settlement.availableCrew)
                        .Where(crew => !GameVars.playerShipVariables.ship.crewRoster.Contains(crew))
                        .Select(crew => new CrewManagementMemberViewModel(crew, OnCrewClicked, null));

        MyCrew = ValueModel.Wrap(GameVars.playerShipVariables.ship.crewRoster)
                 .Select(crew => new CrewManagementMemberViewModel(crew, OnCrewClicked, null));
    }
Пример #26
0
        private ElementModel GetElement(IValueModel model)
        {
            ElementModel elementmodel = new ElementModel();

            elementmodel.AddrType  = model.Base;
            elementmodel.StartAddr = model.Index;
            elementmodel.DataType  = GetDataType(model.Type);
            if (model.Offset != WordValue.Null)
            {
                elementmodel.IsIntrasegment   = true;
                elementmodel.IntrasegmentType = model.Offset.Base;
                elementmodel.IntrasegmentAddr = model.Offset.Index;
            }
            else
            {
                elementmodel.IsIntrasegment = false;
            }
            elementmodel.SetShowTypes();
            return(elementmodel);
        }
        public void UpdateComment()
        {
            foreach (TextBlock comment in comments)
            {
                if (G_Inst.Children.Contains(comment))
                {
                    G_Inst.Children.Remove(comment);
                }
            }
            comments.Clear();
            int rowid = 0;

            foreach (PLCOriginInst inst in insts)
            {
                BaseViewModel bvmodel = inst.ProtoType;
                if (bvmodel != null)
                {
                    TextBlock cmt = new TextBlock();
                    cmt.Visibility = iscommentmode
                        ? Visibility.Visible
                        : Visibility.Hidden;
                    cmt.Foreground = Brushes.Green;
                    cmt.Text       = "//";
                    BaseModel bmodel = bvmodel.Model;
                    for (int i = 0; i < bmodel.ParaCount; i++)
                    {
                        IValueModel ivmodel = bmodel.GetPara(i);
                        cmt.Text += String.Format("{0:s}:{1:s},",
                                                  ivmodel.ValueString,
                                                  ValueCommentManager.GetComment(ivmodel));
                    }
                    Grid.SetRow(cmt, rowid);
                    Grid.SetColumn(cmt, 7);
                    G_Inst.Children.Add(cmt);
                    comments.Add(cmt);
                }
                rowid++;
            }
        }
Пример #28
0
 /// <summary>
 /// 获得一个梯形图程序中所有已经使用的软元件
 /// </summary>
 /// <param name="ldvmodel">梯形图程序</param>
 static private void GetRegisters(LadderDiagramViewModel ldvmodel)
 {
     foreach (LadderNetworkViewModel lnvmodel in ldvmodel.GetNetworks())
     {
         foreach (BaseViewModel bvmodel in lnvmodel.GetElements())
         {
             if (bvmodel.Model == null)
             {
                 continue;
             }
             for (int i = 0; i < bvmodel.Model.ParaCount; i++)
             {
                 IValueModel ivmodel = bvmodel.Model.GetPara(i);
                 string      ivname  = ivmodel.ValueString;
                 if (!regids.ContainsKey(ivname))
                 {
                     regs.Add(ivmodel);
                     regids.Add(ivname, regids.Count());
                 }
             }
         }
     }
 }
Пример #29
0
        static private void Read(MainMonitor mmoni)
        {
            int sz = ReadE16();

            sz += eid;
            while (eid < sz)
            {
                string name = ReadTextE8();
                MonitorVariableTable mvtable = new MonitorVariableTable(name, mmoni);
                int count = (int)edata[eid++];
                while (count-- > 0)
                {
                    int          regid   = ReadE16();
                    IValueModel  ivmodel = regs[regid];
                    ElementModel emodel  = new ElementModel();
                    emodel.IsIntrasegment = ivmodel.IsVariable;
                    if (ivmodel is BitValue)
                    {
                        emodel.ShowType = "BOOL";
                    }
                    if (ivmodel is WordValue)
                    {
                        emodel.ShowType = "WORD";
                    }
                    if (ivmodel is DoubleWordValue)
                    {
                        emodel.ShowType = "DWORD";
                    }
                    if (ivmodel is FloatValue)
                    {
                        emodel.ShowType = "FLOAT";
                    }
                    emodel.ShowName = ivmodel.ValueString;
                    mvtable.AddElement(emodel);
                }
            }
        }
Пример #30
0
 private void Initialize(LadderNetworkViewModel lnvmodel)
 {
     foreach (BaseViewModel bvmodel in lnvmodel.GetElements())
     {
         bvmodel.ViewCtrl = this;
         BaseModel bmodel = bvmodel.Model;
         if (bmodel == null)
         {
             continue;
         }
         for (int i = 0; i < bmodel.ParaCount; i++)
         {
             IValueModel ivmodel = bmodel.GetPara(i);
             if (AssertValueModel(ivmodel))
             {
                 ElementModel elementmodel = new ElementModel();
                 elementmodel.AddrType  = ivmodel.Base;
                 elementmodel.StartAddr = ivmodel.Index;
                 elementmodel.DataType  = GetDataType(ivmodel.Type);
                 if (ivmodel.Offset != WordValue.Null)
                 {
                     elementmodel.IsIntrasegment   = true;
                     elementmodel.IntrasegmentType = ivmodel.Offset.Base;
                     elementmodel.IntrasegmentAddr = ivmodel.Offset.Index;
                 }
                 else
                 {
                     elementmodel.IsIntrasegment = false;
                 }
                 elementmodel.SetShowTypes();
                 _Add(elementmodel, false);
                 elementmodel = Get(elementmodel);
                 bvmodel.SetValueModel(i, elementmodel);
             }
         }
     }
 }
Пример #31
0
 public TagPropertyEditorViewModel(IViewModelDependencies dependencies, IZetboxContext dataCtx, ViewModel parent, IValueModel mdl)
     : base(dependencies, dataCtx, parent, mdl)
 {
 }
        protected object ResolveUntypedValue(object val, IValueModel mdl)
        {
            if (val == null) return null;

            if (mdl is IObjectReferenceValueModel)
            {
                var objRefMdl = (IObjectReferenceValueModel)mdl;
                if (val is Guid)
                {
                    return DataContext.FindPersistenceObject(DataContext.GetInterfaceType(objRefMdl.ReferencedClass.GetDataType()), (Guid)val);
                }
                else if (val is int)
                {
                    return DataContext.FindPersistenceObject(DataContext.GetInterfaceType(objRefMdl.ReferencedClass.GetDataType()), (int)val);
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return val;
            }
        }
Пример #33
0
 public CTUDModel(IValueModel _CountValue, IValueModel _EndValue)
 {
     CountValue = _CountValue;
     EndValue   = _EndValue;
 }
Пример #34
0
 public abstract void SetPara(int id, IValueModel value);
Пример #35
0
 public AnyReferencePropertyViewModel(IViewModelDependencies appCtx, IZetboxContext dataCtx, ViewModel parent, IValueModel mdl)
     : base(appCtx, dataCtx, parent, mdl)
 {
 }