private void EffectSelectionDropDownClosed(object sender, EventArgs e)
        {
            HideOptionWindow();
            switch (LeftMonitorSelect.SelectionBoxItem.ToString())
            {
            case "ExpandingObjects":
                ex_eff = expandingObjects.ExpandingObjects_execute;

                SelectedWindow = expandingObjectsWindow;
                expandingObjectsWindow.Show();
                break;

            case "MovingBalls":
                exp    = new CollisonBalls(monitor);
                ex_eff = exp.CollisonBalls_execute;

                break;

            case "ScrollingText":
                movingText.ColorPalette = Palettes.BlueGreen;
                ex_eff         = movingText.MovingText_execute;
                SelectedWindow = movingTextOptionWindow;
                movingTextOptionWindow.Show();
                break;

            case "Plasma":
                plasmaOptionWindow.Show();
                SelectedWindow = plasmaOptionWindow;
                ex_eff         = plasma.Plasma_execute;

                break;

            case "GradientColor":
                gradientOptionWindow.Show();
                SelectedWindow             = gradientOptionWindow;
                colorGradient.GradientMode = Gradient.Radial;
                ex_eff = colorGradient.ColorGradient_execute;

                break;

            case "None":
                monitor.Clear();
                ex_eff = null;

                SelectedWindow = null;
                break;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Menu_Mouse_Down(object sender, RoutedEventArgs e)
        {
            FrameworkElement feSource = e.Source as FrameworkElement;
            switch (feSource.Name)
            {
                case "Connect":
                    if(!init)
                        Init_Connect_Window();
                    else
                    {
                         portWindow.Visibility = Visibility.Visible;

                     }
                    break;
                case "Bluetooth":
                    BluetoothWindow b_w = new BluetoothWindow(this);
                    b_w.Show();
                    break;
                case "Draw":
                    if (tetris != null)
                    {
                        tetris.Stop_Tetris();

                    }
                    if (video != null)
                        video.RunVideo = false;
                    if (webcam != null)
                        webcam.closeWebcam();

                    runningTask = RunningTask.Draw;
                    drawAccept = true;

                    draw = new Draw(drawlayer,monitorImg,monitor);
                    ex_eff = draw.Draw_execute;

                    draw.setColor = Color.FromArgb(255, 0, 0, 255);
                    draw.setDrawtype = Drawtype.rectangle;

                    Binding ColorBinding = new Binding("setColor");
                    ColorBinding.Source = draw;
                    ColorBinding.Mode = BindingMode.TwoWay;
                    DrawingColorPicker.SetBinding(Xceed.Wpf.Toolkit.ColorCanvas.SelectedColorProperty, ColorBinding);

                    break;
                case "Effects":
                    if (tetris != null)
                    {
                        tetris.Stop_Tetris();

                    }
                    if (video != null)
                        video.RunVideo = false;
                    if (webcam != null)
                        webcam.closeWebcam();

                    runningTask = RunningTask.Effect;
                    drawAccept = false;
                    ex_eff = plasma.Plasma_execute;

                    monitorTimer.IsEnabled = true;

                    break;
                case "Images":
                    if (tetris != null)
                    {
                        tetris.Stop_Tetris();
                        monitor = BitmapFactory.New(68, 42);
                        monitorImg.Source = monitor;

                    }
                    if (webcam != null)
                        webcam.closeWebcam();
                    if (video != null)
                        video.RunVideo = false;

                    drawAccept = false;
                    monitorImg.Source = monitor;
                    runningTask = RunningTask.Image;

                    ip = new ImagePixelate(monitor);
                    ex_eff = ip.execute;

                    break;

                case "Video":
                    if (tetris != null)
                    {
                        tetris.Stop_Tetris();

                        monitorImg.Source = monitor;

                    }
                    if (webcam != null)
                        webcam.closeWebcam();
                    runningTask = RunningTask.Video;

                    CentralMonitor.IsEnabled = false;
                    drawAccept = false;

                    video = new Video(monitor);
                    ex_eff = video.video_execute;

                    video.RunVideo = true;

                    break;
                case "Tetris":

                    if (webcam != null)
                        webcam.closeWebcam();
                    if (video != null)
                        video.RunVideo = false;
                    runningTask = RunningTask.Tetris;
                    drawAccept = false;

                    if (tetris == null)
                    {

                        tetris = new TetrisExecute(monitor, monitorTimer, AuroraWindow);
                        ex_eff = tetris.tetris_exe;

                    }
                    else
                    {
                        tetris.Stop_Tetris();
                        tetris = new TetrisExecute(monitor, monitorTimer, AuroraWindow);
                        ex_eff = tetris.tetris_exe;

                    }
                    break;
                case "Webcam":
                    runningTask = RunningTask.Webcam;
                    CentralMonitor.IsEnabled = false;
                    drawAccept = false;

                    if (tetris != null)
                        tetris.Stop_Tetris();
                    if (webcam == null)
                    {
                        webcam = new Webcam(monitor);
                    }
                    if (video != null)
                        video.RunVideo = false;
                    webcam.resumeWebcam(monitor);
                    ex_eff = webcam.Webcam_execute;

                    break;

            }
            SetUserControls();
        }
        private void EffectSelectionDropDownClosed(object sender, EventArgs e)
        {
            HideOptionWindow();
            switch (LeftMonitorSelect.SelectionBoxItem.ToString())
            {
                case "ExpandingObjects":
                    ex_eff = expandingObjects.ExpandingObjects_execute;

                    SelectedWindow = expandingObjectsWindow;
                    expandingObjectsWindow.Show();
                    break;
                case "MovingBalls":
                    exp = new CollisonBalls(monitor);
                    ex_eff = exp.CollisonBalls_execute;

                    break;
                case "ScrollingText":
                    movingText.ColorPalette = Palettes.BlueGreen;
                    ex_eff = movingText.MovingText_execute;
                    SelectedWindow = movingTextOptionWindow;
                    movingTextOptionWindow.Show();
                    break;
                case "Plasma":
                    plasmaOptionWindow.Show();
                    SelectedWindow = plasmaOptionWindow;
                    ex_eff = plasma.Plasma_execute;

                    break;
                case "GradientColor":
                    gradientOptionWindow.Show();
                    SelectedWindow = gradientOptionWindow;
                    colorGradient.GradientMode = Gradient.Radial;
                    ex_eff = colorGradient.ColorGradient_execute;

                    break;
                case "None":
                    monitor.Clear();
                    ex_eff = null;

                    SelectedWindow = null;
                    break;
            }
        }
        private void Bluetooth_Command_Listener(object sender, PropertyChangeArgs command)
        {
            try
            {
                int Mode = -1;
                string comm = command.mesg;
                System.Diagnostics.Debug.WriteLine("Command wurde übergeben: " + comm);
                switch (comm)
                {
                    case "Paint":         //Paint
                        {
                            Mode = 0;
                            Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (ThreadStart)delegate
                            {
                                if (tetris != null)
                                {
                                    tetris.Stop_Tetris();
                                    monitor = BitmapFactory.New(68, 42);
                                    monitorImg.Source = monitor;

                                }

                                runningTask = RunningTask.Draw;
                                drawAccept = true;
                                if (video != null)
                                    video.RunVideo = false;
                                if (webcam != null)
                                    webcam.closeWebcam();

                                try
                                {
                                    draw = new Draw(drawlayer, monitorImg, monitor);
                                }
                                catch (Exception exc)
                                {
                                }
                                ex_eff = draw.Draw_execute;

                                draw.setColor = Color.FromArgb(0, 200, 0, 255);
                                draw.setDrawtype = Drawtype.point;

                                Binding ColorBinding = new Binding("setColor");
                                ColorBinding.Source = draw;
                                ColorBinding.Mode = BindingMode.TwoWay;
                                DrawingColorPicker.SetBinding(Xceed.Wpf.Toolkit.ColorCanvas.SelectedColorProperty, ColorBinding);

                                SetUserControls();

                                //object GlassOfSugar = new  Object();
                                //Slider slider = new Slider();
                                //Binding AmountBinding = new Binding("Amount");
                                ////AmountBinding.Source = GlassOfSugar;
                                ////AmountBinding.Mode = BindingMode.TwoWay;
                                //slider.SetBinding(Slider.ValueProperty, AmountBinding);

                            });

                            break;
                        }
                    case "Fotobearbeitung":       //Pixelated Picture
                        {
                            Mode = 1;

                            Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (ThreadStart)delegate
                            {
                                if (tetris != null)
                                {
                                    tetris.Stop_Tetris();
                                    monitor = BitmapFactory.New(68, 42);
                                    monitorImg.Source = monitor;

                                }

                                runningTask = RunningTask.Draw;
                                drawAccept = true;
                                if (video != null)
                                    video.RunVideo = false;
                                if (webcam != null)
                                    webcam.closeWebcam();

                                try
                                {
                                    draw = new Draw(drawlayer, monitorImg, monitor);
                                }
                                catch (Exception exc)
                                {
                                }
                                ex_eff = draw.Draw_execute;

                                draw.setColor = Color.FromArgb(0, 200, 0, 255);
                                draw.setDrawtype = Drawtype.point;

                                Binding ColorBinding = new Binding("setColor");
                                ColorBinding.Source = draw;
                                ColorBinding.Mode = BindingMode.TwoWay;
                                DrawingColorPicker.SetBinding(Xceed.Wpf.Toolkit.ColorCanvas.SelectedColorProperty, ColorBinding);

                                SetUserControls();

                                //object GlassOfSugar = new Object();
                                //Slider slider = new Slider();
                                //Binding AmountBinding = new Binding("Amount");
                                //AmountBinding.Source = GlassOfSugar;
                                //AmountBinding.Mode = BindingMode.TwoWay;
                                //slider.SetBinding(Slider.ValueProperty, AmountBinding);

                            });

                            break;
                        }
                    case "Tetris":       //Tetris
                        {
                            Mode = 2;

                            Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (ThreadStart)delegate
                            {
                                if (webcam != null)
                                    webcam.closeWebcam();

                                runningTask = RunningTask.Tetris;
                                drawAccept = false;
                                //Versuchsweise eingebaut -> dt_m.Tick ist fehlerquelle -.-  -> sollte eigentlich nicht sein
                                //dt_m.IsEnabled = false;

                                if (tetris == null)
                                {
                                    monitor = BitmapFactory.New(68, 42);
                                    monitorImg.Source = monitor;
                                    tetris = new TetrisExecute(monitor, monitorTimer, AuroraWindow);
                                    ex_eff = tetris.tetris_exe;

                                    Binding ScoreBinding = new Binding("Score");
                                    ScoreBinding.Mode = BindingMode.OneWay;
                                    ScoreBinding.Source = tetris.t;
                                    Points.SetBinding(Label.ContentProperty, ScoreBinding);

                                    Binding LevelBinding = new Binding("Level");
                                    LevelBinding.Mode = BindingMode.OneWay;
                                    LevelBinding.Source = tetris.t;
                                    Level.SetBinding(Label.ContentProperty, LevelBinding);

                                }
                                else
                                {
                                    tetris.Stop_Tetris();
                                    tetris = new TetrisExecute(monitor, monitorTimer, AuroraWindow);
                                    ex_eff = tetris.tetris_exe;

                                    Binding ScoreBinding = new Binding("Score");
                                    ScoreBinding.Mode = BindingMode.TwoWay;
                                    ScoreBinding.Source = tetris.t;
                                    Points.SetBinding(Label.ContentProperty, ScoreBinding);
                                }
                                SetUserControls();
                            });

                            break;
                        }

                    default:
                        {
                            //hier wäre normalerweise ein switch(mode) -> unnötig?

                            break;
                        }
                }

            }
            catch (Exception exc)
            {

            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Menu_Mouse_Down(object sender, RoutedEventArgs e)
        {
            FrameworkElement feSource = e.Source as FrameworkElement;

            switch (feSource.Name)
            {
            case "Connect":
                if (!init)
                {
                    Init_Connect_Window();
                }
                else
                {
                    portWindow.Visibility = Visibility.Visible;
                }
                break;

            case "Bluetooth":
                BluetoothWindow b_w = new BluetoothWindow(this);
                b_w.Show();
                break;

            case "Draw":
                if (tetris != null)
                {
                    tetris.Stop_Tetris();
                }
                if (video != null)
                {
                    video.RunVideo = false;
                }
                if (webcam != null)
                {
                    webcam.closeWebcam();
                }

                runningTask = RunningTask.Draw;
                drawAccept  = true;

                draw   = new Draw(drawlayer, monitorImg, monitor);
                ex_eff = draw.Draw_execute;


                draw.setColor    = Color.FromArgb(255, 0, 0, 255);
                draw.setDrawtype = Drawtype.rectangle;

                Binding ColorBinding = new Binding("setColor");
                ColorBinding.Source = draw;
                ColorBinding.Mode   = BindingMode.TwoWay;
                DrawingColorPicker.SetBinding(Xceed.Wpf.Toolkit.ColorCanvas.SelectedColorProperty, ColorBinding);

                break;

            case "Effects":
                if (tetris != null)
                {
                    tetris.Stop_Tetris();
                }
                if (video != null)
                {
                    video.RunVideo = false;
                }
                if (webcam != null)
                {
                    webcam.closeWebcam();
                }


                runningTask = RunningTask.Effect;
                drawAccept  = false;
                ex_eff      = plasma.Plasma_execute;

                monitorTimer.IsEnabled = true;

                break;

            case "Images":
                if (tetris != null)
                {
                    tetris.Stop_Tetris();
                    monitor           = BitmapFactory.New(68, 42);
                    monitorImg.Source = monitor;
                }
                if (webcam != null)
                {
                    webcam.closeWebcam();
                }
                if (video != null)
                {
                    video.RunVideo = false;
                }


                drawAccept        = false;
                monitorImg.Source = monitor;
                runningTask       = RunningTask.Image;

                ip     = new ImagePixelate(monitor);
                ex_eff = ip.execute;



                break;

            case "Video":
                if (tetris != null)
                {
                    tetris.Stop_Tetris();

                    monitorImg.Source = monitor;
                }
                if (webcam != null)
                {
                    webcam.closeWebcam();
                }
                runningTask = RunningTask.Video;

                CentralMonitor.IsEnabled = false;
                drawAccept = false;

                video  = new Video(monitor);
                ex_eff = video.video_execute;


                video.RunVideo = true;

                break;

            case "Tetris":

                if (webcam != null)
                {
                    webcam.closeWebcam();
                }
                if (video != null)
                {
                    video.RunVideo = false;
                }
                runningTask = RunningTask.Tetris;
                drawAccept  = false;


                if (tetris == null)
                {
                    tetris = new TetrisExecute(monitor, monitorTimer, AuroraWindow);
                    ex_eff = tetris.tetris_exe;
                }
                else
                {
                    tetris.Stop_Tetris();
                    tetris = new TetrisExecute(monitor, monitorTimer, AuroraWindow);
                    ex_eff = tetris.tetris_exe;
                }
                break;

            case "Webcam":
                runningTask = RunningTask.Webcam;
                CentralMonitor.IsEnabled = false;
                drawAccept = false;

                if (tetris != null)
                {
                    tetris.Stop_Tetris();
                }
                if (webcam == null)
                {
                    webcam = new Webcam(monitor);
                }
                if (video != null)
                {
                    video.RunVideo = false;
                }
                webcam.resumeWebcam(monitor);
                ex_eff = webcam.Webcam_execute;

                break;
            }
            SetUserControls();
        }
        private void Bluetooth_Command_Listener(object sender, PropertyChangeArgs command)
        {
            try
            {
                int    Mode = -1;
                string comm = command.mesg;
                System.Diagnostics.Debug.WriteLine("Command wurde übergeben: " + comm);
                switch (comm)
                {
                case "Paint":             //Paint
                {
                    Mode = 0;
                    Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (ThreadStart) delegate
                        {
                            if (tetris != null)
                            {
                                tetris.Stop_Tetris();
                                monitor           = BitmapFactory.New(68, 42);
                                monitorImg.Source = monitor;
                            }

                            runningTask = RunningTask.Draw;
                            drawAccept  = true;
                            if (video != null)
                            {
                                video.RunVideo = false;
                            }
                            if (webcam != null)
                            {
                                webcam.closeWebcam();
                            }

                            try
                            {
                                draw = new Draw(drawlayer, monitorImg, monitor);
                            }
                            catch (Exception exc)
                            {
                            }
                            ex_eff = draw.Draw_execute;

                            draw.setColor    = Color.FromArgb(0, 200, 0, 255);
                            draw.setDrawtype = Drawtype.point;

                            Binding ColorBinding = new Binding("setColor");
                            ColorBinding.Source  = draw;
                            ColorBinding.Mode    = BindingMode.TwoWay;
                            DrawingColorPicker.SetBinding(Xceed.Wpf.Toolkit.ColorCanvas.SelectedColorProperty, ColorBinding);

                            SetUserControls();

                            //object GlassOfSugar = new  Object();
                            //Slider slider = new Slider();
                            //Binding AmountBinding = new Binding("Amount");
                            ////AmountBinding.Source = GlassOfSugar;
                            ////AmountBinding.Mode = BindingMode.TwoWay;
                            //slider.SetBinding(Slider.ValueProperty, AmountBinding);
                        });


                    break;
                }

                case "Fotobearbeitung":           //Pixelated Picture
                {
                    Mode = 1;

                    Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (ThreadStart) delegate
                        {
                            if (tetris != null)
                            {
                                tetris.Stop_Tetris();
                                monitor           = BitmapFactory.New(68, 42);
                                monitorImg.Source = monitor;
                            }

                            runningTask = RunningTask.Draw;
                            drawAccept  = true;
                            if (video != null)
                            {
                                video.RunVideo = false;
                            }
                            if (webcam != null)
                            {
                                webcam.closeWebcam();
                            }

                            try
                            {
                                draw = new Draw(drawlayer, monitorImg, monitor);
                            }
                            catch (Exception exc)
                            {
                            }
                            ex_eff = draw.Draw_execute;

                            draw.setColor    = Color.FromArgb(0, 200, 0, 255);
                            draw.setDrawtype = Drawtype.point;

                            Binding ColorBinding = new Binding("setColor");
                            ColorBinding.Source  = draw;
                            ColorBinding.Mode    = BindingMode.TwoWay;
                            DrawingColorPicker.SetBinding(Xceed.Wpf.Toolkit.ColorCanvas.SelectedColorProperty, ColorBinding);

                            SetUserControls();

                            //object GlassOfSugar = new Object();
                            //Slider slider = new Slider();
                            //Binding AmountBinding = new Binding("Amount");
                            //AmountBinding.Source = GlassOfSugar;
                            //AmountBinding.Mode = BindingMode.TwoWay;
                            //slider.SetBinding(Slider.ValueProperty, AmountBinding);
                        });

                    break;
                }

                case "Tetris":           //Tetris
                {
                    Mode = 2;

                    Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (ThreadStart) delegate
                        {
                            if (webcam != null)
                            {
                                webcam.closeWebcam();
                            }

                            runningTask = RunningTask.Tetris;
                            drawAccept  = false;
                            //Versuchsweise eingebaut -> dt_m.Tick ist fehlerquelle -.-  -> sollte eigentlich nicht sein
                            //dt_m.IsEnabled = false;

                            if (tetris == null)
                            {
                                monitor           = BitmapFactory.New(68, 42);
                                monitorImg.Source = monitor;
                                tetris            = new TetrisExecute(monitor, monitorTimer, AuroraWindow);
                                ex_eff            = tetris.tetris_exe;


                                Binding ScoreBinding = new Binding("Score");
                                ScoreBinding.Mode    = BindingMode.OneWay;
                                ScoreBinding.Source  = tetris.t;
                                Points.SetBinding(Label.ContentProperty, ScoreBinding);

                                Binding LevelBinding = new Binding("Level");
                                LevelBinding.Mode    = BindingMode.OneWay;
                                LevelBinding.Source  = tetris.t;
                                Level.SetBinding(Label.ContentProperty, LevelBinding);
                            }
                            else
                            {
                                tetris.Stop_Tetris();
                                tetris = new TetrisExecute(monitor, monitorTimer, AuroraWindow);
                                ex_eff = tetris.tetris_exe;

                                Binding ScoreBinding = new Binding("Score");
                                ScoreBinding.Mode    = BindingMode.TwoWay;
                                ScoreBinding.Source  = tetris.t;
                                Points.SetBinding(Label.ContentProperty, ScoreBinding);
                            }
                            SetUserControls();
                        });


                    break;
                }

                default:
                {
                    //hier wäre normalerweise ein switch(mode) -> unnötig?

                    break;
                }
                }
            }
            catch (Exception exc)
            {
            }
        }