br.univali.ps.ui.telas.TelaPrincipal.java Source code

Java tutorial

Introduction

Here is the source code for br.univali.ps.ui.telas.TelaPrincipal.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.univali.ps.ui.telas;

import br.univali.ps.dominio.PortugolDocumento;
import br.univali.ps.fuzzy.portugolFuzzyCorretor.core.PortugolFuzzyCorretor;
import br.univali.ps.nucleo.Configuracoes;
import br.univali.ps.nucleo.PortugolStudio;
import br.univali.ps.plugins.base.GerenciadorPlugins;
import br.univali.ps.ui.Lancador;
import br.univali.ps.ui.abas.Aba;
import br.univali.ps.ui.abas.AbaCodigoFonte;
import br.univali.ps.ui.abas.AbaInicial;
import br.univali.ps.ui.paineis.PainelTabuladoPrincipal;
import br.univali.ps.ui.swing.ColorController;
import br.univali.ps.ui.utils.FileHandle;
import java.awt.Dimension;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.json.JSONObject;

/**
 *
 * @author lite
 */
public class TelaPrincipal extends javax.swing.JPanel {
    private boolean abrindo = true;
    private List<File> arquivosIniciais;
    int pX, pY;

    private static final Logger LOGGER = Logger.getLogger(TelaPrincipal.class.getName());

    /**
    /**
     * Creates new form TelaInicial
     */
    public TelaPrincipal() {
        initComponents();
        criaAbas();
        configurarCores();
        instalarObservadores();
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent me) {
                // Get x,y and store them
                pX = me.getX();
                pY = me.getY();

            }

            public void mouseDragged(MouseEvent me) {

                Lancador.getJFrame().setLocation(Lancador.getJFrame().getLocation().x + me.getX() - pX,
                        Lancador.getJFrame().getLocation().y + me.getY() - pY);
            }
        });

        addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent me) {

                Lancador.getJFrame().setLocation(Lancador.getJFrame().getLocation().x + me.getX() - pX,
                        Lancador.getJFrame().getLocation().y + me.getY() - pY);
            }
        });
    }

    private void criaAbas() {
        painelTabuladoPrincipal.setAbaInicial(new AbaInicial(this));
    }

    private void configurarCores() {
        //        mainPanel.setBackground(ColorController.COR_DESTAQUE);
        setBackground(ColorController.FUNDO_ESCURO);
        painelTabuladoPrincipal.setBackground(ColorController.COR_PRINCIPAL);
    }

    private void instalarObservadores() {
        instalarObservadorJanela();

    }

    private void instalarObservadorJanela() {
        JFrame frame = Lancador.getJFrame();
        if (frame == null)
            return;

        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                fecharAplicativo();
            }

            @Override
            public void windowOpened(WindowEvent e) {
                Configuracoes configuracoes = Configuracoes.getInstancia();
                if (configuracoes.isExibirDicasInterface()) {
                    SwingUtilities.invokeLater(() -> {
                        PortugolStudio.getInstancia().getTelaDicas().setVisible(true);
                    });
                }

                LOGGER.log(Level.INFO, "Janela principal aberta!");
            }

        });

        Lancador.getJFrame().addComponentListener(new ComponentAdapter() {
            @Override
            public void componentShown(ComponentEvent e) {
                if (abrindo) {
                    abrindo = false;

                    // Por enquanto o Andr pediu para desativar esta verificao, ela s estar disponvel 
                    // no final do ano
                    //verificarAtualizacaoCritica();
                    if (Configuracoes.getInstancia().isExibirTutorialUso()) {
                        //TODO: criar e executar tutorial de uso antes de iniciar o Portugol
                        dispararProcessosAbertura();
                    } else {
                        dispararProcessosAbertura();
                    }
                }
            }
        });
    }

    private void dispararProcessosAbertura() {
        abrirArquivosCodigoFonte(arquivosIniciais);

        //        exibirErrosPluginsBibliotecas();
        //        Thread thread = new Thread(){
        //            public void run(){
        //                JSONObject ultimaVersao = procurarAtualizacoes();
        //                if(ultimaVersao!=null)
        //                {
        //                    String versao = ultimaVersao.getString("tag_name");
        //                    String texto = ultimaVersao.getString("body");
        //                    if(!versao.equals("v"+PortugolStudio.getInstancia().getVersao()))
        //                    {
        //                        exibirTelaAtualizacoes(texto, versao);
        //                    }
        //                }
        //            }
        //        };
        //
        //        thread.start();

        PortugolFuzzyCorretor.getInstance().setDados();
        //baixarNovasAtualizacoes();
    }

    private void exibirErrosPluginsBibliotecas() {
        boolean errosPlugins = GerenciadorPlugins.getInstance().getResultadoCarregamento().contemErros();
        boolean errosBibliotecas = false;

        if (errosPlugins || errosBibliotecas) {
            TelaErrosPluginsBibliotecas telaErrosPluginsBibliotecas = PortugolStudio.getInstancia()
                    .getTelaErrosPluginsBibliotecas();
            telaErrosPluginsBibliotecas.setVisible(true);
        }
    }

    private JSONObject procurarAtualizacoes() {
        String requestURL = Configuracoes.getInstancia().getUriAtualizacao();
        try {
            InputStream is = new URL(requestURL).openStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
            String jsonText = org.apache.commons.io.IOUtils.toString(rd);
            JSONObject json = new JSONObject(jsonText);
            is.close();
            return json;
        } catch (MalformedURLException ex) {

        } catch (IOException ex) {

        }

        return null;
    }

    private void exibirTelaAtualizacoes(String body, String versao) {
        SwingUtilities.invokeLater(() -> {
            TelaCustomBorder main = new TelaCustomBorder("Atualizao Encontrada");
            TelaAtualizacoes ta = new TelaAtualizacoes(body, versao);

            ta.setAcaoFechar(main.getAcaoSair());
            main.setMinimumSize(new Dimension(280, 450));
            main.setPanel(ta, false);
            main.setLocationRelativeTo(null);
            main.setVisible(true);
            main.pack();
        });

    }

    public void criarNovoCodigoFonte() {
        final AbaCodigoFonte abaCodigoFonte = AbaCodigoFonte.novaAba();
        painelTabuladoPrincipal.add(abaCodigoFonte);
        abaCodigoFonte.carregarAlgoritmoPadrao();
        revalidate();
    }

    public void abrirArquivosCodigoFonte(final List<File> arquivos) {
        if (arquivos != null && !arquivos.isEmpty()) {
            Lancador.getInstance().focarJanela();

            SwingUtilities.invokeLater(() -> {
                TelaPrincipal.this.setEnabled(false);

                for (File arquivo : arquivos) {
                    if (arquivoJaEstaAberto(arquivo)) {
                        AbaCodigoFonte aba = obterAbaArquivo(arquivo);
                        aba.selecionar();
                    } else {
                        try {
                            final String conteudo = FileHandle.open(arquivo);
                            final AbaCodigoFonte abaCodigoFonte = AbaCodigoFonte.novaAba();

                            if (PortugolStudio.getInstancia().isArquivoRecuperado(arquivo)) {
                                abaCodigoFonte.setCodigoFonte(conteudo, null, true);
                            } else {
                                PortugolStudio.getInstancia().salvarComoRecente(arquivo);
                                abaCodigoFonte.setCodigoFonte(conteudo, arquivo, true);
                            }

                            getPainelTabulado().add(abaCodigoFonte);
                        } catch (Exception excecao) {
                            PortugolStudio.getInstancia().getTratadorExcecoes().exibirExcecao(excecao);
                        }
                    }
                }

                TelaPrincipal.this.setEnabled(true);
            });
        }
    }

    public void setArquivosIniciais(List<File> arquivos) {
        this.arquivosIniciais = arquivos;
    }

    private boolean arquivoJaEstaAberto(File arquivo) {
        AbaCodigoFonte aba = obterAbaArquivo(arquivo);

        return aba != null;
    }

    public AbaCodigoFonte obterAbaArquivo(File arquivo) {
        for (Aba aba : getPainelTabulado().getAbas(AbaCodigoFonte.class)) {
            AbaCodigoFonte abaCodigoFonte = (AbaCodigoFonte) aba;
            PortugolDocumento documento = abaCodigoFonte.getPortugolDocumento();
            if (documento.getFile() != null && arquivo.exists()) {
                try {
                    Path caminhoArquivoAba = documento.getFile().toPath();
                    Path caminhoArquivoAbrir = arquivo.toPath();

                    if (Files.isSameFile(caminhoArquivoAba, caminhoArquivoAbrir)) {
                        return abaCodigoFonte;
                    }
                } catch (IOException excecao) {
                    LOGGER.log(Level.SEVERE,
                            String.format("Erro ao verificar se o arquivo '%s' j estava aberto em alguma aba",
                                    arquivo.getAbsolutePath()),
                            excecao);
                }
            }
        }

        return null;
    }

    public boolean fecharAplicativo() {
        painelTabuladoPrincipal.fecharTodasAbas(AbaCodigoFonte.class);
        if (!painelTabuladoPrincipal.temAbaAberta(AbaCodigoFonte.class)) {

            PortugolStudio.getInstancia().finalizar(0);
            return true;
        }

        return false;
    }

    public boolean fecharAplicativoParaReiniciar() {
        painelTabuladoPrincipal.fecharTodasAbas(AbaCodigoFonte.class);
        if (!painelTabuladoPrincipal.temAbaAberta(AbaCodigoFonte.class)) {
            return true;
        }

        return false;
    }

    public PainelTabuladoPrincipal getPainelTabulado() {
        return painelTabuladoPrincipal;
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        painelTabuladoPrincipal = new br.univali.ps.ui.paineis.PainelTabuladoPrincipal();

        setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 0, 0, 0));
        setLayout(new java.awt.BorderLayout());

        painelTabuladoPrincipal.setName("abaInicial"); // NOI18N
        add(painelTabuladoPrincipal, java.awt.BorderLayout.CENTER);
    }// </editor-fold>//GEN-END:initComponents

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private br.univali.ps.ui.paineis.PainelTabuladoPrincipal painelTabuladoPrincipal;
    // End of variables declaration//GEN-END:variables
}