コード例 #1
0
        public void RefreshControllerName(IControllerDevice controller)
        {
            var path = GenerateEquivalentTreeNodeFullPathFromController(controller);
            var node = FindNodeInTreeAtPath(treeview, path);

            if (node.Tag == controller)
            {
                node.Text = controller.Name;
            }
        }
コード例 #2
0
ファイル: ControllerTree.cs プロジェクト: stewmc/vixen
		public void PopulateControllerTree(IControllerDevice controllerToSelect = null)
		{
			if (controllerToSelect == null) {
				_PopulateControllerTree();
				return;
			}

			List<string> treeNodes = new List<string>();
			treeNodes.Add(GenerateEquivalentTreeNodeFullPathFromController(controllerToSelect));
			_PopulateControllerTree(treeNodes);
		}
コード例 #3
0
ファイル: SetupPatchingSimple.cs プロジェクト: stewmc/vixen
        private void _updateControllerDetails(ControllersAndOutputsSet controllersAndOutputs)
        {
            int controllerCount = 0;
            int patchedCount = 0;
            int unpatchedCount = 0;

            _controllerInputs = new List<PatchStatusItem<IDataFlowComponent>>();

            foreach (KeyValuePair<IControllerDevice, HashSet<int>> controllersAndOutput in controllersAndOutputs) {
                controllerCount++;
                IControllerDevice controller = controllersAndOutput.Key;

                foreach (int outputIndex in controllersAndOutput.Value) {
                    if (outputIndex > controller.Outputs.Length) {
                        Logging.Warn("passed an output index greater than the controller output length: " + controller.Name + ", " + outputIndex);
                        continue;
                    }

                    bool patched;
                    if (controller.Outputs[outputIndex].Source == null || controller.Outputs[outputIndex].Source.Component == null) {
                        unpatchedCount++;
                        patched = false;
                    } else {
                        patchedCount++;
                        patched = true;
                    }
                    _controllerInputs.Add(new PatchStatusItem<IDataFlowComponent>((controller as OutputController).GetDataFlowComponentForOutput(controller.Outputs[outputIndex]), patched));
                }
            }

            labelControllerCount.Text = controllerCount.ToString();
            labelOutputCount.Text = (patchedCount + unpatchedCount).ToString();
            labelPatchedOutputCount.Text = patchedCount.ToString();
            labelUnpatchedOutputCount.Text = unpatchedCount.ToString();

            buttonUnpatchControllers.Enabled = patchedCount > 0;

            if (checkBoxReverseOutputOrder.Checked) {
                _controllerInputs.Reverse();
            }

            labelFirstOutput.Text = "";
            labelLastOutput.Text = "";

            if (_controllerInputs.Any()) {
                IControllerDevice controller;
                int outputIndex;
                VixenSystem.OutputControllers.getOutputDetailsForDataFlowComponent(_controllerInputs.First().Item, out controller, out outputIndex);
                labelFirstOutput.Text = string.Format("{0} #{1}", controller.Name, outputIndex + 1);

                VixenSystem.OutputControllers.getOutputDetailsForDataFlowComponent(_controllerInputs.Last().Item, out controller, out outputIndex);
                labelLastOutput.Text = string.Format("{0} #{1}", controller.Name, outputIndex + 1);
            }
        }
コード例 #4
0
        public ControllersAndOutputsSet BuildSelectedControllersAndOutputs()
        {
            ControllersAndOutputsSet result = new ControllersAndOutputsSet();

            foreach (TreeNode node in controllerTree.SelectedTreeNodes)
            {
                IControllerDevice controller = node.Tag as IControllerDevice;
                int outputIndex = -1;

                if (controller == null)
                {
                    if (node.Tag is int)
                    {
                        outputIndex = (int)node.Tag;
                        controller  = node.Parent.Tag as IControllerDevice;
                        if (controller == null)
                        {
                            Logging.Error("node parent is not a controller: " + node.Name);
                        }
                    }
                }

                if (controller != null)
                {
                    HashSet <int> selectedOutputs;
                    result.TryGetValue(controller, out selectedOutputs);
                    if (selectedOutputs == null)
                    {
                        selectedOutputs    = new HashSet <int>();
                        result[controller] = selectedOutputs;
                    }

                    // if there wasn't a specific output that this was about, add all outputs for the controller
                    if (outputIndex < 0)
                    {
                        for (int i = 0; i < controller.OutputCount; i++)
                        {
                            selectedOutputs.Add(i);
                        }
                    }
                    else
                    {
                        selectedOutputs.Add(outputIndex);
                    }
                }
                else
                {
                    Logging.Error("can't figure out what controller the node maps to: " + node.Name);
                }
            }

            return(result);
        }
コード例 #5
0
ファイル: ControllerTree.cs プロジェクト: starry-au/vixen
        public void PopulateControllerTree(IControllerDevice controllerToSelect = null)
        {
            if (controllerToSelect == null)
            {
                _PopulateControllerTree();
                return;
            }

            List <string> treeNodes = new List <string>();

            treeNodes.Add(GenerateEquivalentTreeNodeFullPathFromController(controllerToSelect));
            _PopulateControllerTree(treeNodes);
        }
コード例 #6
0
        public bool ConfigureController(IControllerDevice controller)
        {
            bool result = false;

            if (controller.HasSetup)
            {
                result = controller.Setup();
                if (result)
                {
                    OnControllersChanged();
                }
            }
            return(result);
        }
コード例 #7
0
ファイル: ControllerTree.cs プロジェクト: starry-au/vixen
 public bool SetControllerOutputCount(IControllerDevice controller)
 {
     using (NumberDialog nd = new NumberDialog("Controller Output Count", "Outputs on this controller?", controller.OutputCount)) {
         if (nd.ShowDialog() == DialogResult.OK)
         {
             // TODO: blergh, dodgy hack
             (controller as OutputController).OutputCount = nd.Value;
             OnControllersChanged();
             PopulateControllerTree();
             return(true);
         }
     }
     return(false);
 }
コード例 #8
0
ファイル: ControllerTree.cs プロジェクト: starry-au/vixen
        public void PopulateControllerTree(Dictionary <IControllerDevice, HashSet <int> > controllersAndOutputs)
        {
            List <string> selectedNodes = new List <string>();

            foreach (KeyValuePair <IControllerDevice, HashSet <int> > controllerAndOutput in controllersAndOutputs)
            {
                IControllerDevice controller = controllerAndOutput.Key;
                foreach (int i in controllerAndOutput.Value)
                {
                    selectedNodes.Add(GenerateEquivalentTreeNodeFullPathFromControllerAndOutput(controller, i));
                }
            }

            _PopulateControllerTree(selectedNodes);
        }
コード例 #9
0
ファイル: ControllerTree.cs プロジェクト: starry-au/vixen
 public bool RenameControllerWithPrompt(IControllerDevice outputController)
 {
     using (TextDialog textDialog = new TextDialog("Controller Name?", "Controller Name", outputController.Name, true)) {
         if (textDialog.ShowDialog() == DialogResult.OK)
         {
             if (textDialog.Response != string.Empty)
             {
                 outputController.Name = textDialog.Response;
                 OnControllersChanged();
                 PopulateControllerTree();
                 return(true);
             }
         }
     }
     return(false);
 }
コード例 #10
0
        public void RefreshControllerOutputNames(IControllerDevice controller)
        {
            treeview.BeginUpdate();
            var path = GenerateEquivalentTreeNodeFullPathFromController(controller);
            var node = FindNodeInTreeAtPath(treeview, path);

            if (node.Tag == controller)
            {
                foreach (TreeNode channelNode in node.Nodes)
                {
                    if (channelNode.Tag is int i)
                    {
                        channelNode.Name = channelNode.Text = controller.Outputs[i].Name;
                    }
                }
            }
            treeview.EndUpdate();
        }
コード例 #11
0
ファイル: ControllerTree.cs プロジェクト: starry-au/vixen
        private void AddControllerToTree(TreeNodeCollection collection, IControllerDevice controller)
        {
            TreeNode controllerNode = new TreeNode();

            controllerNode.Name = controller.Id.ToString();
            controllerNode.Text = controller.Name;
            controllerNode.Tag  = controller;

            if (controller.IsRunning)
            {
                controllerNode.ImageKey = controllerNode.SelectedImageKey = "Group";
            }
            else
            {
                controllerNode.ImageKey = controllerNode.SelectedImageKey = "RedBall";
            }

            collection.Add(controllerNode);

            for (int i = 0; i < controller.OutputCount; i++)
            {
                TreeNode channelNode = new TreeNode();
                channelNode.Name = controller.Outputs[i].Name;
                channelNode.Text = controller.Outputs[i].Name;
                channelNode.Tag  = i;

                IDataFlowComponentReference source = controller.Outputs[i].Source;

                if (source == null)
                {
                    channelNode.ImageKey = channelNode.SelectedImageKey = "WhiteBall";
                }
                else if (source.Component == null || source.OutputIndex < 0)
                {
                    channelNode.ImageKey = channelNode.SelectedImageKey = "GreyBall";
                }
                else
                {
                    channelNode.ImageKey = channelNode.SelectedImageKey = "GreenBall";
                }

                controllerNode.Nodes.Add(channelNode);
            }
        }
コード例 #12
0
        /// <summary>
        /// Add a new controller without rebuilding the entire tree
        /// </summary>
        /// <param name="controller"></param>
        public void AddControllerToTree(IControllerDevice controller)
        {
            treeview.BeginUpdate();
            treeview.SelectedNodes.Clear();
            _topDisplayedNodes.Clear();
            AddControllerToTree(treeview.Nodes, controller);
            _selectedNodes.Clear();
            _selectedNodes.Add(GenerateEquivalentTreeNodeFullPathFromController(controller));

            var treeNode = treeview.Nodes[treeview.Nodes.Count - 1];

            //Select the new controller
            treeview.AddSelectedNode(treeview.Nodes[treeview.Nodes.Count - 1]);

            treeview.EndUpdate();

            treeNode.EnsureVisible();

            OnControllerSelectionChanged();
        }
コード例 #13
0
        private void _updateControllerDetails(ControllersAndOutputsSet controllersAndOutputs)
        {
            int controllerCount = 0;
            int patchedCount    = 0;
            int unpatchedCount  = 0;

            _controllerInputs = new List <PatchStatusItem <IDataFlowComponent> >();

            foreach (KeyValuePair <IControllerDevice, HashSet <int> > controllersAndOutput in controllersAndOutputs)
            {
                controllerCount++;
                IControllerDevice controller = controllersAndOutput.Key;

                foreach (int outputIndex in controllersAndOutput.Value)
                {
                    if (outputIndex > controller.Outputs.Length)
                    {
                        Logging.Warn("passed an output index greater than the controller output length: " + controller.Name + ", " + outputIndex);
                        continue;
                    }

                    bool patched;
                    if (controller.Outputs[outputIndex].Source == null || controller.Outputs[outputIndex].Source.Component == null)
                    {
                        unpatchedCount++;
                        patched = false;
                    }
                    else
                    {
                        patchedCount++;
                        patched = true;
                    }
                    _controllerInputs.Add(new PatchStatusItem <IDataFlowComponent>((controller as OutputController).GetDataFlowComponentForOutput(controller.Outputs[outputIndex]), patched));
                }
            }

            labelControllerCount.Text      = controllerCount.ToString();
            labelOutputCount.Text          = (patchedCount + unpatchedCount).ToString();
            labelPatchedOutputCount.Text   = patchedCount.ToString();
            labelUnpatchedOutputCount.Text = unpatchedCount.ToString();
        }
コード例 #14
0
ファイル: ControllerTree.cs プロジェクト: stewmc/vixen
		private void AddControllerToTree(TreeNodeCollection collection, IControllerDevice controller)
		{
			TreeNode controllerNode = new TreeNode();

			controllerNode.Name = controller.Id.ToString();
			controllerNode.Text = controller.Name;
			controllerNode.Tag = controller;

			if (controller.IsRunning)
				controllerNode.ImageKey = controllerNode.SelectedImageKey = "Group";
			else
				controllerNode.ImageKey = controllerNode.SelectedImageKey = "RedBall";

			collection.Add(controllerNode);

			for (int i = 0; i < controller.OutputCount; i++) {
				TreeNode channelNode = new TreeNode();
                channelNode.Name = controller.Outputs[i].Name;
                channelNode.Text = controller.Outputs[i].Name;
				channelNode.Tag = i;

				IDataFlowComponentReference source = controller.Outputs[i].Source;

				if (source == null) {
					channelNode.ImageKey = channelNode.SelectedImageKey = "WhiteBall";
				} else if (source.Component == null || source.OutputIndex < 0) {
					channelNode.ImageKey = channelNode.SelectedImageKey = "GreyBall";
				} else {
					channelNode.ImageKey = channelNode.SelectedImageKey = "GreenBall";
				}

				controllerNode.Nodes.Add(channelNode);
			}
		}
コード例 #15
0
 public ElementsToSingleController(IEnumerable <Element> elements, IControllerDevice controllerDevice, int startingOutputIndex = 0, int outputsPerElement = 1)
     : this(elements, controllerDevice, controllerDevice.OutputCount, startingOutputIndex, outputsPerElement)
 {
 }
コード例 #16
0
        public bool getOutputDetailsForDataFlowComponent(IDataFlowComponent component, out IControllerDevice controller, out int outputIndex)
        {
            controller  = null;
            outputIndex = 0;

            if (component == null)
            {
                return(false);
            }

            Tuple <IControllerDevice, int> data;
            bool result = _outputDataFlowComponentToController.TryGetValue(component, out data);

            if (data != null)
            {
                controller  = data.Item1;
                outputIndex = data.Item2;
            }

            return(result);
        }
コード例 #17
0
ファイル: ControllerTree.cs プロジェクト: starry-au/vixen
 private string GenerateEquivalentTreeNodeFullPathFromControllerAndOutput(IControllerDevice controller, int output)
 {
     return(controller.Id + treeview.PathSeparator + controller.Outputs[output].Name);           //treeview.PathSeparator + "#" + (output + 1);
 }
コード例 #18
0
        public void PopulateControllerTree(IControllerDevice controllerToSelect = null)
        {
            // save metadata that is currently in the treeview
            _expandedNodes     = new HashSet <string>();
            _selectedNodes     = new HashSet <string>();
            _topDisplayedNodes = new List <string>();

            SaveTreeNodeState(treeview.Nodes);
            SaveTreeNodeTopVisible();

            // clear the treeview, and repopulate it
            treeview.BeginUpdate();
            treeview.Nodes.Clear();
            treeview.SelectedNodes.Clear();

            foreach (IControllerDevice controller in VixenSystem.OutputControllers)
            {
                AddControllerToTree(treeview.Nodes, controller);
            }

            // go through all the data we saved, and try to update the treeview to look
            // like it used to (expanded nodes, selected nodes, node at the top)

            foreach (string node in _expandedNodes)
            {
                TreeNode resultNode = FindNodeInTreeAtPath(treeview, node);

                if (resultNode != null)
                {
                    resultNode.Expand();
                }
            }

            // if a new controller has been passed in to select, select it instead.
            if (controllerToSelect != null)
            {
                _selectedNodes = new HashSet <string>();
                _selectedNodes.Add(GenerateEquivalentTreeNodeFullPathFromController(controllerToSelect, treeview.PathSeparator));
            }

            foreach (string node in _selectedNodes)
            {
                TreeNode resultNode = FindNodeInTreeAtPath(treeview, node);

                if (resultNode != null)
                {
                    treeview.AddSelectedNode(resultNode);
                }
            }

            treeview.EndUpdate();

            // see stackoverflow.com/questions/626315/winforms-listview-remembering-scrolled-location-on-reload .
            // we can only set the topNode after EndUpdate(). Also, it might throw an exception -- weird?
            foreach (string node in _topDisplayedNodes)
            {
                TreeNode resultNode = FindNodeInTreeAtPath(treeview, node);

                if (resultNode != null)
                {
                    try {
                        treeview.TopNode = resultNode;
                    } catch (Exception) {
                        Logging.Warn("exception caught trying to set TopNode.");
                    }
                    break;
                }
            }

            // finally, if we were selecting another controller, make sure we raise the selection changed event
            if (controllerToSelect != null)
            {
                OnControllerSelectionChanged();
            }
        }
コード例 #19
0
ファイル: ControllerTree.cs プロジェクト: Jchuchla/vixen
        public void PopulateControllerTree(IControllerDevice controllerToSelect = null)
        {
            // save metadata that is currently in the treeview
            _expandedNodes = new HashSet<string>();
            _selectedNodes = new HashSet<string>();
            _topDisplayedNodes = new List<string>();

            SaveTreeNodeState(treeview.Nodes);
            SaveTreeNodeTopVisible();

            // clear the treeview, and repopulate it
            treeview.BeginUpdate();
            treeview.Nodes.Clear();
            treeview.SelectedNodes.Clear();

            foreach (IControllerDevice controller in VixenSystem.OutputControllers) {
                AddControllerToTree(treeview.Nodes, controller);
            }

            // go through all the data we saved, and try to update the treeview to look
            // like it used to (expanded nodes, selected nodes, node at the top)

            foreach (string node in _expandedNodes) {
                TreeNode resultNode = FindNodeInTreeAtPath(treeview, node);

                if (resultNode != null) {
                    resultNode.Expand();
                }
            }

            // if a new controller has been passed in to select, select it instead.
            if (controllerToSelect != null) {
                _selectedNodes = new HashSet<string>();
                _selectedNodes.Add(GenerateEquivalentTreeNodeFullPathFromController(controllerToSelect, treeview.PathSeparator));
            }

            foreach (string node in _selectedNodes) {
                TreeNode resultNode = FindNodeInTreeAtPath(treeview, node);

                if (resultNode != null) {
                    treeview.AddSelectedNode(resultNode);
                }
            }

            treeview.EndUpdate();

            // see stackoverflow.com/questions/626315/winforms-listview-remembering-scrolled-location-on-reload .
            // we can only set the topNode after EndUpdate(). Also, it might throw an exception -- weird?
            foreach (string node in _topDisplayedNodes) {
                TreeNode resultNode = FindNodeInTreeAtPath(treeview, node);

                if (resultNode != null) {
                    try {
                        treeview.TopNode = resultNode;
                    } catch (Exception) {
                         Logging.Warn("exception caught trying to set TopNode.");
                    }
                    break;
                }
            }

            // finally, if we were selecting another controller, make sure we raise the selection changed event
            if (controllerToSelect != null) {
                OnControllerSelectionChanged();
            }
        }
コード例 #20
0
ファイル: ControllerTree.cs プロジェクト: starry-au/vixen
 private string GenerateEquivalentTreeNodeFullPathFromController(IControllerDevice controller)
 {
     return(controller.Id.ToString());
 }
コード例 #21
0
ファイル: ControllerTree.cs プロジェクト: stewmc/vixen
		public bool SetControllerOutputCount(IControllerDevice controller)
		{
			using (NumberDialog nd = new NumberDialog("Controller Output Count", "Outputs on this controller?", controller.OutputCount)) {
				if (nd.ShowDialog() == DialogResult.OK) {
					// TODO: blergh, dodgy hack
					(controller as OutputController).OutputCount = nd.Value;
					OnControllersChanged();
					PopulateControllerTree();
					return true;
				}
			}
			return false;
		}
コード例 #22
0
ファイル: ControllerTree.cs プロジェクト: stewmc/vixen
		public bool ConfigureController(IControllerDevice controller)
		{
			bool result = false;
			if (controller.HasSetup) {
				result = controller.Setup();
                if (result)
                {
                    OnControllersChanged();
                    PopulateControllerTree();
                }
			}
			return result;
		}
コード例 #23
0
        public void AddControllerOutputForDataFlowComponent(IDataFlowComponent component, IControllerDevice controller, int outputIndex)
        {
            if (_outputDataFlowComponentToController.ContainsKey(component))
            {
                Logging.Error("map already contains link for component: " + component.Name);
            }

            _outputDataFlowComponentToController[component] = new Tuple <IControllerDevice, int>(controller, outputIndex);
        }
コード例 #24
0
ファイル: ControllerTree.cs プロジェクト: stewmc/vixen
		private string GenerateEquivalentTreeNodeFullPathFromController(IControllerDevice controller)
		{
			return controller.Id.ToString();
		}
コード例 #25
0
 private string GenerateEquivalentTreeNodeFullPathFromControllerAndOutput(IControllerDevice controller, int output)
 {
     return(controller.Id.ToString() + treeview.PathSeparator + "#" + (output + 1));
 }
コード例 #26
0
ファイル: ControllerTree.cs プロジェクト: stewmc/vixen
		private string GenerateEquivalentTreeNodeFullPathFromControllerAndOutput(IControllerDevice controller, int output)
		{
			return controller.Id + treeview.PathSeparator + controller.Outputs[output].Name;//treeview.PathSeparator + "#" + (output + 1);
		}
コード例 #27
0
ファイル: ControllerTree.cs プロジェクト: stewmc/vixen
		public bool RenameControllerWithPrompt(IControllerDevice outputController)
		{
			using (TextDialog textDialog = new TextDialog("Controller Name?", "Controller Name", outputController.Name, true)) {
				if (textDialog.ShowDialog() == DialogResult.OK) {
					if (textDialog.Response != string.Empty) {
						outputController.Name = textDialog.Response;
						OnControllersChanged();
						PopulateControllerTree();
						return true;
					}
				}
			}
			return false;
		}