public void SelectDescriptionLine(int line) { UpdateState(); if (line == -1) { ClearSelection(); } else { DescriptionLineKind kind = activeDescription[line].kind; if (kind == DescriptionLineKind.Title) SetSelection(SelectionKind.Title, Id<CourseControl>.None, Id<CourseControl>.None, LegInsertionLoc.Normal, Id<ControlPoint>.None, Id<Special>.None, null, DescriptionLine.TextLineKind.None); else if (kind == DescriptionLineKind.SecondaryTitle) SetSelection(SelectionKind.SecondaryTitle, Id<CourseControl>.None, Id<CourseControl>.None, LegInsertionLoc.Normal, Id<ControlPoint>.None, Id<Special>.None, null, DescriptionLine.TextLineKind.None); else if (kind == DescriptionLineKind.Header2Box || kind == DescriptionLineKind.Header3Box) SetSelection(SelectionKind.Header, Id<CourseControl>.None, Id<CourseControl>.None, LegInsertionLoc.Normal, Id<ControlPoint>.None, Id<Special>.None, null, DescriptionLine.TextLineKind.None); else if (kind == DescriptionLineKind.Key) SetSelection(SelectionKind.Key, Id<CourseControl>.None, Id<CourseControl>.None, LegInsertionLoc.Normal, Id<ControlPoint>.None, Id<Special>.None, (Symbol) activeDescription[line].boxes[0], DescriptionLine.TextLineKind.None); else if (kind == DescriptionLineKind.Text) SetSelection(SelectionKind.TextLine, activeDescription[line].courseControlId, Id<CourseControl>.None, LegInsertionLoc.Normal, activeDescription[line].controlId, Id<Special>.None, null, activeDescription[line].textLineKind); else if (kind == DescriptionLineKind.Directive && ((Symbol)(activeDescription[line].boxes[0])).Id == "13.5control") SetSelection(SelectionKind.MapExchangeAtControl, activeDescription[line].courseControlId, Id<CourseControl>.None, LegInsertionLoc.Normal, activeDescription[line].controlId, Id<Special>.None, null, DescriptionLine.TextLineKind.None); else if (activeDescription[line].isLeg) SetSelection(SelectionKind.Leg, activeDescription[line].courseControlId, activeDescription[line].courseControlId2, LegInsertionLoc.Normal, activeDescription[line].controlId, Id<Special>.None, null, DescriptionLine.TextLineKind.None); else SetSelection(SelectionKind.Control, activeDescription[line].courseControlId, Id<CourseControl>.None, LegInsertionLoc.Normal, activeDescription[line].controlId, Id<Special>.None, null, DescriptionLine.TextLineKind.None); } }
// Given the text, create descriptions line for a title line with that text. Lines are split by vertical bars. private DescriptionLine[] GetTitleLineFromText(DescriptionLineKind kind, string text) { string[] texts = text.Split(new char[] { '|' }); int lineCount = texts.Length; DescriptionLine[] lines = new DescriptionLine[lineCount]; for (int index = 0; index < lineCount; ++index) { DescriptionLine line = new DescriptionLine(); line.kind = kind; line.boxes = new object[1]; line.boxes[0] = texts[index]; line.textual = texts[index]; lines[index] = line; } return(lines); }
// Update the selected line in the active description. void UpdateSelectedLine() { bool titleFound = false; if (selectionKind == SelectionKind.None || selectionKind == SelectionKind.Special) { selectedDescriptionLineFirst = selectedDescriptionLineLast = -1; return; } // Go through each line and try to find one that matches the selection. for (int line = 0; line < activeDescription.Length; ++line) { DescriptionLineKind lineKind = activeDescription[line].kind; if (selectionKind == SelectionKind.Title && lineKind == DescriptionLineKind.Title) { if (!titleFound) selectedDescriptionLineFirst = line; selectedDescriptionLineLast = line; titleFound = true; } if (selectionKind == SelectionKind.SecondaryTitle && lineKind == DescriptionLineKind.SecondaryTitle) { if (!titleFound) selectedDescriptionLineFirst = line; selectedDescriptionLineLast = line; titleFound = true; } if (selectionKind == SelectionKind.TextLine && (lineKind == DescriptionLineKind.Text && activeDescription[line].textLineKind == selectedTextLineKind && selectedCourseControl == activeDescription[line].courseControlId && selectedControl == activeDescription[line].controlId)) { if (!titleFound) selectedDescriptionLineFirst = line; selectedDescriptionLineLast = line; titleFound = true; } if (selectionKind == SelectionKind.Header && (lineKind == DescriptionLineKind.Header2Box || lineKind == DescriptionLineKind.Header3Box)) { selectedDescriptionLineFirst = selectedDescriptionLineLast = line; return; } if (selectionKind == SelectionKind.Key && (lineKind == DescriptionLineKind.Key && activeDescription[line].boxes[0] == selectedKeySymbol)) { selectedDescriptionLineFirst = selectedDescriptionLineLast = line; return; } if (selectionKind == SelectionKind.MapExchangeAtControl && lineKind == DescriptionLineKind.Directive && (activeDescription[line].boxes[0] is Symbol) && (activeDescription[line].boxes[0] as Symbol).Id == "13.5control" && selectedCourseControl == activeDescription[line].courseControlId) { selectedDescriptionLineFirst = selectedDescriptionLineLast = line; return; } if (selectionKind == SelectionKind.Control && (lineKind == DescriptionLineKind.Normal || lineKind == DescriptionLineKind.Directive) && !activeDescription[line].isLeg) { if (selectedCourseControl.IsNotNone && selectedCourseControl == activeDescription[line].courseControlId) { selectedControl = activeDescription[line].controlId; selectedDescriptionLineFirst = selectedDescriptionLineLast = line; return; } if (selectedCourseControl.IsNone && selectedControl.IsNotNone && selectedControl == activeDescription[line].controlId) { selectedDescriptionLineFirst = selectedDescriptionLineLast = line; return; } } if (selectionKind == SelectionKind.Leg && activeDescription[line].isLeg) { if (selectedCourseControl.IsNotNone && selectedCourseControl == activeDescription[line].courseControlId && selectedCourseControl2.IsNotNone && selectedCourseControl2 == activeDescription[line].courseControlId2) { selectedDescriptionLineFirst = selectedDescriptionLineLast = line; return; } } } if (titleFound) return; if (selectionKind == SelectionKind.Leg) { // Not all legs have a matching line. selectedDescriptionLineFirst = selectedDescriptionLineLast = -1; return; } // No matching line. selectedDescriptionLineFirst = selectedDescriptionLineLast = -1; if (selectionKind == SelectionKind.TextLine || selectionKind == SelectionKind.Key || selectionKind == SelectionKind.SecondaryTitle) { // no matching line found. The selection must be gone. ClearSelection(); } }
// Given the text, create descriptions line for a title line with that text. Lines are split by vertical bars. private DescriptionLine[] GetTitleLineFromText(DescriptionLineKind kind, string text) { string[] texts = text.Split(new char[] { '|' }); int lineCount = texts.Length; DescriptionLine[] lines = new DescriptionLine[lineCount]; for (int index = 0; index < lineCount; ++index) { DescriptionLine line = new DescriptionLine(); line.kind = kind; line.boxes = new object[1]; line.boxes[0] = texts[index]; line.textual = texts[index]; lines[index] = line; } return lines; }