Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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;
            }
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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();
        }
Beispiel #5
0
        /// <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;
            }
        }
Beispiel #6
0
        /// <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");
        }
Beispiel #7
0
 /// <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);
 }
Beispiel #8
0
        /// <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;
            }
        }