Changeset 2383


Ignore:
Timestamp:
Jan 19, 2011, 11:43:55 AM (10 years ago)
Author:
matkovic
Message:

-fixed a Line issue
-Path finding only at "Mouse-Drop"

Location:
trunk/CrypPlugins/WorkspaceManager/View
Files:
4 edited

Legend:

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

    r2280 r2383  
    2424using System.Collections.ObjectModel;
    2525using Cryptool.PluginBase.Control;
     26using System.Collections;
    2627namespace WorkspaceManager.View.Container
    2728{
     
    106107           typeof(PluginContainerView),
    107108           new UIPropertyMetadata(Visibility.Collapsed, null));
     109
     110        public static readonly DependencyProperty IsDragStartedDependencyProperty = DependencyProperty.Register("IsDragStarted", typeof(bool), typeof(PluginContainerView), null);
     111
     112        [TypeConverter(typeof(bool))]
     113        public bool IsDragStarted
     114        {
     115            get { return (bool)base.GetValue(IsDragStartedDependencyProperty); }
     116            set
     117            {
     118                base.SetValue(IsDragStartedDependencyProperty, value);
     119            }
     120        }
    108121
    109122
     
    527540            this.CTextBox.Text = Model.Name;
    528541            this.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(PluginContainerView_MouseLeftButtonDown);
     542            this.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(PluginContainerView_PreviewMouseLeftButtonUp);
    529543            //this.MouseEnter += new MouseEventHandler(PluginContainerView_MouseEnter);
    530544            //this.MouseLeave += new MouseEventHandler(PluginContainerView_MouseLeave);
     545        }
     546
     547        void PluginContainerView_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
     548        {
     549            IsDragStarted = false;
    531550        }
    532551
     
    543562        void PluginContainerView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    544563        {
    545             if (!Model.WorkspaceModel.SelectedPluginsList.Contains(this) && Model.WorkspaceModel.WorkspaceEditor.IsKeyMultiKeyDown)
     564            if (!Model.WorkspaceModel.SelectedPluginsList.Contains(this) && Model.WorkspaceModel.WorkspaceEditor.IsCtrlToggled)
    546565            {
    547566                Model.WorkspaceModel.SelectedPluginsList.Add(this);
    548567                IsSelected = true;
    549568            }
    550             else if (!Model.WorkspaceModel.WorkspaceEditor.IsKeyMultiKeyDown)
     569            else if (!Model.WorkspaceModel.WorkspaceEditor.IsCtrlToggled)
    551570            {
    552571                foreach (PluginContainerView plugin in Model.WorkspaceModel.SelectedPluginsList)
     
    558577                IsSelected = true;
    559578            }
     579
     580            IsDragStarted = true;
    560581        }
    561582
     
    889910        private void Thumb_DragDelta_1(object sender, DragDeltaEventArgs e)
    890911        {
    891             foreach (PluginContainerView plugin in Model.WorkspaceModel.SelectedPluginsList)
    892             {
    893                 plugin.SetPosition(new Point((Math.Round((Canvas.GetLeft(plugin) + e.HorizontalChange) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale,
    894                                                                 (Math.Round((Canvas.GetTop(plugin) + e.VerticalChange) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale));
    895 
    896                 if (plugin.GetPosition().X == 0 || plugin.GetPosition().Y == 0)
    897                     break;
     912            List<PluginContainerView> list = new List<PluginContainerView>(Model.WorkspaceModel.SelectedPluginsList);
     913            list.Sort((a,b) => a.GetPosition().X.CompareTo(b.GetPosition().X));
     914            foreach (PluginContainerView plugin in list)
     915            {
     916                Point p = new Point((Math.Round((Canvas.GetLeft(plugin) + e.HorizontalChange) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale,
     917                                                                (Math.Round((Canvas.GetTop(plugin) + e.VerticalChange) / Properties.Settings.Default.GridScale)) * Properties.Settings.Default.GridScale);
     918
     919                if (p.X <= 0 || p.Y <= 0)
     920                    break;
     921
     922                plugin.SetPosition(p);
     923
    898924            }
    899925
  • trunk/CrypPlugins/WorkspaceManager/View/Container/WorkSpaceEditorView.xaml

    r2280 r2383  
    2323    <ContentControl x:Name="Main" Background="Aqua">
    2424        <Grid x:Name="MainGrid">
    25 
    2625            <Grid Background="{StaticResource ResourceKey=NormalBrush}">
    27                 <!--<Grid.Background>
    28                 <ImageBrush ImageSource="/WorkspaceManager;component/View/Image/bg.png" Opacity="0.95" Stretch="UniformToFill"/>
    29             </Grid.Background>-->
    3026                <Grid.Effect>
    3127                    <BlurEffect Radius="{Binding ElementName=InformationPanel, Path=Visibility, Converter={StaticResource ResourceKey=BlurIconConverter}}"></BlurEffect>
     
    3834                        <ScrollViewer x:Name="scrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
    3935                            <e:ModifiedCanvas RenderTransformOrigin="0.5, 0.5" MouseLeftButtonDown="root_MouseLeftButtonDown" MouseMove="WorkSpaceEditorView_MouseMove">
    40                                 <Thumb Style="{StaticResource ResourceKey=NormalThumbStyle}" DragDelta="Thumb_DragDelta" DragStarted="Thumb_DragStarted" Width="{Binding Path=ActualWidth}" Height="{Binding Path=ActualHeight}"></Thumb>
     36                                <Thumb PreviewMouseLeftButtonDown="Thumb_MouseLeftButtonDown" PreviewMouseLeftButtonUp="Thumb_MouseLeftButtonUp" Style="{StaticResource ResourceKey=NormalThumbStyle}" DragDelta="Thumb_DragDelta" DragStarted="Thumb_DragStarted" Width="{Binding Path=ActualWidth}" Height="{Binding Path=ActualHeight}"></Thumb>
    4137                                <Grid Name="UserControlWrapperParent" Width="{Binding Path=ActualWidth}" Height="{Binding Path=ActualHeight}"/>
     38                                <Rectangle Panel.ZIndex="10000000" Fill="#14FFFFFF" StrokeDashArray="5" Stroke="#FFFFFFFF" Visibility="Hidden" x:Name="rectangle" Width="50" Height="50"
     39                            StrokeDashOffset="0" StrokeThickness="1" RadiusX="0" RadiusY="0" Canvas.Left="0" Canvas.Top="0">
     40                                    <Rectangle.RenderTransform>
     41                                        <TranslateTransform X="0" Y="0"></TranslateTransform>
     42                                    </Rectangle.RenderTransform>
     43                                </Rectangle>
    4244                                <e:ModifiedCanvas.LayoutTransform>
    4345                                    <ScaleTransform x:Name="RootScale" ScaleX="{Binding Source={x:Static p:Settings.Default}, Path=EditScale, Mode=OneWay}" ScaleY="{Binding Source={x:Static p:Settings.Default}, Path=EditScale, Mode=OneWay}"></ScaleTransform>
  • trunk/CrypPlugins/WorkspaceManager/View/Container/WorkSpaceEditorView.xaml.cs

    r2280 r2383  
    3939        private Point? lastMousePositionOnTarget;
    4040        private Point? lastDragPoint;
     41        private Point? startDrag;
    4142        private Point previousDragPoint = new Point();
    4243        private ConnectorView selectedConnector;
     
    4647        private Panel root { get { return (this.scrollViewer.Content as Panel); } }
    4748        private BottomBox bottomBox { get { return (BottomBoxParent.Child as BottomBox); } }
    48         public bool IsKeyMultiKeyDown;
     49        public bool IsCtrlToggled { get; set; }
    4950
    5051        public UserContentWrapper UserContentWrapper { get; set; }
     
    7172            CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
    7273
     74            scrollViewer.ScrollChanged += OnScrollViewerScrollChanged;
     75            scrollViewer.PreviewMouseWheel += OnPreviewMouseWheel;
    7376            scrollViewer.DataContext = root;
    74             scrollViewer.ScrollChanged += OnScrollViewerScrollChanged;
    75             scrollViewer.PreviewMouseLeftButtonUp += OnMouseLeftButtonUp;
    76             scrollViewer.PreviewMouseWheel += OnPreviewMouseWheel;
    7777
    7878            this.bottomBox.FitToScreen += new EventHandler<FitToScreenEventArgs>(bottomBox_FitToScreen);
     
    8282        }
    8383
    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 
    10084        private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
    10185        {
     86            if (IsCtrlToggled)
     87                return;
     88
    10289            scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset - e.HorizontalChange);
    10390            scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - e.VerticalChange);
    104             scrollViewer.Cursor = Cursors.SizeAll;
     91            this.Cursor = Cursors.SizeAll;
    10592        }
    10693
     
    121108        }
    122109
    123         void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    124         {
    125             scrollViewer.Cursor = Cursors.Arrow;
    126             scrollViewer.ReleaseMouseCapture();
     110        private void Thumb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
     111        {
     112            if (!IsCtrlToggled)
     113                return;
     114
     115            rectangle.Visibility = Visibility.Visible;
     116            startDrag = e.GetPosition(root);
     117            this.Cursor = Cursors.Cross;
     118        }
     119
     120        private void Thumb_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
     121        {
     122            rectangle.Visibility = Visibility.Collapsed;
     123            this.Cursor = Cursors.Arrow;
     124            startDrag = null;
    127125            lastDragPoint = null;
    128126        }
    129127
     128        void WorkSpaceEditorView_MouseMove(object sender, MouseEventArgs e)
     129        {
     130            if (IsCtrlToggled && startDrag.HasValue)
     131            {
     132                Point currentPoint = e.GetPosition(root);
     133                Point hasValue = (Point)startDrag;
     134
     135                //Calculate the top left corner of the rectangle
     136                //regardless of drag direction
     137                double x = hasValue.X < currentPoint.X ? hasValue.X : currentPoint.X;
     138                double y = hasValue.Y < currentPoint.Y ? hasValue.Y : currentPoint.Y;
     139
     140                //Move the rectangle to proper place
     141                rectangle.RenderTransform = new TranslateTransform(x, y);
     142                //Set its size
     143                rectangle.Width = Math.Abs(e.GetPosition(root).X - hasValue.X);
     144                rectangle.Height = Math.Abs(e.GetPosition(root).Y - hasValue.Y);
     145            }
     146            dummyLine.EndPoint = Mouse.GetPosition(root);
     147        }
     148
    130149        void OnScrollViewerScrollChanged(object sender, ScrollChangedEventArgs e)
    131150        {
     151            if (IsCtrlToggled)
     152                return;
     153
    132154            if (e.ExtentHeightChange != 0 || e.ExtentWidthChange != 0)
    133155            {
     
    184206            if ((Keyboard.GetKeyStates(Key.LeftCtrl) & KeyStates.Down) > 0)
    185207            {
    186                 IsKeyMultiKeyDown = true;
     208                IsCtrlToggled = true;
    187209            }
    188210            else
    189                 IsKeyMultiKeyDown = false;
     211                IsCtrlToggled = false;
    190212
    191213            if ((Keyboard.GetKeyStates(Key.LeftCtrl) & Keyboard.GetKeyStates(Key.C) & KeyStates.Down) > 0)
     
    294316        private void setBaseControl(WorkspaceModel WorkspaceModel)
    295317        {
     318            this.MouseMove +=new MouseEventHandler(WorkSpaceEditorView_MouseMove);
    296319            this.MouseLeave += new MouseEventHandler(WorkSpaceEditorView_MouseLeave);
    297320            this.Loaded += new RoutedEventHandler(WorkSpaceEditorView_Loaded);
     
    355378            {
    356379                ConnectionModel connectionModel = this.Model.newConnectionModel(((ConnectorView)source).Model, ((ConnectorView)target).Model, ((ConnectorView)source).Model.ConnectorType);
    357                 CryptoLineView conn = new CryptoLineView(connectionModel);
     380                CryptoLineView conn = new CryptoLineView(connectionModel,source,target);
    358381                conn.StartPointSource = source;
    359382                conn.EndPointSource = target;
     
    386409                conn.Stroke = new SolidColorBrush(color);
    387410                conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(source));
    388                 conn.EndPoint = Mouse.GetPosition(this);
     411                conn.EndPoint = Mouse.GetPosition(root);
    389412            }
    390413        }
     
    491514        }     
    492515
    493         void WorkSpaceEditorView_MouseMove(object sender, MouseEventArgs e)
    494         {
    495             this.dummyLine.EndPoint = Mouse.GetPosition(root);
    496             previousDragPoint = e.GetPosition(root);
    497         }
     516
    498517
    499518        void shape_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
     
    591610                    continue;
    592611
    593                 CryptoLineView conn = new CryptoLineView(connModel);
     612                CryptoLineView conn = new CryptoLineView(connModel,null,null);
    594613                connModel.UpdateableView = conn;
    595614                connModel.OnDelete += DeleteConnection;
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/CryptoLineView/CryptoLineView.cs

    r2067 r2383  
    1616using System.Collections;
    1717using WorkspaceManager.View.VisualComponents.StackFrameDijkstra;
     18using System.Windows.Data;
    1819
    1920namespace WorkspaceManager.View.VisualComponents
     
    2324        #region Variables
    2425
     26        public static readonly DependencyProperty IsDraggingDependencyProperty = DependencyProperty.Register("IsDragging", typeof(bool), typeof(CryptoLineView), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure, new PropertyChangedCallback(OnDraggingPropertyChanged)));
     27
     28        [TypeConverter(typeof(bool))]
     29        public bool IsDragging
     30        {
     31            get { return (bool)base.GetValue(IsDraggingDependencyProperty); }
     32            set
     33            {
     34                base.SetValue(IsDraggingDependencyProperty, value);
     35            }
     36        }
     37
     38        private static void OnDraggingPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
     39        {
     40            CryptoLineView line = (CryptoLineView)d;
     41            Panel p = (line.Parent as Panel);
     42            if (p == null)
     43                return;
     44            foreach (UIElement shape in p.Children)
     45            {
     46                if (shape is CryptoLineView)
     47                    shape.InvalidateVisual();
     48            }
     49        }
     50
    2551        private IntersectPoint intersectPoint;
    2652        private List<FromTo> pointList = new List<FromTo>();
     
    4268        public static readonly DependencyProperty EndPointProperty = DependencyProperty.Register("EndPoint", typeof(Point), typeof(CryptoLineView), new FrameworkPropertyMetadata(new Point(0, 0), FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure));
    4369        private ConnectionModel connectionModel;
    44         private ConnectorView source;
    45         private ConnectorView target;
     70        //private ConnectorView source;
     71        //private ConnectorView target;
    4672
    4773                #endregion
     
    78104        {
    79105            base.OnPropertyChanged(e);
    80 
    81             Panel p = (this.Parent as Panel);
    82             if (p == null)
    83                 return;
    84             foreach (UIElement shape in p.Children)
    85             {
    86                 if (shape is CryptoLineView)
    87                     shape.InvalidateVisual();
    88             }
    89106        }
    90107
     
    100117        }
    101118
    102         public CryptoLineView(ConnectionModel connectionModel) : this()
    103         {
    104             this.Model = connectionModel;
     119        public CryptoLineView(ConnectionModel connectionModel, ConnectorView source, ConnectorView target)
     120        {
     121            this.Loaded += new RoutedEventHandler(CryptoLineView_Loaded);
     122            this.connectionModel = connectionModel;
     123            this.StartPointSource = source;
     124            this.EndPointSource = target;
     125        }
     126
     127        void CryptoLineView_Loaded(object sender, RoutedEventArgs e)
     128        {
    105129            Color color = ColorHelper.GetLineColor(connectionModel.ConnectionType);
    106130            Stroke = new SolidColorBrush(color);
     
    108132        }
    109133
    110         public CryptoLineView(ConnectionModel connectionModel, ConnectorView source, ConnectorView target)
    111         {
    112             // TODO: Complete member initialization
    113             this.connectionModel = connectionModel;
    114             this.source = source;
    115             this.target = target;
     134        private void makeBinding(ConnectorView source, ConnectorView target)
     135        {
     136            MultiBinding multiBinding = new MultiBinding();
     137            multiBinding.Converter = new MultiDragValueConverter();
     138
     139            Binding bind = new Binding();
     140            bind.Source = source.Parent;
     141            bind.Path = new PropertyPath(PluginContainerView.IsDragStartedDependencyProperty);
     142            multiBinding.Bindings.Add(bind);
     143
     144            bind = new Binding();
     145            bind.Source = target.Parent;
     146            bind.Path = new PropertyPath(PluginContainerView.IsDragStartedDependencyProperty);
     147            multiBinding.Bindings.Add(bind);
     148
     149            SetBinding(CryptoLineView.IsDraggingDependencyProperty, multiBinding);
    116150        }
    117151
     
    504538        private void makeOrthogonalPoints()
    505539        {
    506             if (StartPointSource != null && EndPointSource != null)
     540            if (StartPointSource != null && EndPointSource != null && IsDragging == false)
    507541            {
    508542                List<Node> nodeList = new List<Node>();
     
    576610                                    quadTreeLines.Insert(new FakeNode()
    577611                                    {
    578                                         Source = l1.source,
    579                                         Target = l1.target,
     612                                        Source = l1.StartPointSource,
     613                                        Target = l1.EndPointSource,
    580614                                        Rectangle = new System.Drawing.RectangleF((float)up.X, (float)up.Y, 1, (float)(down.Y - up.Y))
    581615                                    });
     
    588622                                    quadTreeLines.Insert(new FakeNode()
    589623                                    {
    590                                         Source = l1.source,
    591                                         Target = l1.target,
     624                                        Source = l1.StartPointSource,
     625                                        Target = l1.EndPointSource,
    592626                                        Rectangle = new System.Drawing.RectangleF((float)left.X, (float)left.Y, (float)(right.X - left.X), 1)
    593627                                    });
     
    737771        }
    738772
    739         public ConnectorView StartPointSource { get; set; }
    740 
    741         public ConnectorView EndPointSource { get; set; }
     773
     774        private ConnectorView startPointSource;
     775        public ConnectorView StartPointSource
     776        {
     777            get { return startPointSource; }
     778            set
     779            {
     780                startPointSource = value;
     781                if (endPointSource == null || startPointSource == null)
     782                    return;
     783                makeBinding(startPointSource, endPointSource);
     784            }
     785        }
     786
     787        private ConnectorView endPointSource;
     788        public ConnectorView EndPointSource
     789        {
     790            get { return endPointSource; }
     791            set
     792            {
     793                endPointSource = value;
     794                if (endPointSource == null || startPointSource == null)
     795                    return;
     796                makeBinding(startPointSource, endPointSource);
     797            }
     798        }
    742799    }
     800
     801    public class MultiDragValueConverter : IMultiValueConverter
     802    {
     803        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     804        {
     805            bool a = (bool)values[0], b = (bool)values[1];
     806            if (a == true || b == true)
     807                return true;
     808            else
     809                return false;
     810        }
     811
     812        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
     813        {
     814            throw new NotImplementedException();
     815        }
     816    }
     817
    743818}
Note: See TracChangeset for help on using the changeset viewer.