// ADDS AN ITEM THAT WAS ALREADY CREATED ON THE SERVER, WITH ITS OWN ID
        public void AddItemFromServer(PaletteItemData pid)
        {
            // code from current AddItem function
            Thumb tmbDragThumb = new Thumb();

            tmbDragThumb.Width  = 15;
            tmbDragThumb.Height = 15;

            tmbDragThumb.DragDelta        += new DragDeltaEventHandler(Thumb_DragDelta);
            tmbDragThumb.DragCompleted    += new DragCompletedEventHandler(Thumb_DragCompleted);
            tmbDragThumb.MouseDoubleClick += new MouseButtonEventHandler(Thumb_MouseDown);

            ControlTemplate template = new ControlTemplate();
            var             fec      = new FrameworkElementFactory(typeof(Ellipse));

            fec.SetValue(Ellipse.FillProperty, Brushes.White);

            if (pid.Quadrant == quadrants[0].Name)
            {
                fec.SetValue(Ellipse.StrokeProperty, assumptionBrush);
                fec.SetValue(Ellipse.FillProperty, assumptionBrush);
            }
            else if (pid.Quadrant == quadrants[1].Name)
            {
                fec.SetValue(Ellipse.StrokeProperty, benefitBrush);
                fec.SetValue(Ellipse.FillProperty, benefitBrush);
            }
            else if (pid.Quadrant == quadrants[2].Name)
            {
                fec.SetValue(Ellipse.StrokeProperty, questionBrush);
                fec.SetValue(Ellipse.FillProperty, questionBrush);
            }
            else if (pid.Quadrant == quadrants[3].Name)
            {
                fec.SetValue(Ellipse.StrokeProperty, riskBrush);
                fec.SetValue(Ellipse.FillProperty, riskBrush);
            }

            tmbDragThumb.Tag      = pid.Quadrant;
            template.VisualTree   = fec;
            tmbDragThumb.Template = template;

            Canvas.SetLeft(tmbDragThumb, pid.Position.X - (tmbDragThumb.Width / 2));
            Canvas.SetTop(tmbDragThumb, pid.Position.Y - (tmbDragThumb.Width / 2));

            tmbDragThumb.ToolTip = pid.Content;
            mainCanvas.Children.Add(tmbDragThumb);

            // ADD TO DATA LISTS
            //pid.ItemId = Data.Count; // NOT SURE THIS WILL STAY IN SYNC...SEE WHO CALLS THIS FUNCTION
            Data.Add(pid);
            Thumbs.Add(tmbDragThumb);

            UpdateScore(pid);
        }
        private void MakeThumb(PaletteItemData pid)
        {
            Thumb tmbDragThumb = new Thumb();

            tmbDragThumb.Width  = 15;
            tmbDragThumb.Height = 15;

            tmbDragThumb.DragDelta        += new DragDeltaEventHandler(Thumb_DragDelta);
            tmbDragThumb.DragCompleted    += new DragCompletedEventHandler(Thumb_DragCompleted);
            tmbDragThumb.MouseDoubleClick += new MouseButtonEventHandler(Thumb_MouseDown);

            ControlTemplate template = new ControlTemplate();
            var             fec      = new FrameworkElementFactory(typeof(Ellipse));

            fec.SetValue(Ellipse.FillProperty, Brushes.White);

            if (pid.Quadrant == quadrants[0].Name)
            {
                fec.SetValue(Ellipse.StrokeProperty, assumptionBrush);
                fec.SetValue(Ellipse.FillProperty, assumptionBrush);
            }
            else if (pid.Quadrant == quadrants[1].Name)
            {
                fec.SetValue(Ellipse.StrokeProperty, benefitBrush);
                fec.SetValue(Ellipse.FillProperty, benefitBrush);
            }
            else if (pid.Quadrant == quadrants[2].Name)
            {
                fec.SetValue(Ellipse.StrokeProperty, questionBrush);
                fec.SetValue(Ellipse.FillProperty, questionBrush);
            }
            else if (pid.Quadrant == quadrants[3].Name)
            {
                fec.SetValue(Ellipse.StrokeProperty, riskBrush);
                fec.SetValue(Ellipse.FillProperty, riskBrush);
            }


            tmbDragThumb.Tag      = pid.Quadrant;
            template.VisualTree   = fec;
            tmbDragThumb.Template = template;
            tmbDragThumb.ToolTip  = pid.Content;

            Canvas.SetLeft(tmbDragThumb, pid.Position.X - (tmbDragThumb.Width / 2));
            Canvas.SetTop(tmbDragThumb, pid.Position.Y - (tmbDragThumb.Width / 2));

            mainCanvas.Children.Add(tmbDragThumb);

            Thumbs.Add(tmbDragThumb);
        }
        public void UpdatePaletteItem(PaletteItemData pid)
        {
            foreach (PaletteItemData p in Data)
            {
                if (p.ItemId == pid.ItemId)
                {
                    Data[Data.IndexOf(p)] = pid;

                    // update thumb
                    Thumb th = Thumbs[Data.IndexOf(p)];
                    Canvas.SetLeft(th, p.Position.X - (th.Width / 2));
                    Canvas.SetTop(th, p.Position.Y - (th.Height / 2));
                    th.ToolTip = p.Content;
                    break;
                }
            }
        }
        private void NewPaletteItemEventHandler(object sender, RoutedEventArgs e)
        {
            PaletteItemData pid = ((PaletteControl)e.OriginalSource).NewestItem;

            string message = String.Format("PI|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|",
                                           pid.Author,
                                           pid.CapabilityIndex,
                                           pid.Content,
                                           pid.ItemId,
                                           pid.Position.X,
                                           pid.Position.Y,
                                           pid.Quadrant,
                                           pid.Score);

            sessionData.PaletteItemData.Add(pid);

            network.SendMessage(message);
        }
        private void AddPaletteItem(string author, string capid, string content, string id, string px, string py, string quadrant, string score)
        {
            PaletteItemData pid = new PaletteItemData();

            pid.Author          = author;
            pid.CapabilityIndex = int.Parse(capid);
            pid.Content         = content;
            pid.ItemId          = id;
            pid.Position        = new Point(System.Convert.ToDouble(px), System.Convert.ToDouble(py));
            pid.Quadrant        = quadrant;
            pid.Score           = System.Convert.ToDouble(score);

            sessionData.PaletteItemData.Add(pid);

            string name;

            if (player.IsHost)
            {
                name = hostGameControl.hostPaletteControl.GetSelectedPlayerName();
                //if(name == pid.Author)
                //{
                this.Dispatcher.Invoke(() =>
                {
                    //hostGameControl.hostPaletteControl.paletteControl.AddItemFromServer(pid);
                    hostGameControl.AddPlayerNameToAssessmentControl(pid.Author);
                });
                //}
                if (name == pid.Author)
                {
                    this.Dispatcher.Invoke(() =>
                    {
                        hostGameControl.hostPaletteControl.paletteControl.AddItemFromServer(pid);
                    });
                }
            }
            else
            {
                this.Dispatcher.Invoke(() =>
                {
                    playerGameControl.playerPaletteControl.playerPalette.AddItemFromServer(pid);
                });
            }
        }
        private void UpdateScore(PaletteItemData pd)
        {
            Thumb th = Thumbs[Data.IndexOf(pd)];

            if (pd.Quadrant == quadrants[0].Name)
            {
                pd.Score = Canvas.GetLeft(th);
            }
            else if (pd.Quadrant == quadrants[1].Name)
            {
                pd.Score = Canvas.GetTop(th);
            }
            else if (pd.Quadrant == quadrants[2].Name)
            {
                pd.Score = Canvas.GetRight(th);
            }
            else if (pd.Quadrant == quadrants[3].Name)
            {
                pd.Score = Canvas.GetBottom(th);
            }
        }
        private void PaletteItemContentUpdateEventHandler(object sender, RoutedEventArgs e)
        {
            PaletteItemData pid = (e.OriginalSource as PaletteControl).NewestItem;

            // update data
            sessionData.PaletteItemData[sessionData.PaletteItemData.IndexOf(pid)].Content = pid.Content;

            string msg;

            if (player.IsHost)
            {
                // if host, send to selected player
                msg = String.Format("IU|1|{0}|{1}|{2}|", pid.Author, pid.ItemId, pid.Content);
                network.SendMessage(msg);
            }
            else
            {
                // if player, send to host - the 1 indicates this is a content update
                msg = String.Format("IU|1|{0}|{1}|{2}|", pid.Author, pid.ItemId, pid.Content);
                network.SendMessage(msg);
            }
        }
        private void PaletteItemDragCompletedEventHandler(object sender, RoutedEventArgs e)
        {
            PaletteItemData pid = (e.OriginalSource as PaletteControl).NewestItem;

            // update data
            sessionData.PaletteItemData[sessionData.PaletteItemData.IndexOf(pid)].Score    = pid.Score;
            sessionData.PaletteItemData[sessionData.PaletteItemData.IndexOf(pid)].Position = pid.Position;

            string msg;

            if (player.IsHost)
            {
                // if host, send to selected player
                msg = String.Format("IU|0|{0}|{1}|{2}|{3}|{4}|", pid.Author, pid.ItemId, pid.Position.X, pid.Position.Y, pid.Score);
                network.SendMessage(msg);
            }
            else
            {
                // if player, send to host - the 0 indicates this is a position update
                msg = String.Format("IU|0|{0}|{1}|{2}|{3}|{4}|", pid.Author, pid.ItemId, pid.Position.X, pid.Position.Y, pid.Score);
                network.SendMessage(msg);
            }
        }
        private void Thumb_MouseDown(object sender, MouseButtonEventArgs e)
        {
            PaletteItemData _data = new PaletteItemData();

            PaletteContentWindow pc = null;

            _data = Data[Thumbs.IndexOf((Thumb)sender)];
            pc    = new PaletteContentWindow();
            pc.contentTextBox.Text  = _data.Content;
            pc.quadrantName.Content = _data.Quadrant.ToUpper();
            pc.submitButton.Content = "UPDATE";

            if (IsReadOnly)
            {
                pc.submitButton.Content      = "CLOSE";
                pc.cancelButton.Visibility   = Visibility.Hidden;
                pc.contentTextBox.IsReadOnly = true;
            }

            if (_data.Quadrant == quadrants[0].Name)
            {
                pc.quadrantName.Background = assumptionBrush;
            }
            else if (_data.Quadrant == quadrants[1].Name)
            {
                pc.quadrantName.Background = benefitBrush;
            }
            else if (_data.Quadrant == quadrants[2].Name)
            {
                pc.quadrantName.Background = questionBrush;
            }
            else if (_data.Quadrant == quadrants[3].Name)
            {
                pc.quadrantName.Background = riskBrush;
            }
            else
            {
                pc.quadrantName.Background = Brushes.Black;
            }

            if (pc != null)
            {
                pc.ShowDialog();
                if (pc.DialogResult.HasValue && pc.DialogResult.Value)
                {
                    if (pc.DialogResult == true)
                    {
                        if (!IsReadOnly)
                        {
                            _data.Content = pc.contentTextBox.Text;
                            Thumbs[Data.IndexOf(_data)].ToolTip = _data.Content;
                        }
                        pc.Close();
                    }
                    else
                    {
                    }
                }
            }

            // Raise event to update data record on pplayer and UPDATE SERVER
            NewestItem = Data[Thumbs.IndexOf(sender as Thumb)];

            // RAISE EVENT TO UPDATE DATA RECORD ON PLAYER AND SEND UPDATE MESSAGE TO HOST WITH NEW POSITION AND SCORE
            RaiseEvent(new RoutedEventArgs(PaletteControl.PaletteItemContentUpdateEvent));
        }
        public void AddItem(Polygon poly, MouseButtonEventArgs e)
        {
            if (!IsReadOnly)
            {
                PaletteItemData dt = new PaletteItemData();

                Thumb tmbDragThumb = new Thumb();
                tmbDragThumb.Width  = 15;
                tmbDragThumb.Height = 15;

                tmbDragThumb.DragDelta        += new DragDeltaEventHandler(Thumb_DragDelta);
                tmbDragThumb.DragCompleted    += new DragCompletedEventHandler(Thumb_DragCompleted);
                tmbDragThumb.MouseDoubleClick += new MouseButtonEventHandler(Thumb_MouseDown);

                ControlTemplate template = new ControlTemplate();
                var             fec      = new FrameworkElementFactory(typeof(Ellipse));
                fec.SetValue(Ellipse.FillProperty, Brushes.White);

                switch (poly.Name)
                {
                case "assumptionsPolygon":
                    dt.Quadrant = quadrants[0].Name;
                    fec.SetValue(Ellipse.StrokeProperty, assumptionBrush);
                    fec.SetValue(Ellipse.FillProperty, assumptionBrush);
                    break;

                case "benefitsPolygon":
                    dt.Quadrant = quadrants[1].Name;
                    fec.SetValue(Ellipse.StrokeProperty, benefitBrush);
                    fec.SetValue(Ellipse.FillProperty, benefitBrush);
                    break;

                case "questionsPolygon":
                    dt.Quadrant = quadrants[2].Name;
                    fec.SetValue(Ellipse.StrokeProperty, questionBrush);
                    fec.SetValue(Ellipse.FillProperty, questionBrush);
                    break;

                case "risksPolygon":
                    dt.Quadrant = quadrants[3].Name;
                    fec.SetValue(Ellipse.StrokeProperty, riskBrush);
                    fec.SetValue(Ellipse.FillProperty, riskBrush);
                    break;

                default:
                    break;
                }

                tmbDragThumb.Tag      = dt.Quadrant;
                template.VisualTree   = fec;
                tmbDragThumb.Template = template;

                Canvas.SetLeft(tmbDragThumb, e.GetPosition(mainCanvas).X - (tmbDragThumb.Width / 2));
                Canvas.SetTop(tmbDragThumb, e.GetPosition(mainCanvas).Y - (tmbDragThumb.Width / 2));

                dt.Position = e.GetPosition(mainCanvas);

                // get content
                PaletteContentWindow pc = new PaletteContentWindow();
                pc.quadrantName.Content = dt.Quadrant.ToUpper();
                //pc.Left = dt.WindowLeft;
                //pc.Top = dt.WindowTop;
                if (dt.Quadrant == quadrants[0].Name)
                {
                    pc.quadrantName.Background = assumptionBrush;
                }
                else if (dt.Quadrant == quadrants[1].Name)
                {
                    pc.quadrantName.Background = benefitBrush;
                }
                else if (dt.Quadrant == quadrants[2].Name)
                {
                    pc.quadrantName.Background = questionBrush;
                }
                else if (dt.Quadrant == quadrants[3].Name)
                {
                    pc.quadrantName.Background = riskBrush;
                }
                else
                {
                    pc.quadrantName.Background = Brushes.Black;
                }
                pc.ShowDialog();
                if (pc.DialogResult.HasValue && pc.DialogResult.Value)
                {
                    if (pc.DialogResult == true)
                    {
                        dt.Author            = this.PlayerName;
                        dt.CapabilityIndex   = this.CapabilityIndex;
                        dt.Content           = pc.contentTextBox.Text;
                        dt.ItemId            = GetRandomId(8);
                        tmbDragThumb.ToolTip = dt.Content;
                        mainCanvas.Children.Add(tmbDragThumb);

                        // ADD TO DATA LISTS
                        Data.Add(dt);
                        Thumbs.Add(tmbDragThumb);

                        pc.Close();
                    }
                    else
                    {
                        dt = null;
                    }
                }
                UpdateScore(dt);

                // raise event on MainWindow to send info to host
                NewestItem = new PaletteItemData();
                NewestItem = dt;
                RaiseEvent(new RoutedEventArgs(PaletteControl.NewPaletteItemEvent));


                Console.WriteLine("");
            }
        }