// Retorna o Nodo, dado um Ponteiro para Nodo // Tipo (0= Pessoa; 1= Artigo; 2= Livro; 3= Periódico; 4= Capítulo; 5= Conferência; 6= Instituição) public static TInfoNodo GetNodoFromLists(TPNodo Nodo) { switch (Nodo.Tipo) { case 0: return Program.mPessoas[(int)Nodo.Índice]; case 1: return Program.mArtigos[(int)Nodo.Índice]; case 2: return Program.mLivros[(int)Nodo.Índice]; case 3: return Program.mPeriódicos[(int)Nodo.Índice]; case 4: return Program.mCapítulos[(int)Nodo.Índice]; case 5: return Program.mConferências[(int)Nodo.Índice]; default: return null; } }
public Vector2 Size; // Tamanho (em worldSize) #endregion Fields #region Constructors // Inicializador de um maxNodo, automaticamente colocando todos os nodos ligados public TDrawMaxNodo(TPNodo Nodo, Vector2 Pos, TInfoNodo nodoAnterior) { MainNodo = Program.GetNodoFromLists(Nodo); Ligações = new List<int>(); Nodos = new List<TDrawNodo>(); Lines = new List<int>(); Loops = 0; Size = new Vector2(0, 0); this.Pos = Pos; Drawable = true; this.nodoAnterior = nodoAnterior; }
// Carrega as informações de um nodo na aba da direita public static void CarregaInformações(TPNodo Nodo) { if (Nodo != null) { TInfoNodo iNodo = Program.GetNodoFromLists(Nodo); switch (Nodo.Tipo) { // Pessoa case 0: { Renderer.rInfoInfos.Clear(); Renderer.rInfoInfos.Add("Pessoa", true); Renderer.rInfoLista.Visible = true; Renderer.rInfoLista.Items.Clear(); Renderer.rInfoOrgOpenPanel.Visible = true; Renderer.rInfoTipoLista.Visible = true; Renderer.rInfoTipoLista.Text = "Artigos: "; TFPessoa Information = new TFPessoa(); bool Go = true; try { Information = Program.fPessoas.GetPessoa(iNodo.Data); } catch { Go = false; } if (Go) { Renderer.rInfoInfos.Add("Nome: " + Information.NomeCompleto, true); Renderer.rInfoInfos.Add("País: " + Information.País, true); Renderer.rInfoInfos.Add("Resumo: " + Information.TextoResumo, true); } else { Renderer.rInfoInfos.Add("Nome: " + iNodo.Nome, true); Renderer.rInfoInfos.Add(" Informações adicionais não disponíveis!", true); } Renderer.ArtigosSorts = new List<TFArtigo>(); for (int i = 0; i < iNodo.Ligações.Count; i++) if (iNodo.Ligações[i].Tipo == 1) { Renderer.ArtigosSorts.Add(Program.fArtigos.GetArtigo(Program.GetNodoFromLists(iNodo.Ligações[i]).Data)); Renderer.ArtigosSortsI.Add(Program.GetNodoFromLists(iNodo.Ligações[i])); } Renderer.OrganizeLeftOrgPanel(3); break; } // Artigo case 1: { Renderer.rInfoInfos.Clear(); Renderer.rInfoInfos.Add("Artigo", true); Renderer.rInfoLista.Visible = true; Renderer.rInfoLista.Items.Clear(); Renderer.rInfoOrgOpenPanel.Visible = false; Renderer.rInfoTipoLista.Visible = true; Renderer.rInfoTipoLista.Text = "Pesquisadores: "; TFArtigo Information = new TFArtigo(); bool Go = true; try { Information = Program.fArtigos.GetArtigo(iNodo.Data); } catch { Go = false; } if (Go) { Renderer.rInfoInfos.Add("Título: " + Information.Título, true); if (Information.ISSN == "i") { Renderer.rInfoInfos.Add("ISSN: N/A", true); Renderer.rInfoInfos.Add("Conferência: " + Information.PeriodicoOuConferencia, true); } else { Renderer.rInfoInfos.Add("ISSN: " + Information.ISSN, true); Renderer.rInfoInfos.Add("Periódico: " + Information.PeriodicoOuConferencia, true); } Renderer.rInfoInfos.Add("Ano Publicação: " + Information.AnoPublicação, true); Renderer.rInfoInfos.Add("Idioma: " + Information.Idioma, true); Renderer.rInfoInfos.Add("Divulgação: " + Information.MeioDivulgação, true); Renderer.rInfoInfos.Add("Natureza: " + Information.Natureza, true); string pc = ""; foreach (string npc in Information.PalavrasChave) if (pc == "") pc += npc; else pc += ", " + npc; Renderer.rInfoInfos.Add("Palavras-chave: " + pc, true); } else { Renderer.rInfoInfos.Add("Título: " + iNodo.Nome, true); Renderer.rInfoInfos.Add(" Informações adicionais não disponíveis!", true); } // listagem alfabética dos pesquisadores List<string> PesquisadoresAlfa = new List<string>(); for (int i = 0; i < iNodo.Ligações.Count; i++) if (iNodo.Ligações[i].Tipo == 0) PesquisadoresAlfa.Add(Program.GetNodoFromLists(iNodo.Ligações[i]).Nome); PesquisadoresAlfa.Sort(); for (int i = 0; i < PesquisadoresAlfa.Count; i++) Renderer.rInfoLista.Add(PesquisadoresAlfa[i]); break; } // Livro case 2: { Renderer.rInfoInfos.Clear(); Renderer.rInfoInfos.Add("Livro", true); Renderer.rInfoLista.Visible = true; Renderer.rInfoLista.Items.Clear(); Renderer.rInfoOrgOpenPanel.Visible = false; Renderer.rInfoTipoLista.Visible = true; Renderer.rInfoTipoLista.Text = "Ligações: "; TFLivro Information = new TFLivro(); bool Go = true; try { Information = Program.fLivros.GetLivro(iNodo.Data); } catch { Go = false; } if (Go) { Renderer.rInfoInfos.Add("Título: " + Information.Título, true); Renderer.rInfoInfos.Add("Ano Publicação: " + Information.AnoPublicação, true); Renderer.rInfoInfos.Add("ISBN: " + Information.ISBN, true); Renderer.rInfoInfos.Add("Idioma: " + Information.Idioma, true); Renderer.rInfoInfos.Add("Divulgação: " + Information.MeioDivulgação, true); string pc = ""; foreach (string npc in Information.PalavrasChave) if (pc == "") pc += npc; else pc += ", " + npc; Renderer.rInfoInfos.Add("Palavras-chave: " + pc, true); } else { Renderer.rInfoInfos.Add("Título: " + iNodo.Nome, true); Renderer.rInfoInfos.Add(" Informações adicionais não disponíveis!", true); } for (int i = 0; i < iNodo.Ligações.Count; i++) Renderer.rInfoLista.Add(Program.GetNodoFromLists(iNodo.Ligações[i]).Nome); break; } // Periódico case 3: { Renderer.rInfoInfos.Clear(); Renderer.rInfoInfos.Add("Periódico", true); Renderer.rInfoLista.Visible = true; Renderer.rInfoLista.Items.Clear(); Renderer.rInfoOrgOpenPanel.Visible = false; Renderer.rInfoTipoLista.Visible = true; Renderer.rInfoTipoLista.Text = "Ligações: "; TFPeriódico Information = new TFPeriódico(); bool Go = true; try { Information = Program.fPeridódicos.GetPeriódico(iNodo.Data); } catch { Go = false; } if (Go) { Renderer.rInfoInfos.Add("Nome: " + Information.Nome, true); Renderer.rInfoInfos.Add("ISSN: " + Information.ISSN, true); Renderer.rInfoInfos.Add("Qualis: " + Information.Qualis, true); } else { Renderer.rInfoInfos.Add("Nome: " + iNodo.Nome, true); Renderer.rInfoInfos.Add(" Informações adicionais não disponíveis!", true); } for (int i = 0; i < iNodo.Ligações.Count; i++) Renderer.rInfoLista.Add(Program.GetNodoFromLists(iNodo.Ligações[i]).Nome); break; } // Capítulo case 4: { Renderer.rInfoInfos.Clear(); Renderer.rInfoInfos.Add("Capítulo de Livro", true); Renderer.rInfoLista.Visible = true; Renderer.rInfoLista.Items.Clear(); Renderer.rInfoOrgOpenPanel.Visible = false; Renderer.rInfoTipoLista.Visible = true; Renderer.rInfoTipoLista.Text = "Coautores: "; TFCap Information = new TFCap(); bool Go = true; try { Information = Program.fCapítulos.GetCapítulo(iNodo.Data); } catch { Go = false; } if (Go) { Renderer.rInfoInfos.Add("Título: " + Information.Título, true); Renderer.rInfoInfos.Add("Ano Publicação: " + Information.AnoPublicação, true); Renderer.rInfoInfos.Add("ISBN: " + Information.ISBN, true); Renderer.rInfoInfos.Add("Idioma: " + Information.Idioma, true); Renderer.rInfoInfos.Add("Divulgação: " + Information.MeioDivulgação, true); Renderer.rInfoInfos.Add("Livro: " + Information.Livro, true); string pc = ""; if (Information.PalavrasChave != null) foreach (string npc in Information.PalavrasChave) if (pc == "") pc += npc; else pc += ", " + npc; Renderer.rInfoInfos.Add("Palavras-chave: " + pc, true); } else { Renderer.rInfoInfos.Add("Título: " + iNodo.Nome, true); Renderer.rInfoInfos.Add(" Informações adicionais não disponíveis!", true); } for (int i = 0; i < iNodo.Ligações.Count; i++) Renderer.rInfoLista.Add(Program.GetNodoFromLists(iNodo.Ligações[i]).Nome); break; } // Conferência case 5: { Renderer.rInfoInfos.Clear(); Renderer.rInfoInfos.Add("Conferência", true); Renderer.rInfoLista.Visible = true; Renderer.rInfoLista.Items.Clear(); Renderer.rInfoOrgOpenPanel.Visible = false; Renderer.rInfoTipoLista.Visible = true; Renderer.rInfoTipoLista.Text = "Ligações: "; TFConferência Information = new TFConferência(); bool Go = true; try { Information = Program.fConferências.GetConferência(iNodo.Data); } catch { Go = false; } if (Go) { Renderer.rInfoInfos.Add("Nome: " + Information.Nome, true); Renderer.rInfoInfos.Add("Caráter: " + Information.Caráter, true); Renderer.rInfoInfos.Add("Qualis: " + Information.Qualis, true); } else { Renderer.rInfoInfos.Add("Nome: " + iNodo.Nome, true); Renderer.rInfoInfos.Add(" Informações adicionais não disponíveis!", true); } for (int i = 0; i < iNodo.Ligações.Count; i++) Renderer.rInfoLista.Add(Program.GetNodoFromLists(iNodo.Ligações[i]).Nome); break; } default: { break; } } } }
// Seleciona um nodo / maxNodo, dependendo do ViewMode public static void SelecionaNodoComVoltar(TPNodo Nodo, int Atual) { TInfoNodo nodoAtual = null; //TInfoNodo nodoAnterior = null; if (Atual > -1) { if (MaxNodos[Atual].MainNodo.Nodo == Nodo) return; MaxNodos[Atual].Esconder(); nodoAtual = MaxNodos[Atual].MainNodo; if (nodoAtual != null) { if ((Program.GetNodoFromLists(Nodo) == MaxNodos[Atual].nodoAnterior) && (Atual > 0)) { MaxNodos[Atual].Esconder(); MaxNodos[Atual].Deletar(); MaxNodos.RemoveAt(Atual); MouseNodeHandler.MaxNodoSelecionado--; MaxNodos[Atual - 1].Ressurgir(); AppGraphics.Camera.LookAt(new Vector2(0, 0), MaxNodos[Atual - 1].Size.X); MouseNodeHandler.SelectNodo(AppGraphics.MaxNodos[MouseNodeHandler.MaxNodoSelecionado].MainNodo.DrawNodo); CarregaInformações(MaxNodos[MouseNodeHandler.MaxNodoSelecionado].MainNodo.Nodo); return; } else { MaxNodos[Atual].Esconder(); // Apaga todo os depois (apaga a linha seguinte de nodos) for (int i = Atual + 1; i < MaxNodos.Count; i++) MaxNodos.RemoveAt(Atual + 1); } } else { MaxNodos[Atual].Esconder(); // Apaga todo os depois (apaga a linha seguinte de nodos) for (int i = Atual + 1; i < MaxNodos.Count; i++) MaxNodos.RemoveAt(Atual + 1); } } else { ResetView(); } CarregaInformações(Nodo); // Cria o novo na posição 0,0 AppGraphics.MaxNodos.Add( new TDrawMaxNodo(Nodo, new Vector2(0, 0), nodoAtual)); // Inicializa AppGraphics.MaxNodos[AppGraphics.MaxNodos.Count - 1].Inicializa(); // Olha AppGraphics.Camera.LookAt(new Vector2(0, 0), AppGraphics.MaxNodos[AppGraphics.MaxNodos.Count - 1].Size.X); MouseNodeHandler.MaxNodoSelecionado = AppGraphics.MaxNodos.Count - 1; MouseNodeHandler.SelectNodo(AppGraphics.MaxNodos[MouseNodeHandler.MaxNodoSelecionado].MainNodo.DrawNodo); }