/// <summary> /// Update guidelines /// </summary> /// <returns></returns> private async Task UpdateLines() { double cellWidth = DesignerCanvas.GridCellWidth; double w = ModelDesignerCanvas.Width; double h = ModelDesignerCanvas.Height; //For progress dialog glitch-free opening await Task.Delay(500); var geometry = await Task.Run(() => DesignerCanvas.CreateGridWithStreamGeometry(h, w, cellWidth)); ModelDesignerCanvas.RefreshGuideLines(geometry); }
/// <summary> /// Deselect not selected element /// </summary> /// <param name="sender"></param> /// <param name="val"></param> private void ItemOnSelectionChange(object sender, bool val) { var conn = sender as ConnectionInfoViewModel; if (val) { foreach (ConnectionInfoViewModel info in ViewModel.ConnectionInfoViewModels.Where(t => !t.Equals(conn))) { info.IsSelected = false; } ModelDesignerCanvas.DeselectTables(); ModelDesignerCanvas.DeselectLabels(); _sourceModel = null; _destinationModel = null; } }
/// <summary> /// Render canvas to bitmap /// </summary> /// <returns>Rendered canvas</returns> private RenderTargetBitmap RenderCanvas() { Transform layoutTransform = ModelDesignerCanvas.LayoutTransform; ModelDesignerCanvas.LayoutTransform = null; double dpi = 300; double scale = dpi / 96; var size = new Size((int)ViewModel.CanvasWidth, (int)ViewModel.CanvasHeight); ModelDesignerCanvas.Measure(size); ModelDesignerCanvas.Arrange(new Rect(size)); RenderTargetBitmap render = new RenderTargetBitmap((int)(ViewModel.CanvasWidth * scale), (int)(ViewModel.CanvasHeight * scale), dpi, dpi, PixelFormats.Default); render.Render(ModelDesignerCanvas); ModelDesignerCanvas.LayoutTransform = layoutTransform; return(render); }
/// <summary> /// Dimensions changed /// </summary> /// <returns></returns> public async Task CanvasDimensionsChanged() { var settings = new MetroDialogSettings() { AnimateHide = true, AnimateShow = false }; var parent = VisualTreeHelperEx.FindAncestorByType <MetroWindow>(this); var progressController = await parent.ShowProgressAsync("Please wait...", "Guidelines are updating", false, settings); await UpdateLines(); await progressController.CloseAsync(); StreamGeometry geometry = DesignerCanvas.CreateGridWithStreamGeometry(ViewModel.CanvasHeight, ViewModel.CanvasWidth, DesignerCanvas.GridCellWidth); ModelDesignerCanvas.RefreshGuideLines(geometry); ViewModel.OnComputedPropertyChanged(); }
/// <summary> /// Mouse button up /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ModelDesignerCanvas_OnMouseUp(object sender, MouseButtonEventArgs e) { if (ViewModel.MouseMode == MouseMode.Select) { if (_isDraggingSelection) { var selectionRect = new System.Drawing.Rectangle((int)System.Windows.Controls.Canvas.GetLeft(SelectionBorder), (int)System.Windows.Controls.Canvas.GetTop(SelectionBorder), (int)SelectionBorder.Width, (int)SelectionBorder.Height); var rectanglesVm = ViewModel.TableViewModels.Where(t => DiagramFacade.GetTableRectangles(new[] { t }).FirstOrDefault().IntersectsWith(selectionRect)); IEnumerable <TableContent> contents = ModelDesignerCanvas.Children.OfType <TableContent>().Where(t => rectanglesVm.Any(s => s.Equals(t.TableViewModel))); foreach (TableContent content in contents) { content.IsSelected = true; } DragSelectionCanvas.Visibility = Visibility.Hidden; } ModelDesignerCanvas.ReleaseMouseCapture(); _dragSelectionStartPoint = null; _isDraggingSelection = false; } }
/// <summary> /// Export whole canva to XPS /// </summary> /// <param name="fileName">Path to file</param> public void ExportToXps(string fileName) { Transform layoutTransform = ModelDesignerCanvas.LayoutTransform; ModelDesignerCanvas.LayoutTransform = null; var size = new Size(ViewModel.CanvasWidth, ViewModel.CanvasHeight); ModelDesignerCanvas.Measure(size); ModelDesignerCanvas.Arrange(new Rect(size)); Package package = Package.Open(fileName, FileMode.Create); XpsDocument document = new XpsDocument(package); XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(document); writer.Write(ModelDesignerCanvas); document.Close(); package.Close(); ModelDesignerCanvas.LayoutTransform = layoutTransform; Output.WriteLine("FILE SAVED"); }
/// <summary> /// Show guidelines as grid in canvas /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ShowGuideLinesCommand_OnExecuted(object sender, ExecutedRoutedEventArgs e) { ViewModel.AreGuideLinesVisible = !ViewModel.AreGuideLinesVisible; ModelDesignerCanvas.SetGuideLinesVisible(ViewModel.AreGuideLinesVisible); }
/// <summary> /// Mouse clicked /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void ModelDesignerCanvasOnMouseDown(object sender, MouseButtonEventArgs e) { switch (ViewModel.MouseMode) { case MouseMode.Select: ModelDesignerCanvas.DeselectTables(); ModelDesignerCanvas.DeselectLabels(); _sourceModel = null; _destinationModel = null; DeselectConnections(); ModelDesignerCanvas.ResetZIndexes(); //Selection rectangle logic _dragSelectionStartPoint = e.GetPosition(ModelDesignerCanvas); ModelDesignerCanvas.CaptureMouse(); break; case MouseMode.NewTable: var origin = e.GetPosition(ModelDesignerCanvas); var table = new TableViewModel(new TableModel()); var nameDialog = new TableNameDialog { Owner = Window.GetWindow(this), Model = table.Model }; var res = nameDialog.ShowDialog(); if (res.HasValue) { if (res.Value) { MainWindow window = null; try { window = Window.GetWindow(this) as MainWindow; var facade = new DiagramFacade(ViewModel); bool addRes = facade.AddTable(table.Model.Title, (int)origin.X, (int)origin.Y); if (!addRes) { await window.ShowMessageAsync("Add new table", $"Table {table.Model.Title} already exists"); } else { OnTableCreated(); } } catch (Exception exception) when(exception is SqlException || exception is OracleException) { await window.ShowMessageAsync("Add new table", exception.Message); } } } ViewModel.MouseMode = MouseMode.Select; break; case MouseMode.NewLabel: var originLabel = e.GetPosition(ModelDesignerCanvas); ViewModel.LabelViewModels.Add(new LabelViewModel() { Left = originLabel.X, Top = originLabel.Y }); ViewModel.MouseMode = MouseMode.Select; break; } }