Ejemplo n.º 1
0
        private TabItem GenerateActorTabItem(Staff staff)
        {
            // Create view model for node network.
            NetworkViewModel model = new NetworkViewModel();

            // If this actor has at least one cut...
            if (staff.FirstCut != null)
            {
                staff.FirstCut.NodeViewModel.CreateNodesRecursive(model, null);
            }
            else
            {
                BeginNodeViewModel begin_node = new BeginNodeViewModel(staff);
                model.Nodes.Edit(x => x.Add(begin_node));
            }

            // Create the visual component of the node network.
            NetworkView v = new NetworkView()
            {
                HorizontalAlignment        = System.Windows.HorizontalAlignment.Stretch,
                VerticalAlignment          = System.Windows.VerticalAlignment.Stretch,
                HorizontalContentAlignment = System.Windows.HorizontalAlignment.Stretch,
                VerticalContentAlignment   = System.Windows.VerticalAlignment.Stretch,
                ViewModel = model
            };

            v.ContextMenu = new ActorTabContextMenu(staff);
            v.Events().LayoutUpdated
            .Where(_ => v.ViewModel != null && v.ViewModel.Nodes.Count > 0)
            .Select(_ => v.ViewModel.Nodes.Items.Last().Size)
            .Where(size => size.Width > 0 && size.Height > 0)
            .FirstAsync()
            .Subscribe(size => { ArrangeNodes(model); });

            model.SelectedNodes.Connect().Subscribe(d => { OnSelectedNodesChanged(d); });


            m_StaffNodeViews.Add(v);

            // Finally, create the new tab.
            TabItem new_tab = new TabItem()
            {
                Header = staff.Name, Content = v
            };

            ContextMenu TabContext = new ContextMenu();

            TabContext.Items.Add(new MenuItem()
            {
                Header = "Remove Actor", Command = RemoveStaffCommand, CommandParameter = new Tuple <TabItem, Staff>(new_tab, staff)
            });

            new_tab.ContextMenu = TabContext;
            return(new_tab);
        }