private void AddSignalboxHoursToView(SignalboxHoursSet hoursSet)
        {
            foreach (var box in hoursSet.Hours.Values.Select(b => b.Signalbox))
            {
                if (!_signalboxHoursColumnMap.ContainsKey(box.Id))
                {
                    int colIdx = dgvHours.Columns.Add(new DataGridViewTextBoxColumn
                    {
                        HeaderText       = box.Code,
                        DefaultCellStyle = new DataGridViewCellStyle {
                            Alignment = DataGridViewContentAlignment.MiddleCenter
                        }
                    });
                    _signalboxHoursColumnMap.Add(box.Id, colIdx);
                }
            }
            int rowIdx = dgvHours.Rows.Add(dgvHours.RowTemplate.Clone());

            dgvHours[_signalboxHoursIdColumn, rowIdx].Value       = hoursSet.Id;
            dgvHours[_signalboxHoursCategoryColumn, rowIdx].Value = hoursSet.Category;
            foreach (var hours in hoursSet.Hours.Values)
            {
                if (hours.StartTime != null && hours.EndTime != null)
                {
                    dgvHours[_signalboxHoursColumnMap[hours.Signalbox.Id], rowIdx].Value = hours.ToString(Model.Options.ClockType);
                }
            }
        }
Example #2
0
        /// <summary>
        /// Convert a <see cref="SignalboxHoursSetModel" /> instance to a <see cref="SignalboxHoursSet" /> instance.
        /// </summary>
        /// <param name="model">The object to convert.</param>
        /// <param name="signalboxes">A dictionary of known signalboxes, for resolving references.</param>
        /// <param name="existingSets">An enumeration of existing signalbox hours sets, to ensure this routine does not duplicate the ID of an existing set.</param>
        /// <returns>A <see cref="SignalboxHoursSet" /> containing the same data as the <c>model</c> parameter with references resolved.</returns>
        /// <exception cref="NullReferenceException">Thrown if the <c>model</c> parameter is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">Thrown if the <c>signalboxes</c> or <c>existingSets</c> parameters are <c>null</c>.</exception>
        public static SignalboxHoursSet ToSignalboxHoursSet(
            this SignalboxHoursSetModel model,
            IDictionary <string, Signalbox> signalboxes,
            IEnumerable <SignalboxHoursSet> existingSets)
        {
            if (model is null)
            {
                throw new NullReferenceException();
            }
            if (signalboxes is null)
            {
                throw new ArgumentNullException(nameof(signalboxes));
            }
            if (existingSets is null)
            {
                throw new ArgumentNullException(nameof(existingSets));
            }

            SignalboxHoursSet hoursSet = new SignalboxHoursSet {
                Id = GeneralHelper.GetNewId(existingSets), Category = model.Category
            };

            foreach (SignalboxHoursModel hoursModel in model.Signalboxes)
            {
                SignalboxHours hours = hoursModel.ToSignalboxHours(signalboxes);
                hoursSet.Hours.Add(hours.Signalbox.Id, hours);
            }
            return(hoursSet);
        }
        public void SignalboxHoursSetExtensionsClass_ToSignalboxHoursSetModelMethod_ThrowsArgumentNullException_IfParameterIsNull()
        {
            SignalboxHoursSet testObject = null;

            _ = testObject.ToSignalboxHoursSetModel();

            Assert.Fail();
        }
Example #4
0
        public void SignalboxHoursSetModelExtensionsClass_ToSignalboxHoursSetMethod_ReturnsObjectWithHoursPropertyContainingCorrectNumberOfElements()
        {
            SignalboxHoursSetModel          testParam0 = GetTestObject();
            IDictionary <string, Signalbox> testParam1 = GetSignalboxCollectionWithItems(testParam0.Signalboxes.Select(s => s.SignalboxId));
            IEnumerable <SignalboxHoursSet> testParam2 = GetExistingSets();

            SignalboxHoursSet testOutput = testParam0.ToSignalboxHoursSet(testParam1, testParam2);

            Assert.AreEqual(testParam0.Signalboxes.Count, testOutput.Hours.Count);
        }
Example #5
0
        public void SignalboxHoursSetModelExtensionsClass_ToSignalboxHoursSetMethod_ReturnsObjectWithCorrectCategoryProperty()
        {
            SignalboxHoursSetModel          testParam0 = GetTestObject();
            IDictionary <string, Signalbox> testParam1 = GetSignalboxCollectionWithItems(testParam0.Signalboxes.Select(s => s.SignalboxId));
            IEnumerable <SignalboxHoursSet> testParam2 = GetExistingSets();

            SignalboxHoursSet testOutput = testParam0.ToSignalboxHoursSet(testParam1, testParam2);

            Assert.AreEqual(testParam0.Category, testOutput.Category);
        }
Example #6
0
        public void SignalboxHoursSetModelExtensionsClass_ToSignalboxHoursSetMethod_ReturnsObjectWithIdPropertyThatDiffersFromIdsOfContentsOfThirdParameter()
        {
            SignalboxHoursSetModel          testParam0 = GetTestObject();
            IDictionary <string, Signalbox> testParam1 = GetSignalboxCollectionWithItems(testParam0.Signalboxes.Select(s => s.SignalboxId));
            IEnumerable <SignalboxHoursSet> testParam2 = GetExistingSets();

            SignalboxHoursSet testOutput = testParam0.ToSignalboxHoursSet(testParam1, testParam2);

            Assert.IsFalse(testParam2.Any(s => s.Id == testOutput.Id));
        }
Example #7
0
        public void SignalboxHoursSetModelExtensionsClass_ToSignalboxHoursSetMethod_ReturnsObjectWithHoursPropertyContainingElementsWithCorrectSignalboxProperties()
        {
            SignalboxHoursSetModel          testParam0 = GetTestObject();
            IDictionary <string, Signalbox> testParam1 = GetSignalboxCollectionWithItems(testParam0.Signalboxes.Select(s => s.SignalboxId));
            IEnumerable <SignalboxHoursSet> testParam2 = GetExistingSets();

            SignalboxHoursSet testOutput = testParam0.ToSignalboxHoursSet(testParam1, testParam2);

            foreach (string id in testParam0.Signalboxes.Select(s => s.SignalboxId))
            {
                Assert.AreSame(testParam1[id], testOutput.Hours[id].Signalbox);
            }
        }
Example #8
0
        public void SignalboxHoursSetModelExtensionsClass_ToSignalboxHoursSetMethod_ReturnsObjectWithHoursPropertyContainingCorrectlyIndexedElements()
        {
            SignalboxHoursSetModel          testParam0 = GetTestObject();
            IDictionary <string, Signalbox> testParam1 = GetSignalboxCollectionWithItems(testParam0.Signalboxes.Select(s => s.SignalboxId));
            IEnumerable <SignalboxHoursSet> testParam2 = GetExistingSets();

            SignalboxHoursSet testOutput = testParam0.ToSignalboxHoursSet(testParam1, testParam2);

            foreach (KeyValuePair <string, SignalboxHours> item in testOutput.Hours)
            {
                Assert.AreEqual(item.Key, item.Value.Signalbox.Id);
            }
        }
        public void SignalboxHoursSetExtensionsClass_ToSignalboxHoursSetModelMethod_ThrowsArgumentNullExceptionWithCorrectParamNameProperty_IfParameterIsNull()
        {
            SignalboxHoursSet testObject = null;

            try
            {
                _ = testObject.ToSignalboxHoursSetModel();
                Assert.Fail();
            }
            catch (ArgumentNullException ex)
            {
                Assert.AreEqual("hoursSet", ex.ParamName);
            }
        }
Example #10
0
        /// <summary>
        /// Convert a <see cref="SignalboxHoursSet" /> instance into a <see cref="SignalboxHoursSetModel" /> instance.
        /// </summary>
        /// <param name="hoursSet">The data to be converted.</param>
        /// <returns>A <see cref="SignalboxHoursSetModel" /> instance that is equivalent to the hoursSet parameter.</returns>
        public static SignalboxHoursSetModel ToSignalboxHoursSetModel(this SignalboxHoursSet hoursSet)
        {
            if (hoursSet is null)
            {
                throw new ArgumentNullException(nameof(hoursSet));
            }

            SignalboxHoursSetModel model = new SignalboxHoursSetModel
            {
                Category = hoursSet.Category,
            };

            model.Signalboxes.AddRange(hoursSet.Hours.Values.Select(h => h.ToSignalboxHoursModel()));
            return(model);
        }
        /// <summary>
        /// Convert a <see cref="SignalboxHoursSet" /> instance to a <see cref="SignalboxHoursSetModel" /> instance.
        /// </summary>
        /// <param name="set">The object to convert.</param>
        /// <returns>A <see cref="SignalboxHoursSetModel" /> instance containing the same data as the parameter in serialisable form.</returns>
        /// <exception cref="NullReferenceException">Thrown if the parameter is <c>null</c>.</exception>
        public static SignalboxHoursSetModel ToYamlSignalboxHoursSetModel(this SignalboxHoursSet set)
        {
            if (set is null)
            {
                throw new NullReferenceException();
            }

            SignalboxHoursSetModel shsm = new SignalboxHoursSetModel
            {
                Category = set.Category,
            };

            shsm.Signalboxes.AddRange(set.Hours.Values.Select(h => h.ToYamlSignalboxHoursModel()));
            return(shsm);
        }
        private void EditSignalboxHoursSet(SignalboxHoursSet selectedSignalboxHoursSet)
        {
            using (SignalboxHoursSetEditForm form = new SignalboxHoursSetEditForm
            {
                Model = new SignalboxHoursSetEditFormModel {
                    Data = selectedSignalboxHoursSet.Copy(), InputMode = Model.Options.ClockType
                }
            })
            {
                DialogResult result = form.ShowDialog();
                Log.Trace("SignalboxHoursSetEditForm.ShowDialog() returned {0}", result);
                if (result != DialogResult.OK)
                {
                    return;
                }

                form.Model.Data.CopyTo(selectedSignalboxHoursSet);
            }
        }
Example #13
0
        public void SignalboxHoursSetModelExtensionsClass_ToSignalboxHoursSetMethod_ReturnsObjectWithHoursPropertyContainingElementsWithCorrectTokenBalanceWarningProperty()
        {
            SignalboxHoursSetModel          testParam0 = GetTestObject();
            IDictionary <string, Signalbox> testParam1 = GetSignalboxCollectionWithItems(testParam0.Signalboxes.Select(s => s.SignalboxId));
            IEnumerable <SignalboxHoursSet> testParam2 = GetExistingSets();
            Dictionary <string, bool?>      tokenBalanceWarningFlags = new Dictionary <string, bool?>();

            foreach (SignalboxHoursModel box in testParam0.Signalboxes)
            {
                tokenBalanceWarningFlags.Add(box.SignalboxId, box.TokenBalanceWarning);
            }

            SignalboxHoursSet testOutput = testParam0.ToSignalboxHoursSet(testParam1, testParam2);

            foreach (string id in testParam0.Signalboxes.Select(s => s.SignalboxId))
            {
                Assert.AreEqual(tokenBalanceWarningFlags[id] ?? false, testOutput.Hours[id].TokenBalanceWarning);
            }
        }
        private void BtnEdit_Click(object sender, EventArgs e)
        {
            if (tcMain.SelectedTab == tabHours)
            {
                Log.Trace("MainForm Edit button clicked (signalbox hours mode");
                SignalboxHoursSet selectedSignalboxHoursSet = GetSelectedSignalboxHoursSet();
                if (selectedSignalboxHoursSet != null)
                {
                    EditSignalboxHoursSet(selectedSignalboxHoursSet);
                }
                return;
            }
            Log.Trace("MainForm Edit button clicked (normal mode)");
            string trainId = GetSelectedTrainId();

            if (trainId == null)
            {
                return;
            }
            EditTrain(trainId);
        }
Example #15
0
        public void SignalboxHoursSetModelExtensionsClass_ToSignalboxHoursSetMethod_ReturnsObjectWithHoursPropertyContainingElementsWithCorrectEndTimeProperty_IfFirstParameterHasSignalboxesPropertyContainingElementsWithFinishTimePropertiesThatHaveTimePropertyThatIsMoreThanThreeNumbersWithinRangeSeparatedByColons()
        {
            SignalboxHoursSetModel                      testParam0 = GetTestObject();
            IDictionary <string, Signalbox>             testParam1 = GetSignalboxCollectionWithItems(testParam0.Signalboxes.Select(s => s.SignalboxId));
            IEnumerable <SignalboxHoursSet>             testParam2 = GetExistingSets();
            Dictionary <string, TimeOfDaySpecification> timeSpecs  = new Dictionary <string, TimeOfDaySpecification>();

            foreach (SignalboxHoursModel box in testParam0.Signalboxes)
            {
                TimeOfDaySpecification timeSpec = new TimeOfDaySpecification(TimeOfDaySpecification.TimeOfDaySpecificationKind.HoursMinutesSecondsAndMore);
                box.FinishTime = timeSpec.Model;
                timeSpecs.Add(box.SignalboxId, timeSpec);
            }

            SignalboxHoursSet testOutput = testParam0.ToSignalboxHoursSet(testParam1, testParam2);

            foreach (string id in testParam0.Signalboxes.Select(s => s.SignalboxId))
            {
                Assert.AreEqual(timeSpecs[id].Hours.Value, testOutput.Hours[id].EndTime.Hours24);
                Assert.AreEqual(timeSpecs[id].Minutes.Value, testOutput.Hours[id].EndTime.Minutes);
                Assert.AreEqual(timeSpecs[id].Seconds.Value, testOutput.Hours[id].EndTime.Seconds);
            }
        }
 private void DeleteSignalboxHoursSet(SignalboxHoursSet selectedSignalboxHoursSet)
 {
     Model.SignalboxHoursSets.Remove(selectedSignalboxHoursSet);
 }