private void PopulateCompassEditor(string direction) { // Populate the Compass Editor (top-right) in response to a selection change in // either the compass or exits list. There are four possibilities for direction: // - an existing compass direction // - a new compass direction // - not a compass direction // - null if (direction == null) { CompassEditor.Mode = CompassEditorControl.CompassEditorMode.NoSelection; return; } else if (!m_directionNames.Contains(direction)) { CompassEditor.Mode = CompassEditorControl.CompassEditorMode.NotACompassExit; return; } else if (m_directionListIndexes.ContainsKey(direction)) { CompassEditor.Mode = CompassEditorControl.CompassEditorMode.ExistingCompassExit; ExitListData data = (ExitListData)listView.Items[m_directionListIndexes[direction]]; CompassEditor.toName.Text = data.To; CompassEditor.ExitID = data.Name; CompassEditor.Destination = data.To; CompassEditor.DirectionName = direction; if (data.LookOnly) { CompassEditor.CorrespondingExitExists = false; CompassEditor.AllowCreateInverseExit = false; } else { // See if a corresponding exit exists in the "to" room bool exitsInverseExists = ExitsInverseExists(CompassEditor.Destination, direction); CompassEditor.CorrespondingExitExists = exitsInverseExists; CompassEditor.AllowCreateInverseExit = !exitsInverseExists; } } else { CompassEditor.Mode = CompassEditorControl.CompassEditorMode.NewCompassExit; CompassEditor.to.Items.Clear(); foreach (string objectName in m_controller.GetObjectNames("object") .Where(n => n != m_data.Name) .OrderBy(n => n, StringComparer.CurrentCultureIgnoreCase)) { CompassEditor.to.Items.Add(objectName); } CompassEditor.create.IsEnabled = false; CompassEditor.to.IsEnabled = true; CompassEditor.DirectionName = direction; CompassEditor.AllowCreateInverseExit = true; } CompassEditor.direction.Text = TextAdventures.Utility.Strings.CapFirst(direction); CompassEditor.chkCorresponding.IsChecked = DefaultCreateInverseSetting; }
public void Populate(IEditorData data) { m_data = data; listView.Items.Clear(); compassControl.Clear(); m_directionListIndexes.Clear(); CompassEditor.SimpleMode = m_controller.SimpleMode; PopulateCompassEditor(null); if (data != null) { IEnumerable<string> exits = m_controller.GetObjectNames("exit", data.Name, true); foreach (string exit in exits) { IEditorData exitData = m_controller.GetEditorData(exit); ExitListData exitListData = new ExitListData { Name = exitData.Name, ToRoom = exitData.GetAttribute("to") as IEditableObjectReference, Alias = exitData.GetAttribute("alias") as string, LookOnly = (exitData.GetAttribute("lookonly") as bool? == true) }; int addedIndex = listView.Items.Add(exitListData); if (m_directionNames.Contains(exitListData.Alias)) { int direction = m_directionNames.IndexOf(exitListData.Alias); compassControl.Populate(direction, exitListData.To, exitListData.LookOnly); m_directionListIndexes[exitListData.Alias] = addedIndex; } } } }