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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.