Changeset 4529


Ignore:
Timestamp:
Feb 22, 2012, 8:05:29 AM (10 years ago)
Author:
matkovic
Message:

fixes #545 , #537, #531, #520, #539, #429
[workspace] added a Context menu for lines, improvements on partial Line selection (buggy)

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

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/View/BinVisual/BinComponentVisual.xaml

    r4474 r4529  
    430430                    <Setter Property="Height" Value="{Binding Path=WindowHeight}"></Setter>
    431431                    <Setter Property="Width" Value="{Binding Path=WindowWidth}"></Setter>
    432                     <Setter Property="MinHeight" Value="150"></Setter>
    433                     <Setter Property="MinWidth" Value="200"></Setter>
     432                    <Setter Property="MinHeight" Value="{Binding Path=ActivePresentation.MinHeight}"></Setter>
     433                    <Setter Property="MinWidth" Value="{Binding Path=ActivePresentation.MineWidth}"></Setter>
    434434                </DataTrigger>
    435435            </Style.Triggers>
  • trunk/CrypPlugins/WorkspaceManager/View/BinVisual/BinEditorVisual.xaml.cs

    r4497 r4529  
    463463                foreach(var txt in m.GetAllTextModels())
    464464                {
    465                     this.VisualCollection.Add(new BinTextVisual(txt));
     465
     466                    try
     467                    {
     468                        this.VisualCollection.Add(new BinTextVisual(txt));
     469                    }
     470                    catch (Exception e)
     471                    {
     472                        MyEditor.GuiLogMessage(string.Format("Could not load Text to Workspace: {0}", e.Message), NotificationLevel.Error);
     473                    }
    466474                }
    467475
     
    785793        private void CopyToClipboardClick(object sender, RoutedEventArgs e)
    786794        {
    787             Clipboard.SetData(DataFormats.Text, LoadingErrorText);
     795            try
     796            {
     797                Clipboard.SetData(DataFormats.Text, LoadingErrorText);
     798            }
     799            catch (Exception)
     800            {
     801                //1ms
     802                DispatcherTimer timer = new DispatcherTimer() { Interval = new TimeSpan(10000)  };
     803                timer.Start();
     804                timer.Tick += new EventHandler(delegate(object timerSender, EventArgs ee)
     805                {
     806                    DispatcherTimer t = (DispatcherTimer)timerSender;
     807                    t.Stop();
     808                    Clipboard.SetData(DataFormats.Text, LoadingErrorText);
     809                });
     810            }
    788811        }
    789812
     
    9961019            }
    9971020
    998             if (e.Source is CryptoLineView)
    999             {
    1000                 CryptoLineView l = (CryptoLineView)e.Source;
    1001                 Model.ModifyModel(new DeleteConnectionModelOperation(l.Line.Model));
    1002             }
     1021            //if (e.Source is CryptoLineView)
     1022            //{
     1023            //    CryptoLineView l = (CryptoLineView)e.Source;
     1024            //    Model.ModifyModel(new DeleteConnectionModelOperation(l.Line.Model));
     1025            //}
    10031026        }
    10041027
  • trunk/CrypPlugins/WorkspaceManager/View/BinVisual/BinSettingsVisual.xaml.cs

    r4393 r4529  
    4646        public BinSettingsVisual(IPlugin plugin, BinComponentVisual bcv, Boolean isMaster, Boolean isSideBar)
    4747        {
     48            this.Loaded += new RoutedEventHandler(BinSettingsVisual_Loaded);
    4849
    4950            noSettings = false;   
     
    148149            }
    149150           
     151        }
     152
     153        void BinSettingsVisual_Loaded(object sender, RoutedEventArgs e)
     154        {
     155            this.InvalidateVisual();
    150156        }
    151157
  • trunk/CrypPlugins/WorkspaceManager/View/BinVisual/BinTextVisual.xaml.cs

    r4463 r4529  
    128128
    129129        #region Constructors
    130         public BinTextVisual()
    131         {
    132             throw new Exception("Don't use this Constructor");
    133         }
    134130
    135131        public BinTextVisual(TextModel model)
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/CryptoLineView/CryptoLineView.xaml

    r4497 r4529  
    55             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    66             xmlns:bin="clr-namespace:WorkspaceManager.View.VisualComponents.CryptoLineView"
     7             xmlns:bins="clr-namespace:WorkspaceManager.View.BinVisual"
    78             xmlns:misc="clr-namespace:WorkspaceManager.View.VisualComponents"
    89             mc:Ignorable="d"
    910             d:DesignHeight="300" d:DesignWidth="300" DataContext="{Binding RelativeSource={x:Static RelativeSource.Self}}">
    1011    <UserControl.Resources>
     12        <bin:GeoTrimBindingConverter x:Key="GeoTrimBindingConverter"></bin:GeoTrimBindingConverter>
    1113        <bin:IsOneTrueBindingConverter x:Key="IsOneTrueBindingConverter"></bin:IsOneTrueBindingConverter>
    1214        <bin:IsOneFalseBindingConverter x:Key="IsOneFalseBindingConverter"></bin:IsOneFalseBindingConverter>
     15        <bin:NegateBindingConverter x:Key="NegateBindingConverter"></bin:NegateBindingConverter>
    1316        <Style TargetType="{x:Type Path}" x:Key="Path">
    1417            <Style.Triggers>
     
    3235        </Style>
    3336
    34         <Style TargetType="{x:Type Thumb}" x:Key="DragRect">
     37        <Style TargetType="{x:Type Path}" x:Key="SubPath">
     38            <Style.Triggers>
     39                <DataTrigger Value="True">
     40                    <DataTrigger.Binding>
     41                         <Binding Path="IsSelected" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type bin:CryptoLineView}}"></Binding>
     42                    </DataTrigger.Binding>
     43                    <Setter Property="Visibility" Value="Visible"></Setter>
     44                </DataTrigger>
     45            </Style.Triggers>
     46            <Setter Property="Visibility" Value="Collapsed"></Setter>
     47            <Setter Property="Stroke" Value="#77FFFFFF"></Setter>
     48            <Setter Property="StrokeThickness" Value="8"></Setter>
     49        </Style>
     50
     51        <!--<Style TargetType="{x:Type Thumb}" x:Key="DragRect">
    3552            <Style.Triggers>
    3653                <MultiDataTrigger>
     
    113130            </Setter>
    114131            <Setter Property="Visibility" Value="Collapsed"></Setter>
    115         </Style>
    116 
    117         <Style TargetType="{x:Type Thumb}" x:Key="Drag">
    118             <Style.Triggers>
    119                 <!--<DataTrigger Value="True">
    120                     <DataTrigger.Binding>
    121                         <MultiBinding Converter="{StaticResource ResourceKey=IsOneFalseBindingConverter}">
    122                             <Binding Path="HasEndpoint"></Binding>
    123                             <Binding Path="IsSelected" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type bin:CryptoLineView}}"></Binding>
    124                         </MultiBinding>
    125                     </DataTrigger.Binding>
    126                     <Setter Property="Visibility" Value="Collapsed"></Setter>
    127                 </DataTrigger>-->
    128                 <MultiDataTrigger>
    129                     <MultiDataTrigger.Conditions>
    130                         <Condition Binding="{Binding Path=HasEndPoint}" Value="false"></Condition>
    131                         <Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type bin:CryptoLineView}}}" Value="true"></Condition>
    132                     </MultiDataTrigger.Conditions>
    133                     <Setter Property="Visibility" Value="Visible"></Setter>
    134                 </MultiDataTrigger>
    135             </Style.Triggers>
    136             <Setter Property="Visibility" Value="Collapsed"></Setter>
    137             <Setter Property="Template">
    138                 <Setter.Value>
    139                     <ControlTemplate TargetType="{x:Type Thumb}">
    140                         <Canvas>
    141                             <Thumb Style="{StaticResource ResourceKey=DragRect}" DragDelta="DragDelta">
    142                             </Thumb>
    143                             <Border Background="White" BorderBrush="RoyalBlue" Width="8" Height="8" BorderThickness="1">
    144                                 <Border.RenderTransform>
    145                                     <TranslateTransform X="{Binding Path=To.X, UpdateSourceTrigger=PropertyChanged}" Y="{Binding Path=To.Y, UpdateSourceTrigger=PropertyChanged}"></TranslateTransform>
    146                                 </Border.RenderTransform>
    147                             </Border>
    148                         </Canvas>
    149                     </ControlTemplate>
    150                 </Setter.Value>
    151             </Setter>
    152         </Style>
    153 
    154         <Style x:Key="PointsStyle" TargetType="ItemsControl">
     132        </Style-->
     133
     134
     135
     136        <!--<Style x:Key="PointsStyle" TargetType="ItemsControl">
    155137            <Style.Triggers>
    156138                <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type bin:CryptoLineView}}}" Value="true">
     
    158140                </DataTrigger>
    159141            </Style.Triggers>
    160         </Style>
     142        </Style>-->
    161143    </UserControl.Resources>
     144    <UserControl.ContextMenu>
     145        <ContextMenu>
     146            <MenuItem Click="ContextMenuClick" Header="Delete Line"
     147                      IsEnabled="{Binding Path=Editor.IsExecuting, Converter={StaticResource ResourceKey=NegateBindingConverter}}">
     148                <MenuItem.Icon>
     149                    <Image Width="18" Height="18" Source="/WorkspaceManager;component/View/Image/delete.png" HorizontalAlignment="Center" SnapsToDevicePixels="True"/>
     150                </MenuItem.Icon>
     151            </MenuItem>
     152        </ContextMenu>
     153    </UserControl.ContextMenu>
    162154    <Canvas>
    163155        <Path Data="{Binding Path=PathGeo}" Style="{StaticResource ResourceKey=Path}"></Path>
     
    167159        </ContentPresenter>
    168160
    169         <ItemsControl Margin="-4.5" Style="{StaticResource ResourceKey=PointsStyle}">
     161        <Path Data="{Binding Path=PathGeo, Converter={StaticResource ResourceKey=GeoTrimBindingConverter}}"
     162              Style="{StaticResource ResourceKey=SubPath}"
     163              MouseMove="SubPathMouseMove"></Path>
     164       
     165        <ContentPresenter Content="{Binding Path=SelectedPart}">
     166            <ContentPresenter.Resources>
     167                <Style TargetType="{x:Type Thumb}">
     168                    <Setter Property="Template">
     169                        <Setter.Value>
     170                            <ControlTemplate TargetType="{x:Type Thumb}">
     171                                <Line Stroke="#aaFFFFFF" StrokeThickness="8"
     172                                      X1="{Binding Path=From.X}"
     173                                      Y1="{Binding Path=From.Y}"
     174                                      X2="{Binding Path=To.X}"
     175                                      Y2="{Binding Path=To.Y}">
     176                                </Line>
     177                            </ControlTemplate>
     178                        </Setter.Value>
     179                    </Setter>
     180                </Style>
     181            </ContentPresenter.Resources>
     182
     183        </ContentPresenter>
     184
     185        <!--<ItemsControl Margin="-4.5" Style="{StaticResource ResourceKey=PointsStyle}">
    170186            <ItemsControl.ItemsPanel>
    171187                <ItemsPanelTemplate>
     
    183199                </Style>
    184200            </ItemsControl.ItemContainerStyle>
    185         </ItemsControl>
     201        </ItemsControl>-->
    186202    </Canvas>
    187203</UserControl>
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/CryptoLineView/CryptoLineView.xaml.cs

    r4497 r4529  
    3232        public event PropertyChangedEventHandler PropertyChanged;
    3333
     34        public LinkedList<FromTo> LinkedPointList = new LinkedList<FromTo>();
     35        public BinEditorVisual Editor { private set; get; }
     36
    3437        private InternalCryptoLineView line = null;
    3538        private ConnectionModel model = null;
    3639        private UIElement[] newItems, oldItems;
    3740        private IEnumerable<BinComponentVisual> selected;
     41        private Thumb selectedPart = new Thumb();
    3842        public ConnectionModel Model
    3943        {
     
    6973            {
    7074                base.SetValue(SourceProperty, value);
     75            }
     76        }
     77
     78        public static readonly DependencyProperty SelectedPartProperty = DependencyProperty.Register("SelectedPart", typeof(Thumb), typeof(CryptoLineView), new FrameworkPropertyMetadata(null));
     79
     80        public Thumb SelectedPart
     81        {
     82            get { return (Thumb)base.GetValue(SelectedPartProperty); }
     83            private set
     84            {
     85                base.SetValue(SelectedPartProperty, value);
    7186            }
    7287        }
     
    118133        {
    119134            // TODO: Complete member initialization
     135            selectedPart.MouseLeave +=new MouseEventHandler(SubPathMouseLeave);
     136            selectedPart.DragDelta += new DragDeltaEventHandler(DragDelta);
     137            Editor = (BinEditorVisual)model.WorkspaceModel.MyEditor.Presentation;
    120138            InitializeComponent();
    121139            Canvas.SetZIndex(this, -1);
     
    130148            //    new BinComponentVisual[] { target.WindowParent, source.WindowParent }));
    131149            //Line.PointList.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(PointListCollectionChanged);
    132             BinEditorVisual editor = (BinEditorVisual)model.WorkspaceModel.MyEditor.Presentation;
    133             editor.ItemsSelected += new EventHandler<SelectedItemsEventArgs>(editor_ItemsSelected);
     150
     151            Editor.ItemsSelected += new EventHandler<SelectedItemsEventArgs>(editor_ItemsSelected);
    134152            Line.ComputationDone += new EventHandler(LineComputationDone);
     153            Line.PointList.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(PointListCollectionChanged);
    135154
    136155            if(model.PointList != null)
    137156                assembleGeo();
     157        }
     158
     159        void PointListCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
     160        {
     161            LinkedPointList.Clear();
     162            foreach (var p in Line.PointList)
     163            {
     164                LinkedPointList.AddLast(p);
     165            }
    138166        }
    139167
     
    195223            geo.Figures = myPathFigureCollection;
    196224            PathGeo = geo;
    197         }
    198 
    199         void PointListCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    200         {
    201 
    202 
    203225        }
    204226
     
    247269        {
    248270            var data = (FromTo)(((FrameworkElement)sender).DataContext);
     271            var prevData = LinkedPointList.Find(data).Previous;
     272            if (prevData == null)
     273                return;
    249274            if (data.DirSort == DirSort.Y_ASC || data.DirSort == DirSort.Y_DESC)
    250275            {
    251                 data.From = new Point(data.From.X + e.HorizontalChange, data.From.Y);
     276                data.From = prevData.Value.To = new Point(data.From.X + e.HorizontalChange, data.From.Y);
    252277                data.To = new Point(data.To.X + e.HorizontalChange, data.To.Y);
    253278            }
    254279            if (data.DirSort == DirSort.X_ASC || data.DirSort == DirSort.X_DESC)
    255280            {
    256                 data.From = new Point(data.From.X, data.From.Y + e.VerticalChange);
     281                data.From = prevData.Value.To = new Point(data.From.X, data.From.Y + e.VerticalChange);
    257282                data.To = new Point(data.To.X, data.To.Y + e.VerticalChange);
    258283            }
     284
    259285            Line.IsEditingPoint = true;
    260286            Line.InvalidateAllLines();
     287        }
     288
     289        private void SubPathMouseMove(object sender, MouseEventArgs e)
     290        {
     291            detPoint(e.GetPosition((IInputElement)sender));
     292        }
     293
     294        private void detPoint(Point point)
     295        {
     296            for(int i = 1; i < Line.PointList.Count-1 ;++i)
     297            {
     298                var p = Line.PointList[i];
     299                Rect r = new Rect(p.From, new Vector(p.To.X, p.To.Y));
     300
     301                if(r.IntersectsWith(new Rect(point,new Size(5,5))))
     302                {
     303                    SelectedPart = selectedPart;
     304                    selectedPart.DataContext = p;
     305                    return;
     306                }
     307            }
     308            SelectedPart = null;
     309        }
     310
     311        private void SubPathMouseLeave(object sender, MouseEventArgs e)
     312        {
     313            SelectedPart = null;
     314        }
     315
     316        private void ContextMenuClick(object sender, RoutedEventArgs e)
     317        {
     318            model.UpdateableView = this;
     319            if (this.model != null && !((WorkspaceManagerClass)this.model.WorkspaceModel.MyEditor).isExecuting())
     320            {
     321                this.model.WorkspaceModel.ModifyModel(new DeleteConnectionModelOperation(this.model));
     322            }
    261323        }
    262324    }
     
    269331        private static double baseoffset = 8;
    270332        public event EventHandler ComputationDone;
    271 
     333       
    272334        private ObservableCollection<FromTo> pointList = new ObservableCollection<FromTo>();
    273335        public ObservableCollection<FromTo> PointList
     
    374436                return;
    375437
    376             if (l.HasComputed == true)
     438            if (l.HasComputed == true && l.PointList.Count > 0)
    377439            {
    378440                l.Model.PointList = new List<Point>();
     
    381443                    l.Model.PointList.Add(p.From);
    382444                }
    383                 l.Model.PointList.Add(l.PointList.Last().To);
     445                l.Model.PointList.Add(l.PointList[l.PointList.Count-1].To);
    384446            }
    385447        }
     
    422484            this.EndPointSource = target;
    423485            this.Visuals = visuals;
    424 
    425            
    426486        }
    427487
     
    10791139    }
    10801140
     1141    public class GeoTrimBindingConverter : IValueConverter
     1142    {
     1143        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     1144        {
     1145            if (value == null)
     1146                return null;
     1147            var geo = (PathGeometry)value;
     1148            var subGeo = geo.Clone();
     1149
     1150            if (subGeo.Figures[0].Segments.Count <= 1)
     1151                return subGeo;
     1152
     1153            subGeo.Figures[0].StartPoint = ((LineSegment)subGeo.Figures[0].Segments[0]).Point;
     1154            subGeo.Figures[0].Segments.RemoveAt(0);
     1155            subGeo.Figures[0].Segments.RemoveAt(subGeo.Figures[0].Segments.Count - 1);
     1156
     1157            return subGeo;
     1158        }
     1159
     1160        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     1161        {
     1162            throw new NotImplementedException();
     1163        }
     1164    }
     1165
     1166    public class NegateBindingConverter : IValueConverter
     1167    {
     1168        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     1169        {
     1170            return !(bool)value;
     1171        }
     1172
     1173        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     1174        {
     1175            throw new NotImplementedException();
     1176        }
     1177    }
     1178
    10811179}
  • trunk/CrypPlugins/WorkspaceManager/View/VisualComponents/CryptoLineView/FromTo.cs

    r4497 r4529  
    2121
    2222        public DirSort DirSort { get; private set; }
    23         public FromTo PrevFromTo { get; set; }
    24 
    25         public double Delta
    26         {
    27             get;
    28             set;
    29         }
    30 
    3123        public bool HasEndPoint
    3224        {
     
    9082                {
    9183                    DirSort = DirSort.Y_DESC;
    92                     this.Delta = From.Y - To.Y;
    9384                }
    9485                else
    9586                {
    9687                    DirSort = DirSort.Y_ASC;
    97                     this.Delta = To.Y - From.Y;
    9888                }
    9989
     
    10494                {
    10595                    DirSort = DirSort.X_DESC;
    106                     this.Delta = From.X - To.X;
    10796                }
    10897                else
    10998                {
    11099                    DirSort = DirSort.X_ASC;
    111                     this.Delta = To.X - From.X;
    112100                }
    113101
Note: See TracChangeset for help on using the changeset viewer.