/// <summary> /// Called when a mouse button was pressed. /// </summary> public void OnButtonPress(ButtonPressEventArgs args) { Vector2 mousePos = new Vector2((float)args.Event.X, (float)args.Event.Y); ModifierType modifierMask = Accelerator.DefaultModMask; bool shift = (args.Event.State & modifierMask) == ModifierType.ShiftMask; if (args.Event.Button == 1) // left click { MeshInfo underCursor = GetMeshAtScreenPos(mousePos); ModifyMeshInfosOperation op = new ModifyMeshInfosOperation(); // clear current selection unless shift is pressed if (!shift) { MeshManager.Instance.SelectedMeshes.ForEach(m => m.IsSelected = false); } if (underCursor != null) { underCursor.IsActive = true; } op.Complete(); } }
/// <summary> /// Removes all selected meshes. The operation is added to the undo stack. /// </summary> public void DeleteSelected() { ModifyMeshInfosOperation op = new ModifyMeshInfosOperation(); RemoveMeshes(SelectedMeshes); op.Complete(); }
/// <summary> /// Called when a visibility checkbox has changed. /// </summary> private void OnVisibleToggled(object o, ToggledArgs args) { TreePath path = new TreePath(args.Path); TreeIter iter; if (m_listStore.GetIter(out iter, path)) { ModifyMeshInfosOperation op = new ModifyMeshInfosOperation(); m_ignoreListSelection = true; m_indexToMesh[path.Indices[0]].IsVisible = !(bool)m_listStore.GetValue(iter, 0); op.Complete(); } }
/// <summary> /// Makes every mesh visible. The operation is added to the undo stack. /// </summary> public void ShowAll() { ModifyMeshInfosOperation op = new ModifyMeshInfosOperation(); m_meshes.ForEach(m => m.IsSelected = false); foreach (MeshInfo mesh in m_meshes.Where(m => !m.IsVisible)) { mesh.IsVisible = true; mesh.IsSelected = true; } op.Complete(); }
/// <summary> /// Makes every mesh visible. The operation is added to the undo stack. /// </summary> public void HideSelected() { ModifyMeshInfosOperation op = new ModifyMeshInfosOperation(); foreach (MeshInfo mesh in m_meshes) { if (mesh.IsSelected) { mesh.IsVisible = false; } } op.Complete(); }
/// <summary> /// Delects all meshes if any are selected and selects all meshes is none are selected. /// The operation is added to the undo stack. /// </summary> public void ToggleSelected() { ModifyMeshInfosOperation op = new ModifyMeshInfosOperation(); if (m_meshes.Any(m => m.IsSelected)) { m_meshes.ForEach(m => m.IsSelected = false); } else { m_meshes.ForEach(m => m.IsSelected = m.IsVisible); } op.Complete(); }
/// <summary> /// Adds meshes to the loaded mesh list. The operation is added to the undo stack. /// </summary> /// <param name="meshes">The meshes to add.</param /// <returns>The mesh infos for the added meshes.</returns> public List <MeshInfo> AddMeshes(IEnumerable <Mesh> meshes) { ModifyMeshInfosOperation op = new ModifyMeshInfosOperation(); List <MeshInfo> meshInfos = new List <MeshInfo>(); foreach (Mesh mesh in meshes) { meshInfos.Add(new MeshInfo(mesh)); } AddMeshes(meshInfos); op.Complete(); return(meshInfos); }
/// <summary> /// Called when the selected elements of the list view has changed. /// </summary> private void OnListSelectionChanged(object sender, System.EventArgs e) { if (!m_ignoreListSelection) { ModifyMeshInfosOperation op = new ModifyMeshInfosOperation(); // deselect old selection List <MeshInfo> oldSelection = MeshManager.Instance.SelectedMeshes; oldSelection.ForEach(m => m.IsSelected = false); List <MeshInfo> newSelected = GetSelectedMeshes().Where(m => !oldSelection.Contains(m)).ToList(); newSelected.ForEach(m => m.IsSelected = true); if (newSelected.Count > 0) { if (oldSelection.Count > 0 && m_meshToIndex[oldSelection.First()] < m_meshToIndex[newSelected.First()]) { newSelected.Last().IsActive = true; } else { newSelected.First().IsActive = true; } } op.Complete(); } else { m_treeView.Selection.Changed -= OnListSelectionChanged; m_treeView.Selection.UnselectAll(); foreach (KeyValuePair <MeshInfo, int> meshPath in m_meshToIndex) { if (meshPath.Key.IsSelected) { TreePath path = new TreePath(meshPath.Value.ToString()); m_treeView.Selection.SelectPath(path); } } m_ignoreListSelection = false; m_treeView.Selection.Changed += OnListSelectionChanged; } }