public void AddEdge(DeviceControl device1, DeviceControl device2)
        {
            //makes sure the edge is valid and does not already exist
            if (Edge[device1].ContainsKey(device2) || device1.DataFlow == device2.DataFlow)
            {
                return;
            }

            //create a "repeater" for the edge
            DeviceControl capture;
            DeviceControl render;

            if (device1.DataFlow == DataFlow.Capture)
            {
                capture = device1;
                render  = device2;
            }
            else
            {
                capture = device2;
                render  = device1;
            }

            RepeaterInfo repeater = new RepeaterInfo(capture, render, this);

            AddEdge(device1, device2, repeater);
        }
 public void RemoveEdge(DeviceControl device1, DeviceControl device2)
 {
     //removes adjacent vertex from vertex's dictionary
     MainWindow.GraphMap.Children.Remove(Edge[device1][device2].Link);
     Edge[device1].Remove(device2);
     Edge[device2].Remove(device1);
 }
        private void AddEdge(DeviceControl device1, DeviceControl device2, RepeaterInfo info)
        {
            Edge[device1].Add(device2, info);
            Edge[device2].Add(device1, info);

            MainWindow.GraphMap.Children.Add(info.Link);
        }
 public void AddVertex(DeviceControl device)
 {
     //if vertex does not exist, add vertex
     if (!Edge.ContainsKey(device))
     {
         Edge[device] = new Dictionary <DeviceControl, RepeaterInfo>();
     }
 }
        public void RemoveVertex(DeviceControl device)
        {
            /* remove vertex along with any edges the vertex is an endpoint to */

            //remove device from adjacent devices' dictionaries
            foreach (DeviceControl adj in Edge[device].Keys)
            {
                Edge[adj].Remove(device);
                MainWindow.GraphMap.Children.Remove(Edge[device][adj].Link);
            }

            //remove adjacent devices from device dictionary
            Edge.Remove(device);
            MainWindow.GraphMap.Children.Remove(device);
        }
        private void addDevice()
        {
            AddDeviceDialog dialog = new AddDeviceDialog();

            dialog.Owner = this;

            dialog.ShowDialog();

            if (dialog.Device == null)
            {
                return;
            }

            DeviceControl control = new DeviceControl(dialog.Device, Graph);

            Graph.AddVertex(control);
            graphCanvas.Children.Add(control);
            Canvas.SetLeft(control, 0);
            Canvas.SetTop(control, 0);
        }
 private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 {
     SelectedControl = this;
     if (MainWindow.SelectedTool == "Hand")
     {
         start = Mouse.GetPosition(sender as UIElement);
         Panel.SetZIndex(this, 2);
     }
     else
     {
         if (InitialLink == null)
         {
             InitialLink = this;
         }
         else
         {
             Graph.AddEdge(InitialLink, this);
             InitialLink = null;
         }
     }
 }
 public Dictionary <DeviceControl, RepeaterInfo> GetAdjacent(DeviceControl device)
 {
     return(Edge[device]);
 }
        public static BipartiteDeviceGraph LoadGraph(string filename)
        {
            BipartiteDeviceGraph graph = new BipartiteDeviceGraph();

            StreamReader reader = new StreamReader(filename);

            Dictionary <string, MMDevice> deviceFromID = new Dictionary <string, MMDevice>();

            //create ID dictionary to get the correct MMDevice
            foreach (MMDevice device in new MMDeviceEnumerator().EnumerateAudioEndPoints(DataFlow.All, DeviceState.All))
            {
                deviceFromID[device.ID] = device;
            }

            if (!int.TryParse(reader.ReadLine(), out int N))
            {
                return(new BipartiteDeviceGraph());
            }

            DeviceControl[] devices = new DeviceControl[N];

            //get array of verteces
            for (int i = 0; i < N; i++)
            {
                try
                {
                    MMDevice device = deviceFromID[reader.ReadLine()];
                    double[] pos    = reader.ReadLine().Split().Select(x => double.Parse(x)).ToArray();

                    DeviceControl control = new DeviceControl(device, graph);
                    control.Left = pos[0];
                    control.Top  = pos[1];
                    MainWindow.GraphMap.Children.Add(control);
                    graph.AddVertex(control);
                    devices[i] = control;
                }
                catch
                {
                    devices[i] = null;
                }
            }

            if (!int.TryParse(reader.ReadLine(), out int M))
            {
                return(new BipartiteDeviceGraph());
            }

            //add edges to graph
            for (int i = 0; i < M; i++)
            {
                int[]         adj  = reader.ReadLine().Split().Select(x => int.Parse(x)).ToArray();
                List <string> data = new List <string>();
                for (int j = 0; j < 8; j++)
                {
                    data.Add(reader.ReadLine());
                }

                DeviceControl capture = devices[adj[0]];
                DeviceControl render  = devices[adj[1]];

                if (capture == null || render == null)
                {
                    continue;
                }

                RepeaterInfo repeater = new RepeaterInfo(capture, render, graph);
                repeater.SetData(data);

                graph.AddEdge(capture, render, repeater);
            }

            reader.Close();

            return(graph);
        }
Example #10
0
        public RepeaterInfo(DeviceControl capture, DeviceControl render, BipartiteDeviceGraph graph)
        {
            captureContext        = new MenuItem();
            captureContext.Header = render.DeviceName;
            captureContext.Click += context_Click;
            capture.ContextMenu.Items.Add(captureContext);

            renderContext        = new MenuItem();
            renderContext.Header = capture.DeviceName;
            renderContext.Click += context_Click;
            render.ContextMenu.Items.Add(renderContext);

            Capture = capture;
            Render  = render;
            Link    = new Line
            {
                Stroke          = Brushes.White,
                StrokeThickness = 2,
            };

            Binding bx1 = new Binding("X")
            {
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Source = capture
            };

            Link.SetBinding(Line.X1Property, bx1);

            Binding by1 = new Binding("Y")
            {
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Source = capture
            };

            Link.SetBinding(Line.Y1Property, by1);

            Binding bx2 = new Binding("X")
            {
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Source = render
            };

            Link.SetBinding(Line.X2Property, bx2);

            Binding by2 = new Binding("Y")
            {
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Source = render
            };

            Link.SetBinding(Line.Y2Property, by2);

            SamplingRate  = DefaultData.SamplingRate;
            BitsPerSample = DefaultData.BitsPerSample;
            ChannelConfig = DefaultData.ChannelConfig;
            BufferMs      = DefaultData.BufferMs;
            Buffers       = DefaultData.Buffers;
            Prefill       = DefaultData.Prefill;
            ResyncAt      = DefaultData.ResyncAt;
            WindowName    = DefaultData.WindowName;
            Path          = DefaultData.RepeaterPath;

            this.graph = graph;
        }