コード例 #1
0
            public EditorSyncedSettings(SyncedSettings settingsObject, string prefsKeyPrefix)
            {
                if (settingsObject == null)
                {
                    Debug.LogError("Settings object must not be null!");
                }

                m_syncedSettings     = settingsObject as SyncedSettings;
                m_serializedSettings = new SerializedObject(settingsObject);
                m_prefsKeyPrefix     = prefsKeyPrefix;

                if (m_syncedSettings == null)
                {
                    Debug.LogError("Settings object must implement interface ISyncedSettings.");
                }
                if (m_prefsKeyPrefix == string.Empty)
                {
                    Debug.LogError("Prefs key prefix must not be empty."
                                   + "This is to prevent collisions with other data, so make it unique please!");
                }

                string userVersionName = m_syncedSettings.GetUserVersionPropertyName();

                m_userVersionProperty = m_serializedSettings.FindProperty(userVersionName);

                m_properties = new List <SerializedProperty>();

                BindingFlags bindingFlags =
                    (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

                FieldInfo[] fieldInfos = settingsObject.GetType().GetFields(bindingFlags);
                foreach (FieldInfo fieldInfo in fieldInfos)
                {
                    if (fieldInfo.GetCustomAttributes(typeof(NonSyncedAttribute), false).Length > 0)
                    {
                        continue;
                    }

                    SerializedProperty prop = m_serializedSettings.FindProperty(fieldInfo.Name);
                    if (prop != null)
                    {
                        m_properties.Add(prop);
                    }
                }
            }
コード例 #2
0
        public void LoadData(string listId)
        {
            try
            {
                //LOAD DATA BASED ON LIST ID
                using (var uow = SimpleIoc.Default.GetInstance <IUnitOfWorkFactory>().CreateUnitOfWork())
                {
                    pickupList     = uow.PickupListRepository.GetById(listId, "Field.Farm.Client", "AssignedModules");
                    syncedSettings = uow.SyncedSettingsRepo.GetAll().FirstOrDefault();

                    if (pickupList.Destination == PickupListDestination.GIN_YARD && pickupList.AssignedModules.Count(m => m.ModuleStatus == ModuleStatus.IN_FIELD) > 0)
                    {
                        var firstModule = pickupList.AssignedModules.First();
                        FieldLat  = firstModule.Latitude;
                        FieldLong = firstModule.Longitude;
                    }
                    else if (pickupList.Destination == PickupListDestination.GIN_FEEDER && pickupList.AssignedModules.Count(m => m.ModuleStatus == ModuleStatus.AT_GIN) > 0)
                    {
                        var firstModule = pickupList.AssignedModules.First();
                        FieldLat  = firstModule.Latitude;
                        FieldLong = firstModule.Longitude;
                    }

                    if (FieldLat == 0.000 || FieldLong == 0.000)
                    {
                        FieldLat  = pickupList.Latitude;
                        FieldLong = pickupList.Longitude;
                    }

                    ListName = pickupList.Name;
                    Client   = pickupList.ClientName;
                    Farm     = pickupList.FarmName;
                    Field    = pickupList.Field.Name;

                    if (syncedSettings == null)
                    {
                        pickupList.ModulesPerLoad = 4;
                    }
                    else
                    {
                        pickupList.ModulesPerLoad = syncedSettings.ModulesPerLoad;
                    }

                    ModulesInField = pickupList.ModulesRemaining;
                    ModulesLoaded  = pickupList.AssignedModules.Count(c => AggregateDataProvider.SerialNumbersOnTruck.Contains(c.Name));

                    //adjust modules in field by modules on truck
                    if (pickupList.Destination == PickupListDestination.GIN_YARD)
                    {
                        foreach (var module in pickupList.AssignedModules.Where(s => s.ModuleStatus == ModuleStatus.IN_FIELD && AggregateDataProvider.SerialNumbersOnTruck.Any(x => x == s.Name)))
                        {
                            ModulesInField--;
                        }
                    }
                    else if (pickupList.Destination == PickupListDestination.GIN_FEEDER)
                    {
                        foreach (var module in pickupList.AssignedModules.Where(s => s.ModuleStatus == ModuleStatus.AT_GIN && AggregateDataProvider.SerialNumbersOnTruck.Any(x => x == s.Name)))
                        {
                            ModulesInField--;
                        }
                    }

                    ModulesOnList   = pickupList.TotalModules;
                    LoadsCompleted  = pickupList.LoadsCompleted;
                    LoadsRemaining  = pickupList.LoadsRemaining;
                    DestinationName = pickupList.DestinationName;

                    setLoadsRemaining();

                    HasCheckedModules = false;

                    System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        foreach (var m in ListModules)
                        {
                            m.PropertyChanged -= MVm_PropertyChanged;
                        }

                        Modules.Clear();
                        ListModules.Clear();
                        foreach (var m in pickupList.AssignedModules.OrderBy(s => s.Name))
                        {
                            //using not thread safe version of serial numbers on truck because this event gets fired
                            //inside a lock on the _aggregateEvents in the provider
                            //using the threadsafe property will cause a thread lock on the same property
                            var mVm = new ModuleViewModel {
                                Loaded = AggregateDataProvider.SerialNumbersOnTruckNotThreadSafe.Contains(m.Name), Latitude = m.Latitude, Longitude = m.Longitude, SerialNumber = m.Name
                            };
                            mVm.ShowOnMap = (m.ModuleStatus == ModuleStatus.IN_FIELD && pickupList.Destination == PickupListDestination.GIN_YARD) ||
                                            (m.ModuleStatus == ModuleStatus.AT_GIN && pickupList.Destination == PickupListDestination.GIN_FEEDER);
                            Modules.Add(mVm);

                            if (mVm.ShowOnMap || mVm.Loaded)
                            {
                                mVm.PropertyChanged += MVm_PropertyChanged;
                                ListModules.Add(mVm);
                            }
                        }
                    }));
                }
            }
            catch (Exception exc)
            {
                Logging.Logger.Log(exc);
            }
        }