Ignore:
Timestamp:
Jan 4, 2011, 7:23:10 AM (11 years ago)
Author:
matkovic
Message:

-fixed "Fit to Screen"
-fixed Scrollbars
-fixed Dragging
-added custom names
-New: IControl- Presentation
--Loading adjusted
-New: Multi selection
-New: Copy /Past (not complete)
-New: Multi Dragging
-New: PluginContainerView Highlighting added

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/View/Container/WorkSpaceEditorView.xaml.cs

    r2118 r2280  
    1919using Cryptool.Core;
    2020using Cryptool.PluginBase;
     21using System.Collections.ObjectModel;
     22using System.Windows.Threading;
    2123
    2224namespace WorkspaceManager.View.Container
     
    3335    public partial class WorkSpaceEditorView : UserControl
    3436    {
     37
     38        private Point? lastCenterPositionOnTarget;
     39        private Point? lastMousePositionOnTarget;
     40        private Point? lastDragPoint;
    3541        private Point previousDragPoint = new Point();
    3642        private ConnectorView selectedConnector;
     
    3844        private CryptoLineView dummyLine = new CryptoLineView();
    3945        private PluginContainerView currentFullViewContainer;
    40         private Panel root { get { return (this.ViewBox.Content as Panel); } }
     46        private Panel root { get { return (this.scrollViewer.Content as Panel); } }
    4147        private BottomBox bottomBox { get { return (BottomBoxParent.Child as BottomBox); } }
     48        public bool IsKeyMultiKeyDown;
    4249
    4350        public UserContentWrapper UserContentWrapper { get; set; }
     
    6269            setBaseControl(WorkspaceModel);                       
    6370            InitializeComponent();
    64             ViewBox.DataContext = root;
     71            CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
     72
     73            scrollViewer.DataContext = root;
     74            scrollViewer.ScrollChanged += OnScrollViewerScrollChanged;
     75            scrollViewer.PreviewMouseLeftButtonUp += OnMouseLeftButtonUp;
     76            scrollViewer.PreviewMouseWheel += OnPreviewMouseWheel;
     77
    6578            this.bottomBox.FitToScreen += new EventHandler<FitToScreenEventArgs>(bottomBox_FitToScreen);
    6679            this.UserContentWrapper = new UserContentWrapper(WorkspaceModel, bottomBox);
     
    6982        }
    7083
     84        void OnMouseMove(object sender, MouseEventArgs e)
     85        {
     86            if (lastDragPoint.HasValue)
     87            {
     88                Point posNow = e.GetPosition(scrollViewer);
     89
     90                double dX = posNow.X - lastDragPoint.Value.X;
     91                double dY = posNow.Y - lastDragPoint.Value.Y;
     92
     93                lastDragPoint = posNow;
     94
     95                scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset - dX);
     96                scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - dY);
     97            }
     98        }
     99
     100        private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
     101        {
     102            scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset - e.HorizontalChange);
     103            scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - e.VerticalChange);
     104            scrollViewer.Cursor = Cursors.SizeAll;
     105        }
     106
     107        void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
     108        {
     109            lastMousePositionOnTarget = Mouse.GetPosition(scrollViewer);
     110
     111            if (e.Delta > 0)
     112            {
     113                Properties.Settings.Default.EditScale += 0.2;
     114            }
     115            if (e.Delta < 0)
     116            {
     117                Properties.Settings.Default.EditScale -= 0.2;
     118            }
     119
     120            e.Handled = true;
     121        }
     122
     123        void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
     124        {
     125            scrollViewer.Cursor = Cursors.Arrow;
     126            scrollViewer.ReleaseMouseCapture();
     127            lastDragPoint = null;
     128        }
     129
     130        void OnScrollViewerScrollChanged(object sender, ScrollChangedEventArgs e)
     131        {
     132            if (e.ExtentHeightChange != 0 || e.ExtentWidthChange != 0)
     133            {
     134                Point? targetBefore = null;
     135                Point? targetNow = null;
     136
     137                if (!lastMousePositionOnTarget.HasValue)
     138                {
     139                    if (lastCenterPositionOnTarget.HasValue)
     140                    {
     141                        var centerOfViewport = new Point(scrollViewer.ViewportWidth / 2,
     142                                                         scrollViewer.ViewportHeight / 2);
     143                        Point centerOfTargetNow =
     144                              scrollViewer.TranslatePoint(centerOfViewport, scrollViewer);
     145
     146                        targetBefore = lastCenterPositionOnTarget;
     147                        targetNow = centerOfTargetNow;
     148                    }
     149                }
     150                else
     151                {
     152                    targetBefore = lastMousePositionOnTarget;
     153                    targetNow = Mouse.GetPosition(scrollViewer);
     154
     155                    lastMousePositionOnTarget = null;
     156                }
     157
     158                if (targetBefore.HasValue)
     159                {
     160                    double dXInTargetPixels = targetNow.Value.X - targetBefore.Value.X;
     161                    double dYInTargetPixels = targetNow.Value.Y - targetBefore.Value.Y;
     162
     163                    double multiplicatorX = e.ExtentWidth / scrollViewer.Width;
     164                    double multiplicatorY = e.ExtentHeight / scrollViewer.Height;
     165
     166                    double newOffsetX = scrollViewer.HorizontalOffset -
     167                                        dXInTargetPixels * multiplicatorX;
     168                    double newOffsetY = scrollViewer.VerticalOffset -
     169                                        dYInTargetPixels * multiplicatorY;
     170
     171                    if (double.IsNaN(newOffsetX) || double.IsNaN(newOffsetY))
     172                    {
     173                        return;
     174                    }
     175
     176                    scrollViewer.ScrollToHorizontalOffset(newOffsetX);
     177                    scrollViewer.ScrollToVerticalOffset(newOffsetY);
     178                }
     179            }
     180        }
     181
     182        void CompositionTarget_Rendering(object sender, EventArgs e)
     183        {
     184            if ((Keyboard.GetKeyStates(Key.LeftCtrl) & KeyStates.Down) > 0)
     185            {
     186                IsKeyMultiKeyDown = true;
     187            }
     188            else
     189                IsKeyMultiKeyDown = false;
     190
     191            if ((Keyboard.GetKeyStates(Key.LeftCtrl) & Keyboard.GetKeyStates(Key.C) & KeyStates.Down) > 0)
     192            {
     193                Copy();
     194            }
     195
     196            if ((Keyboard.GetKeyStates(Key.LeftCtrl) & Keyboard.GetKeyStates(Key.V) & KeyStates.Down) > 0)
     197            {
     198                Paste();
     199            }
     200        }
     201
     202        public void Copy()
     203        {
     204            if (IsMouseOver)
     205            {
     206                List<PluginModel> list = new List<PluginModel>();
     207                foreach (PluginContainerView plugin in Model.SelectedPluginsList)
     208                {
     209                    list.Add(plugin.Model);
     210                }
     211
     212                PluginCopyWrapper w = new PluginCopyWrapper(list.ToArray());
     213                Clipboard.SetData("PluginCopy", w);
     214                var v = Clipboard.GetData("PluginCopy");
     215            }
     216        }
     217
     218        public void Paste()
     219        {
     220            if (IsMouseOver)
     221            {
     222                PluginCopyWrapper v = (PluginCopyWrapper)Clipboard.GetData("PluginCopy");
     223
     224                if (!(v is PluginCopyWrapper))
     225                    return;
     226
     227                foreach (PluginModel model in v.Model)
     228                {
     229                    //this.loadPluginContainerView(model);
     230                    model.WorkspaceModel = this.Model;
     231                    model.generateConnectors();
     232                    this.AddPluginContainerView(model.Position, model);
     233                }
     234
     235                //foreach (ConnectionModel connModel in Model.AllConnectionModels)
     236                //{
     237                //    CryptoLineView conn = new CryptoLineView(connModel);
     238                //    connModel.UpdateableView = conn;
     239                //    connModel.OnDelete += DeleteConnection;
     240
     241                //    foreach (UIElement element in root.Children)
     242                //    {
     243                //        PluginContainerView container = element as PluginContainerView;
     244                //        if (container != null)
     245                //        {
     246                //            foreach (ConnectorView connector in container.ConnectorViewList)
     247                //            {
     248                //                if (connModel.From == connector.Model)
     249                //                {
     250                //                    conn.StartPointSource = connector;
     251                //                    conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(connector));
     252                //                }
     253                //                else if (connModel.To == connector.Model)
     254                //                {
     255                //                    conn.EndPointSource = connector;
     256                //                    conn.SetBinding(CryptoLineView.EndPointProperty, CreateConnectorBinding(connector));
     257                //                }
     258                //            }
     259                //        }
     260                //    }
     261
     262                //    root.Children.Add(conn);
     263                //    ConnectionList.Add(conn);
     264                //    Canvas.SetZIndex(conn, 0);
     265                //}
     266            }
     267        }
     268
     269       
     270
    71271        void bottomBox_FitToScreen(object sender, FitToScreenEventArgs e)
    72272        {
    73273
    74             if (root.Children.Count != 0)
    75             {
    76                 if (root.DesiredSize.Height < ViewBoxParent.ActualHeight)
    77                     Properties.Settings.Default.EditScale = ViewBoxParent.ActualHeight / root.DesiredSize.Height;
    78 
    79                 if (root.DesiredSize.Width < ViewBoxParent.ActualWidth)
    80                     Properties.Settings.Default.EditScale = ViewBoxParent.ActualWidth / root.DesiredSize.Width;
    81                 this.UpdateLayout();
    82                 if (root.ActualWidth > root.ActualHeight)
    83                 {
    84                     this.UpdateLayout();
    85                     Properties.Settings.Default.EditScale = ViewBoxParent.ActualWidth / root.ActualWidth;
    86                     return;
    87                 }
    88                 else if (root.ActualWidth < root.ActualHeight)
    89                 {
    90 
    91                     this.UpdateLayout();
    92                     Properties.Settings.Default.EditScale = ViewBoxParent.ActualHeight / root.ActualHeight;
    93                     return;
    94                 }
     274            if (scrollViewer.ScrollableWidth > 0 || scrollViewer.ScrollableHeight > 0)
     275            {
     276                while (Properties.Settings.Default.EditScale > Properties.Settings.Default.MinScale && (scrollViewer.ScrollableHeight > 0 || scrollViewer.ScrollableWidth > 0))
     277                {
     278                    Properties.Settings.Default.EditScale -= 0.02;
     279                    scrollViewer.UpdateLayout();
     280                }
     281            }
     282            else
     283            {
     284                while (Properties.Settings.Default.EditScale < Properties.Settings.Default.MaxScale && scrollViewer.ScrollableHeight == 0 && scrollViewer.ScrollableWidth == 0)
     285                {
     286                    Properties.Settings.Default.EditScale += 0.02;
     287                    scrollViewer.UpdateLayout();
     288                }
     289                if (scrollViewer.ScrollableHeight > 0 || scrollViewer.ScrollableWidth > 0)
     290                    Properties.Settings.Default.EditScale -= 0.02;
    95291            }
    96292        }
     
    98294        private void setBaseControl(WorkspaceModel WorkspaceModel)
    99295        {
    100             //this.MouseLeftButtonDown += new MouseButtonEventHandler(WorkSpaceEditorView_OnMouseLeftButtonDown);
    101296            this.MouseLeave += new MouseEventHandler(WorkSpaceEditorView_MouseLeave);
    102297            this.Loaded += new RoutedEventHandler(WorkSpaceEditorView_Loaded);
     
    375570        internal void Load(WorkspaceModel WorkspaceModel)
    376571        {
    377             this.Model = WorkspaceModel;   
     572            this.Model = WorkspaceModel;
    378573
    379574            foreach (PluginModel model in this.Model.AllPluginModels)
    380575            {
    381                 this.loadPluginContainerView(model);
     576                bool skip = false;
     577                foreach (ConnectorModel connModel in model.InputConnectors)
     578                {
     579                    if (connModel.IControl && connModel.InputConnections.Count > 0)
     580                    {
     581                        skip = true;
     582                        break;
     583                    }
     584                }
     585                if(!skip)
     586                    this.loadPluginContainerView(model);
    382587            }
    383588            foreach (ConnectionModel connModel in WorkspaceModel.AllConnectionModels)
    384589            {
     590                if (connModel.To.IControl)
     591                    continue;
     592
    385593                CryptoLineView conn = new CryptoLineView(connModel);
    386594                connModel.UpdateableView = conn;
     
    445653        }
    446654
    447         private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
    448         {
    449             double y = e.VerticalChange, x = e.HorizontalChange;
    450 
    451             ViewBox.ScrollToHorizontalOffset(x);
    452             ViewBox.ScrollToVerticalOffset(y);
    453         }
    454 
    455655        private void Thumb_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
    456656        {
     657        }
     658    }
     659
     660    [Serializable]
     661    public class PluginCopyWrapper
     662    {
     663        public PluginModel[] Model { get; private set; }
     664
     665        public PluginCopyWrapper(PluginModel[] model)
     666        {
     667            this.Model = model;
    457668        }
    458669    }
Note: See TracChangeset for help on using the changeset viewer.