private void SwapLayers(List<string> newLayerNames) { List<UndoRedoLayerAddRemove> undoLayers = new List<UndoRedoLayerAddRemove>(); // Remove existing layers for (int cntr = pnlLayers.Children.Count - 2; cntr >= 0; cntr--) { LayerRow layer = (LayerRow)pnlLayers.Children[cntr + 1]; // adding one, because AllLayers is at zero layer.LayerVisibilityChanged -= new EventHandler(Layer_LayerVisibilityChanged); layer.GotFocus -= new RoutedEventHandler(LayerRow_GotFocus); pnlLayers.Children.RemoveAt(cntr + 1); undoLayers.Add(new UndoRedoLayerAddRemove(cntr, false, layer.LayerName)); } // Add new layers for (int cntr = 0; cntr < newLayerNames.Count; cntr++) { LayerRow layer = new LayerRow(this.Options.EditorColors); layer.LayerName = newLayerNames[cntr]; layer.IsLayerVisible = true; layer.LayerVisibilityChanged += new EventHandler(Layer_LayerVisibilityChanged); layer.GotFocus += new RoutedEventHandler(LayerRow_GotFocus); pnlLayers.Children.Add(layer); undoLayers.Add(new UndoRedoLayerAddRemove(cntr, true, layer.LayerName)); } undoLayers.Reverse(); // they need to be undone in opossite order AddNewUndoRedoItem(undoLayers.ToArray()); }
private void UndoRedo_LayerAdd(UndoRedoLayerAddRemove[] items) { foreach (UndoRedoLayerAddRemove item in items) { LayerRow layer = new LayerRow(_options.EditorColors); //layer.LayerName = "Layer " + (item.LayerIndex + 1).ToString(); layer.LayerName = item.Name; layer.IsLayerVisible = true; layer.LayerVisibilityChanged += new EventHandler(Layer_LayerVisibilityChanged); layer.GotFocus += new RoutedEventHandler(LayerRow_GotFocus); pnlLayers.Children.Insert(item.LayerIndex + 1, layer); // row at zero is AllLayers, so it's shifted by one _parts.Insert(item.LayerIndex, new List<DesignPart>()); ChangeLayer(item.LayerIndex, true); } }
private void btnNewLayer_Click(object sender, RoutedEventArgs e) { try { LayerRow layer = new LayerRow(_options.EditorColors); if (pnlLayers.Children.Count == 0) { layer.LayerName = "All Layers"; layer.IsLayerVisible = true; layer.CanEditName = false; layer.ShouldShowVisibility = false; } else { layer.LayerName = "Layer " + (pnlLayers.Children.Count).ToString(); // using count instead of count + 1, because 0 is all layers layer.IsLayerVisible = true; layer.LayerVisibilityChanged += new EventHandler(Layer_LayerVisibilityChanged); } layer.GotFocus += new RoutedEventHandler(LayerRow_GotFocus); pnlLayers.Children.Add(layer); if (pnlLayers.Children.Count > 1) // AllLayers doesn't count as an actual layer, it just lets you manipulate parts regardless what layer they are on { _parts.Add(new List<DesignPart>()); ChangeLayer(_parts.Count - 1, false); } if (pnlLayers.Children.Count > 2) // don't let them undo the first layer { AddNewUndoRedoItem(new UndoRedoLayerAddRemove[] { new UndoRedoLayerAddRemove(_currentLayerIndex, true, layer.LayerName) }); } } catch (Exception ex) { MessageBox.Show(ex.ToString(), _msgboxCaption, MessageBoxButton.OK, MessageBoxImage.Error); } }