public static HistoricalCourseEditorState ToCourseEditorState(this CourseData courseData) { var selectedPropType = PropType.RingNormal; var propOrder = ImmutableList <PropId> .Empty; var props = ImmutableDictionary <PropId, EditorProp> .Empty; for (int i = 0; i < courseData.Props.Count; i++) { var prop = courseData.Props[i]; var editorProp = new EditorProp { Id = PropId.CreateRandomId(), PropType = prop.PropType, Transform = prop.Transform }; propOrder = propOrder.Add(editorProp.Id); props = props.Add(editorProp.Id, editorProp); selectedPropType = editorProp.PropType; } // Automatically select the first prop if possible //var selectedProp = propOrder.Count > 0 ? Maybe.Just(propOrder[0]) : Maybe.Nothing<PropId>(); var selectedProp = Maybe.Nothing <PropId>(); return(new HistoricalCourseEditorState(courseData.Id, selectedPropType, selectedProp, props, propOrder, false, false)); }
public static HistoricalCourseEditorState AddProp(this HistoricalCourseEditorState state, ImmutableTransform transform) { var propId = PropId.CreateRandomId(); var newProp = new EditorProp { Id = propId, PropType = state.SelectedPropType, Transform = transform }; // Immediately select the newly created prop var selectedProp = Maybe.Just(propId); return(state.Update(selectedProp, state.Props.Add(newProp.Id, newProp), state.PropOrder.Add(propId))); }
public static HistoricalCourseEditorState SelectPropType(this HistoricalCourseEditorState state, PropType propType) { var newProps = ImmutableDictionary <PropId, EditorProp> .Empty; var newPropOrder = ImmutableList <PropId> .Empty; var newSelectedProp = Maybe.Nothing <PropId>(); for (int i = 0; i < state.PropOrder.Count; i++) { var oldProp = state.Props[state.PropOrder[i]]; var newProp = new EditorProp { Id = PropId.CreateRandomId(), PropType = propType, Transform = oldProp.Transform }; newProps = newProps.Add(newProp.Id, newProp); newPropOrder = newPropOrder.Add(newProp.Id); if (state.SelectedProp.Equals(Maybe.Just(oldProp.Id))) { newSelectedProp = Maybe.Just(newProp.Id); } } return(new HistoricalCourseEditorState(state.Id, propType, newSelectedProp, newProps, newPropOrder, state.IsUndoPossibe, state.IsRedoPossibe)); }