Ignore:
Timestamp:
Jul 4, 2010, 3:31:42 AM (11 years ago)
Author:
matkovic
Message:

-added loading from Model
-added several images
-added Connector data presentation
-several style changes

File:
1 edited

Legend:

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

    r1681 r1717  
    2222namespace WorkspaceManager.View.Container
    2323{
     24    public enum EditorState
     25    {
     26        READY,
     27        BUSY
     28    };
    2429    /// <summary>
    2530    /// Interaction logic for WorkSpaceEditorView.xaml
    2631    /// </summary>
     32    ///
    2733    public partial class WorkSpaceEditorView : UserControl
    2834    {
    29         public enum EditorState
    30         {
    31             READY,
    32             BUSY
    33         };
    3435        private Point previousDragPoint = new Point();
    3536        private ConnectorView selectedConnector;
     
    5556
    5657        public WorkSpaceEditorView(WorkspaceModel WorkspaceModel)
     58        {
     59            setBaseControl(WorkspaceModel);
     60            InitializeComponent();
     61        }
     62
     63        private void setBaseControl(WorkspaceModel WorkspaceModel)
    5764        {
    5865            this.MouseLeftButtonDown += new MouseButtonEventHandler(WorkSpaceEditorView_OnMouseLeftButtonDown);
     
    6572            this.Model = WorkspaceModel;
    6673            this.State = EditorState.READY;
    67             InitializeComponent();
    6874        }
    6975
    7076        void PluginDelete(object sender, PluginContainerViewDeleteViewEventArgs e)
    71         {           
    72             Model.deletePluginModel(e.container.Model);
    73             root.Children.Remove(e.container);
     77        {
     78            if (this.State == EditorState.READY)
     79            {
     80                Model.deletePluginModel(e.container.Model);
     81                root.Children.Remove(e.container);
     82            }
    7483        }
    7584
     
    8089        public void AddPluginContainerView(Point position, PluginModel model)
    8190        {
    82             PluginContainerView newPluginContainerView = new PluginContainerView(model);
    83             newPluginContainerView.Delete += new EventHandler<PluginContainerViewDeleteViewEventArgs>(PluginDelete);
    84             newPluginContainerView.ShowSettings += new EventHandler<PluginContainerViewSettingsViewEventArgs>(shape_ShowSettings);
    85             newPluginContainerView.OnConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(shape_OnConnectorMouseLeftButtonDown);
    86             newPluginContainerView.MouseLeftButtonDown += new MouseButtonEventHandler(shape_MouseLeftButtonDown);
    87             newPluginContainerView.MouseLeftButtonUp += new MouseButtonEventHandler(shape_MouseLeftButtonUp);
    88             newPluginContainerView.SetPosition(position);
    89             this.root.Children.Add(newPluginContainerView);
    90             Canvas.SetZIndex(newPluginContainerView, 100);
     91            if (this.State == EditorState.READY)
     92            {
     93                PluginContainerView newPluginContainerView = new PluginContainerView(model);
     94                newPluginContainerView.Delete += new EventHandler<PluginContainerViewDeleteViewEventArgs>(PluginDelete);
     95                newPluginContainerView.ShowSettings += new EventHandler<PluginContainerViewSettingsViewEventArgs>(shape_ShowSettings);
     96                newPluginContainerView.ConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(shape_OnConnectorMouseLeftButtonDown);
     97                newPluginContainerView.MouseLeftButtonDown += new MouseButtonEventHandler(shape_MouseLeftButtonDown);
     98                newPluginContainerView.MouseLeftButtonUp += new MouseButtonEventHandler(shape_MouseLeftButtonUp);
     99                newPluginContainerView.SetPosition(position);
     100                this.root.Children.Add(newPluginContainerView);
     101                Canvas.SetZIndex(newPluginContainerView, 100);
     102            }
    91103        }
    92104
     
    98110        public void AddConnection(IConnectable source, IConnectable target)
    99111        {
    100             ConnectionModel connectionModel = this.Model.newConnectionModel(((ConnectorView)source).Model, ((ConnectorView)target).Model, ((ConnectorView)source).Model.ConnectorType);
    101             CryptoLineView conn = new CryptoLineView(connectionModel);
    102             connectionModel.UpdateableView = conn;
    103             connectionModel.OnDelete += DeleteConnection;
    104             conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(source));
    105             conn.SetBinding(CryptoLineView.EndPointProperty, CreateConnectorBinding(target));
    106             root.Children.Add(conn);
    107             ConnectionList.Add(conn);
    108             Canvas.SetZIndex(conn, 0);           
     112            if (this.State == EditorState.READY)
     113            {
     114                ConnectionModel connectionModel = this.Model.newConnectionModel(((ConnectorView)source).Model, ((ConnectorView)target).Model, ((ConnectorView)source).Model.ConnectorType);
     115                CryptoLineView conn = new CryptoLineView(connectionModel);
     116                connectionModel.UpdateableView = conn;
     117                connectionModel.OnDelete += DeleteConnection;
     118                conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(source));
     119                conn.SetBinding(CryptoLineView.EndPointProperty, CreateConnectorBinding(target));
     120                root.Children.Add(conn);
     121                ConnectionList.Add(conn);
     122                Canvas.SetZIndex(conn, 0);
     123            }
    109124        }
    110125
     
    122137        private void AddConnectionSource(IConnectable source, CryptoLineView conn)
    123138        {
    124             Color color = ColorHelper.GetColor((source as ConnectorView).Model.ConnectorType);
    125             conn.Stroke = new SolidColorBrush(color);
    126             conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(source));
    127             conn.EndPoint = Mouse.GetPosition(this);
     139            if (this.State == EditorState.READY)
     140            {
     141                Color color = ColorHelper.GetColor((source as ConnectorView).Model.ConnectorType);
     142                conn.Stroke = new SolidColorBrush(color);
     143                conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(source));
     144                conn.EndPoint = Mouse.GetPosition(this);
     145            }
    128146        }
    129147
     
    135153            Binding binding = new Binding();
    136154            binding.Source = connectable;
    137             binding.Path = new PropertyPath(ConnectorView.PositionOnWorkSpaceXProperty);
     155            binding.Path = new PropertyPath(ConnectorView.X);
    138156            multiBinding.Bindings.Add(binding);
    139157
    140158            binding = new Binding();
    141159            binding.Source = connectable;
    142             binding.Path = new PropertyPath(ConnectorView.PositionOnWorkSpaceYProperty);
     160            binding.Path = new PropertyPath(ConnectorView.Y);
    143161            multiBinding.Bindings.Add(binding);
    144162
     
    169187        void shape_OnConnectorMouseLeftButtonDown(object sender, ConnectorViewEventArgs e)
    170188        {
    171             if (selectedConnector != null && WorkspaceModel.compatibleConnectors(selectedConnector.Model, e.connector.Model))
    172             {
     189            if (this.State == EditorState.READY)
     190            {
     191                if (selectedConnector != null && WorkspaceModel.compatibleConnectors(selectedConnector.Model, e.connector.Model))
     192                {
     193                    this.root.Children.Remove(dummyLine);
     194                    this.AddConnection(selectedConnector, e.connector);
     195                    this.selectedConnector = null;
     196                    return;
     197                }
     198
     199                if (selectedConnector == null && e.connector.Model.Outgoing)
     200                {
     201                    this.root.Children.Add(dummyLine);
     202                    this.selectedConnector = e.connector;
     203                    this.AddConnectionSource(e.connector, dummyLine);
     204                    return;
     205                }
     206            }
     207           
     208        }
     209
     210        void WorkSpaceEditorView_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
     211        {
     212            if (this.State == EditorState.READY)
     213            {
     214                this.selectedConnector = null;
    173215                this.root.Children.Remove(dummyLine);
    174                 this.AddConnection(selectedConnector, e.connector);
    175                 this.selectedConnector = null;
    176                 this.State = EditorState.READY;
    177                 return;
    178             }
    179 
    180             if (selectedConnector == null && e.connector.Model.Outgoing)
    181             {
    182                 this.root.Children.Add(dummyLine);
    183                 this.selectedConnector = e.connector;
    184                 this.AddConnectionSource(e.connector, dummyLine);
    185                 this.State = EditorState.BUSY;
    186                 return;
    187             }
    188            
    189         }
    190 
    191         void WorkSpaceEditorView_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
    192         {
    193             this.selectedConnector = null;
    194             this.root.Children.Remove(dummyLine);
     216            }
    195217        }
    196218
    197219        void WorkSpaceEditorView_MouseLeave(object sender, MouseEventArgs e)
    198220        {
    199             this.selectedPluginContainer = null;
    200             this.State = EditorState.READY;
     221            if (this.State == EditorState.READY)
     222            {
     223                this.selectedPluginContainer = null;
     224            }
    201225        }     
    202226
     
    220244            Canvas.SetZIndex(sender as PluginContainerView, 100);
    221245            this.selectedPluginContainer = null;
    222             this.State = EditorState.BUSY;
    223246        }
    224247
     
    227250            Canvas.SetZIndex(sender as PluginContainerView, 101);
    228251            this.selectedPluginContainer = sender as PluginContainerView;
    229             this.State = EditorState.BUSY;
    230252            PluginChangedEventArgs args = new PluginChangedEventArgs(this.selectedPluginContainer.Model.Plugin, this.selectedPluginContainer.Model.Name, DisplayPluginMode.Normal);
    231253            this.Model.WorkspaceManagerEditor.onSelectedPluginChanged(args);
     
    235257        void WorkSpaceEditorView_Drop(object sender, DragEventArgs e)
    236258        {
    237             DragDropDataObject obj = e.Data.GetData("Cryptool.PluginBase.Editor.DragDropDataObject") as DragDropDataObject;
    238             PluginModel pluginModel = Model.newPluginModel(DragDropDataObjectToPluginConverter.CreatePluginInstance(obj.AssemblyFullName, obj.TypeFullName));
    239             if(obj != null)
    240                 this.AddPluginContainerView(e.GetPosition(root), pluginModel);
     259            if (this.State == EditorState.READY)
     260            {
     261                DragDropDataObject obj = e.Data.GetData("Cryptool.PluginBase.Editor.DragDropDataObject") as DragDropDataObject;
     262                PluginModel pluginModel = Model.newPluginModel(DragDropDataObjectToPluginConverter.CreatePluginInstance(obj.AssemblyFullName, obj.TypeFullName));
     263                if (obj != null)
     264                    this.AddPluginContainerView(e.GetPosition(root), pluginModel);
     265            }
    241266        }
    242267
    243268        void WorkSpaceEditorView_DragEnter(object sender, DragEventArgs e)
    244269        {
    245             e.Effects = DragDropEffects.Copy;
     270            if (this.State == EditorState.READY)
     271            {
     272                e.Effects = DragDropEffects.Copy;
     273            }
     274            else if (this.State == EditorState.BUSY)
     275            {
     276                e.Effects = DragDropEffects.None;
     277            }
    246278        }
    247279
     
    251283        {
    252284            this.InformationPanel.Visibility = Visibility.Hidden;
     285        }
     286
     287        internal void Load(WorkspaceModel WorkspaceModel)
     288        {
     289            this.Model = WorkspaceModel;
     290
     291            foreach (PluginModel model in this.Model.AllPluginModels)
     292            {
     293                this.loadPluginContainerView(model);
     294            }
     295            foreach(ConnectionModel connModel in WorkspaceModel.AllConnectionModels)
     296            {
     297                CryptoLineView conn = new CryptoLineView(connModel);
     298                connModel.UpdateableView = conn;
     299                connModel.OnDelete += DeleteConnection;
     300
     301                foreach (UIElement element in root.Children)
     302                {
     303                    PluginContainerView container = element as PluginContainerView;
     304                    if (container != null)
     305                    {
     306                        foreach (ConnectorView connector in container.ConnectorViewList)
     307                        {
     308                            if(connModel.From == connector.model)
     309                                conn.SetBinding(CryptoLineView.StartPointProperty, CreateConnectorBinding(connector));
     310                            else if(connModel.To == connector.model)
     311                                conn.SetBinding(CryptoLineView.EndPointProperty, CreateConnectorBinding(connector));
     312                        }
     313                    }
     314                }
     315
     316                root.Children.Add(conn);
     317                ConnectionList.Add(conn);
     318                Canvas.SetZIndex(conn, 0);
     319            }
     320        }
     321
     322        private void loadPluginContainerView(PluginModel model)
     323        {
     324            PluginContainerView newPluginContainerView = new PluginContainerView(model);
     325
     326            newPluginContainerView.Delete += new EventHandler<PluginContainerViewDeleteViewEventArgs>(PluginDelete);
     327            newPluginContainerView.ShowSettings += new EventHandler<PluginContainerViewSettingsViewEventArgs>(shape_ShowSettings);
     328            newPluginContainerView.ConnectorMouseLeftButtonDown += new EventHandler<ConnectorViewEventArgs>(shape_OnConnectorMouseLeftButtonDown);
     329            newPluginContainerView.MouseLeftButtonDown += new MouseButtonEventHandler(shape_MouseLeftButtonDown);
     330            newPluginContainerView.MouseLeftButtonUp += new MouseButtonEventHandler(shape_MouseLeftButtonUp);
     331            newPluginContainerView.SetPosition(model.Position);
     332            this.root.Children.Add(newPluginContainerView);
     333            Canvas.SetZIndex(newPluginContainerView, 100);
    253334        }
    254335    }
Note: See TracChangeset for help on using the changeset viewer.