Exemplo n.º 1
0
        private void UpdateTable()
        {
            if (sortByCol == 2)
            {
                resList.Sort((pair1, pair2) => { return(-pair1.Value.Popularity.CompareTo(pair2.Value.Popularity)); });                // Pop desc
            }
            if (sortByCol == 3)
            {
                resList.Sort((pair1, pair2) => { return(-pair1.Value.PosVal.CompareTo(pair2.Value.PosVal)); });                // Pop desc
            }
            if (sortByCol == 4)
            {
                resList.Sort((pair1, pair2) => { return(-pair1.Value.NegVal.CompareTo(pair2.Value.NegVal)); });                // Pop desc
            }
            if (sortByCol == 5)
            {
                resList.Sort((pair1, pair2) => { return(-pair1.Value.Ambiguity.CompareTo(pair2.Value.Ambiguity)); });                // Pop desc
            }
            tableLayoutPanel1.Controls.Clear();
            tableLayoutPanel1.RowCount = 0;

            tableLayoutPanel1.Controls.Add(new Label()
            {
                Text = "Nombre", Width = 200
            }, 1, 0);

            Button bPop = new Button()
            {
                Text = "Pop.", Width = 200
            };

            bPop.Click += (sender, args) =>
            {
                sortByCol = 2;
                UpdateTable();
                UpdateChart();
            };
            tableLayoutPanel1.Controls.Add(bPop, 2, 0);

            Button bPos = new Button()
            {
                Text = "+", Width = 200
            };

            bPos.Click += (sender, args) =>
            {
                sortByCol = 3;
                UpdateTable();
                UpdateChart();
            };
            tableLayoutPanel1.Controls.Add(bPos, 3, 0);

            Button bNeg = new Button()
            {
                Text = "-", Width = 200
            };

            bNeg.Click += (sender, args) =>
            {
                sortByCol = 4;
                UpdateTable();
                UpdateChart();
            };
            tableLayoutPanel1.Controls.Add(bNeg, 4, 0);

            Button bAmb = new Button()
            {
                Text = "Ambig.", Width = 200
            };

            bAmb.Click += (sender, args) =>
            {
                sortByCol = 5;
                UpdateTable();
                UpdateChart();
            };
            tableLayoutPanel1.Controls.Add(bAmb, 5, 0);

            int row = 1;

            foreach (var item in resList)
            {
                PictureBox bDominio = new PictureBox();
                bDominio.Image  = Image.FromFile("Dom" + item.Key.Domain + ".png");
                bDominio.Size   = new Size(20, 20);
                bDominio.Anchor = AnchorStyles.None;
                tableLayoutPanel1.Controls.Add(bDominio, 0, row);



                Button bName = new Button()
                {
                    Text = item.Key.Alias[1], Width = 200
                };
                bName.Click += (sender, args) => {
                    buildingCloud = true;
                    ActiveTopic   = item.Key;
                    cloud.Enabled = false;
                    cloudWorker.Dispose();
                    cloudWorker         = new BackgroundWorker();
                    cloudWorker.DoWork += (e, a) =>
                    {
                        try
                        {
                            List <Gma.CodeCloud.Controls.TextAnalyses.Processing.IWord> iwords = new List <Gma.CodeCloud.Controls.TextAnalyses.Processing.IWord>();

                            int cantCloudWords = 0;

                            // Tomo las palabras relevantes de un tópico porque al armar la tabla sólo había pedido un análisis simple.
                            List <KeyValuePair <string, double> > relevantList = core.GetTopicTermIntersectionAnalysis(item.Key, "", true).relevantList;
                            foreach (var i in relevantList)
                            {
                                if (cantCloudWords > 30)
                                {
                                    break;
                                }

                                // Si la palabra es el topic de la nube, la saltea.
                                bool cont = false;
                                foreach (String al in item.Key.Alias)
                                {
                                    if (al.Contains(i.Key))
                                    {
                                        cont = true;
                                    }
                                }
                                if (cont)
                                {
                                    continue;
                                }

                                AnalysisResults intersection = core.GetTopicTermIntersectionAnalysis(item.Key, i.Key, false);
                                int             neg;
                                if (intersection == null)
                                {
                                    neg = 0;
                                }
                                else
                                {
                                    neg = intersection.NegVal;
                                }
                                int pos;
                                if (intersection == null)
                                {
                                    pos = 0;
                                }
                                else
                                {
                                    pos = intersection.PosVal;
                                }

                                double rr = (double)(neg - pos) / (neg + pos + 1); int r = (int)(rr * 100) + 127;
                                double gg = (double)(pos - neg) / (neg + pos + 1); int g = (int)(gg * 100) + 127;
                                int    b;
                                if (neg == 0 && pos == 0)
                                {
                                    b = 150;
                                }
                                else
                                {
                                    b = 50;
                                }

                                Color c = Color.FromArgb(255, r, g, b);

                                iwords.Add(new Gma.CodeCloud.Controls.TextAnalyses.Processing.Word(i.Key, (int)i.Value, c));
                                cantCloudWords++;
                            }
                            if (iwords.Count > 0)
                            {
                                this.cloud.WeightedWords = iwords;
                            }
                        }
                        catch (Exception ee)
                        {
                            Console.Out.WriteLine("No se pudo crear nube de palabras. Probablemente no sean suficientes.");
                        }

                        pictureBox1.Image = core.GetTopicImage(2, item.Key);
                    };
                    cloudWorker.RunWorkerCompleted += (e, a) => {
                        cloud.Update();
                        cloud.Enabled = true;
                        buildingCloud = false;
                    };
                    cloudWorker.RunWorkerAsync();
                };
                tableLayoutPanel1.Controls.Add(bName, 1, row);

                Button bTopicPop = new Button()
                {
                    Text = "" + item.Value.Popularity
                };
                bTopicPop.Click += (a, e) =>
                {
                    IEnumerable <DbTweet> tweetSet = core.GetTopicTermIntersectionTweets(item.Key, "");   // Funciona intersección con nada

                    FormTweets tweetsWindow = new FormTweets(core, tweetSet, item.Key, FormTweets.SelectionFav, null);
                    tweetsWindow.Show();
                };
                tableLayoutPanel1.Controls.Add(bTopicPop, 2, row);

                Button bTopicPos = new Button()
                {
                    Text = "" + item.Value.PosVal
                };
                bTopicPos.Click += (a, e) =>
                {
                    IEnumerable <DbTweet> tweetSet = core.GetTopicTermIntersectionTweets(item.Key, "");

                    FormTweets tweetsWindow = new FormTweets(core, tweetSet, item.Key, FormTweets.SelectionPos, null);
                    tweetsWindow.Show();
                };
                tableLayoutPanel1.Controls.Add(bTopicPos, 3, row);

                Button bTopicNeg = new Button()
                {
                    Text = "" + item.Value.NegVal
                };
                bTopicNeg.Click += (a, e) =>
                {
                    IEnumerable <DbTweet> tweetSet = core.GetTopicTermIntersectionTweets(item.Key, "");

                    FormTweets tweetsWindow = new FormTweets(core, tweetSet, item.Key, FormTweets.SelectionNeg, null);
                    tweetsWindow.Show();
                };
                tableLayoutPanel1.Controls.Add(bTopicNeg, 4, row);

                Button bTopicAmb = new Button()
                {
                    Text = "" + (int)(item.Value.Ambiguity * 100) + "%"
                };
                bTopicAmb.Click += (a, e) =>
                {
                    IEnumerable <DbTweet> tweetSet = core.GetTopicTermIntersectionTweets(item.Key, "");

                    FormTweets tweetsWindow = new FormTweets(core, tweetSet, item.Key, FormTweets.SelectionAmb, null);
                    tweetsWindow.Show();
                };
                tableLayoutPanel1.Controls.Add(bTopicAmb, 5, row);

                row++;
            }

            tableLayoutPanel1.AutoSize = true;
            tableLayoutPanel1.Update();

            //graphTime++;
        }