public void NewLayer(double PixelHeight, double PixelWidth) { string layerName = "NewLayer" + LayersWidgets.Count; var layer = new Layer(layerName, PixelWidth, PixelHeight, 1, 1, 1, 2, 1); mainCanvas.Children.Add(layer); LayersWidgets.Add(layer.Widget); layer.Background = new SolidColorBrush(Colors.White); // Replace layer to top of the list LayerWidget last = LayersWidgets.Last(); for (int i = LayersWidgets.Count - 1; i > 0; i--) { LayersWidgets[i] = LayersWidgets[i - 1]; } LayersWidgets[0] = last; if (widgetsCanvas.Items.Count > 0) { widgetsCanvas.SelectedIndex = 0; } GlobalState.LayersCount = mainCanvas.Children.Count; widgetsCanvas.SelectedIndex = GlobalState.LayersCount; GlobalState.CurrentLayerIndex = widgetsCanvas.SelectedIndex; }
private void DeleteLayer_Click(object sender, RoutedEventArgs e) { int index = GlobalState.CurrentLayerIndex; if (LayersWidgets.Count > 0 && index <= LayersWidgets.Count) { var layer = LayersWidgets[index].ThisLayer; LayerWidget widget = layer.Widget; layer.Children.Clear(); mainCanvas.Children.Remove(layer); LayersWidgets.Remove(widget); widgetsCanvas.Items.Refresh(); if (index != 0) { widgetsCanvas.SelectedIndex = GlobalState.CurrentLayerIndex = index - 1; } else { widgetsCanvas.SelectedIndex = GlobalState.CurrentLayerIndex = 0; } } GlobalState.LayersCount = mainCanvas.Children.Count; UpdateLayersZIndex(); }
/// <summary> /// Добавление нового слоя на холст и обновление коллекции виджетов /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LayerAdd_Click(object sender, RoutedEventArgs e) { var layer = new LayerControl(); MainCanvas.Children.Add(layer); LayersWidgets.Add(layer.Widget); // Перемещение элемента в самый верх списка, для наглядности отображения верхних слоев пользователю LayerWidget last = LayersWidgets.Last(); for (int i = LayersWidgets.Count - 1; i > 0; i--) { LayersWidgets[i] = LayersWidgets[i - 1]; } LayersWidgets[0] = last; GlobalState.LayersIndexes++; if (LayerList.Items.Count > 0) { LayerList.SelectedIndex = 0; } layer.CheckedChanged += SelectLayer; layer.Delete += DeleteLayer; }
/// <summary> /// new layer /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LayerAdd_Click(object sender, RoutedEventArgs e) { var layer = new LayerControl(); MainCanvas.Children.Add(layer); LayersWidgets.Add(layer.Widget); // new level ZOrder to top LayerWidget last = LayersWidgets.Last(); for (int i = LayersWidgets.Count - 1; i > 0; i--) { LayersWidgets[i] = LayersWidgets[i - 1]; } LayersWidgets[0] = last; GlobalState.LayersIndexes++; if (LayerList.Items.Count > 0) { LayerList.SelectedIndex = 0; } layer.CheckedChanged += SelectLayer; layer.Delete += DeleteLayer; }
// LAYERS SWAP / OPACITY private void SwapLayers(int curIndx, int nextIndx) { LayerWidget curWidget = LayersWidgets[curIndx]; LayerWidget nextWidget = LayersWidgets[nextIndx]; LayersWidgets[curIndx] = LayersWidgets[nextIndx]; LayersWidgets[nextIndx] = curWidget; UpdateLayersZIndex(); GlobalState.CurrentLayerIndex = nextIndx; widgetsCanvas.SelectedIndex = GlobalState.CurrentLayerIndex; }
/// <summary> /// Обмен слоев местами /// </summary> /// <param name="curIndx">Индекс выделенного слоя</param> /// <param name="nextIndx">Индекс обмениваемого слоя</param> private void SwapLayers(int curIndx, int nextIndx) { LayerWidget curWidget = LayersWidgets[curIndx]; LayerWidget nextWidget = LayersWidgets[nextIndx]; LayersWidgets[curIndx] = LayersWidgets[nextIndx]; LayersWidgets[nextIndx] = curWidget; LayerList.SelectedIndex = nextIndx; int curZIndex = Panel.GetZIndex(MainCanvas.Children[curWidget.ThisLayer.LayerIndex]); int nextZIndex = Panel.GetZIndex(MainCanvas.Children[nextWidget.ThisLayer.LayerIndex]); Panel.SetZIndex(MainCanvas.Children[curWidget.ThisLayer.LayerIndex], nextZIndex); Panel.SetZIndex(MainCanvas.Children[nextWidget.ThisLayer.LayerIndex], curZIndex); }
/// <summary> /// Изменение фокуса слоя, выделенного в отображаемом списке виджетов /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LayerList_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (LayerList.SelectedItems.Count > 0) { LayerWidget selectedWidget = LayersWidgets[LayerList.SelectedIndex]; UIElement layer = MainCanvas.Children[selectedWidget.ThisLayer.LayerIndex]; layer.Focus(); foreach (LayerControl child in MainCanvas.Children) { if (child != layer) { child.NonFocus(null, null); } } } }
private void LayerList_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (LayerList.SelectedItems.Count > 0) { LayerWidget selectedWidget = LayersWidgets[LayerList.SelectedIndex]; object layer = null; if (MainCanvas.Children.Count > selectedWidget.ThisLayer.LayerIndex) { layer = MainCanvas.Children[selectedWidget.ThisLayer.LayerIndex]; } if (layer != null && layer is UIElement) { (layer as UIElement).Focus(); } else { return; } foreach (var child in MainCanvas.Children) { if (child is LayerControl && child != layer) { LayerControl layCtrl = child as LayerControl; layCtrl.NonFocus(null, null); } } } if (LayersWidgets.Count == 0) { return; } if (LayerList.SelectedIndex < 0) { LayerList.SelectedIndex = 0; } var selectedObj = LayersWidgets[LayerList.SelectedIndex]; var host = selectedObj.ThisLayer.VisualHost; SizeX.Text = Math.Round(host.SpaceSize.Width, 0).ToString(); SizeY.Text = Math.Round(host.SpaceSize.Height, 0).ToString(); }