/* Copyright 2012-2017 Jose Robson Mariano Alves This file is part of bgfinancas. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package badernageral.bgfinancas.principal; import badernageral.bgfinancas.biblioteca.ajuda.Ajuda; import badernageral.bgfinancas.biblioteca.sistema.Atualizacao; import badernageral.bgfinancas.biblioteca.utilitario.Animacao; import badernageral.bgfinancas.biblioteca.sistema.Kernel; import badernageral.bgfinancas.biblioteca.sistema.Janela; import badernageral.bgfinancas.biblioteca.sistema.PilhaVoltar; import badernageral.bgfinancas.biblioteca.utilitario.Datas; import badernageral.bgfinancas.idioma.Linguagem; import badernageral.bgfinancas.modelo.Agenda; import badernageral.bgfinancas.modelo.AgendaTipo; import badernageral.bgfinancas.modelo.CartaoCredito; import badernageral.bgfinancas.modelo.Configuracao; import badernageral.bgfinancas.modelo.Conta; import badernageral.bgfinancas.modelo.Despesa; import badernageral.bgfinancas.modelo.DespesaCategoria; import badernageral.bgfinancas.modelo.DespesaItem; import badernageral.bgfinancas.modelo.GrupoItem; import badernageral.bgfinancas.modelo.Receita; import badernageral.bgfinancas.modelo.ReceitaCategoria; import badernageral.bgfinancas.modelo.ReceitaItem; import badernageral.bgfinancas.modelo.Relatorio; import badernageral.bgfinancas.modelo.Transferencia; import badernageral.bgfinancas.modelo.TransferenciaCategoria; import badernageral.bgfinancas.modelo.TransferenciaItem; import badernageral.bgfinancas.modelo.Usuario; import badernageral.bgfinancas.modelo.Utilitario; import badernageral.bgfinancas.modulo.despesa.DespesasAgendadasControlador; import badernageral.bgfinancas.modulo.utilitario.Backup; import java.io.IOException; import java.net.URL; import java.time.LocalDate; import java.time.Period; import static java.time.temporal.ChronoUnit.DAYS; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Menu; import javafx.scene.control.MenuItem; import javafx.scene.control.ProgressIndicator; import javafx.scene.control.Tooltip; import javafx.scene.image.Image; import javafx.scene.layout.BorderPane; import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import javafx.stage.StageStyle; public final class PrincipalControlador implements Initializable { private final Linguagem idioma = Linguagem.getInstance(); private boolean ajuda = false; @FXML private BorderPane layoutGeral; @FXML private StackPane layoutCentro; @FXML private Menu menuGerenciar; @FXML private Menu menuMovimentar; @FXML private Menu menuUtilitarios; @FXML private Menu menuAjuda; @FXML private MenuItem gerenciarContas; @FXML private MenuItem gerenciarAgenda; @FXML private MenuItem gerenciarGrupos; @FXML private MenuItem gerenciarCartoesCredito; @FXML private MenuItem gerenciarDespesasAgendadas; @FXML private MenuItem gerenciarUsuarios; @FXML private MenuItem movimentarDespesa; @FXML private MenuItem movimentarReceita; @FXML private MenuItem movimentarTransferencia; @FXML private MenuItem movimentarGuia; @FXML private MenuItem utilitariosConfiguracoes; @FXML private MenuItem utilitariosRelatorios; @FXML private MenuItem utilitariosExportarBackup; @FXML private MenuItem utilitariosImportarBackup; @FXML private MenuItem ajudaTutorial; @FXML private MenuItem ajudaSobreSistema; @FXML private MenuItem ajudaVerificarAtualizacoes; @FXML private Button botaoHome; @FXML private Button botaoDespesas; @FXML private Button botaoReceitas; @FXML private Button botaoTransferencias; @FXML private Button botaoDespesasAgendadas; @FXML private Button botaoAgenda; @FXML private Button botaoGrupo; @FXML private Button botaoCartaoCredito; @FXML private Button botaoContas; @FXML private Button botaoUsuarios; @FXML private Button botaoRelatorios; @FXML private Button botaoCalculadora; @FXML private Button botaoGuia; @FXML private Button botaoAjuda; @FXML private Button botaoAjudaProximo; @FXML private Button botaoAjudaAnterior; @FXML private ProgressIndicator ajudaProgresso; private void traduzirMenu() { menuGerenciar.setText(idioma.getMensagem("gerenciar")); menuMovimentar.setText(idioma.getMensagem("movimentar")); menuUtilitarios.setText(idioma.getMensagem("utilitarios")); menuAjuda.setText(idioma.getMensagem("ajuda")); gerenciarContas.setText(idioma.getMensagem("contas")); gerenciarAgenda.setText(idioma.getMensagem("lembretes")); gerenciarGrupos.setText(idioma.getMensagem("cotas_despesas")); gerenciarDespesasAgendadas.setText(idioma.getMensagem("despesas_agendadas")); gerenciarCartoesCredito.setText(idioma.getMensagem("cartoes_credito")); gerenciarUsuarios.setText(idioma.getMensagem("usuarios")); movimentarDespesa.setText(idioma.getMensagem("despesas")); movimentarReceita.setText(idioma.getMensagem("receitas")); movimentarTransferencia.setText(idioma.getMensagem("transferencias")); movimentarGuia.setText(idioma.getMensagem("guia")); utilitariosConfiguracoes.setText(idioma.getMensagem("configuracoes")); utilitariosRelatorios.setText(idioma.getMensagem("relatorios")); utilitariosExportarBackup.setText(idioma.getMensagem("exportar_backup")); utilitariosImportarBackup.setText(idioma.getMensagem("importar_backup")); ajudaTutorial.setText(idioma.getMensagem("tutorial")); ajudaSobreSistema.setText(idioma.getMensagem("sobre_sistema")); ajudaVerificarAtualizacoes.setText(idioma.getMensagem("verificar_atualizacoes")); } private void tooltipBotoes() { botaoHome.setTooltip(new Tooltip(idioma.getMensagem("principal"))); botaoDespesas.setTooltip(new Tooltip(idioma.getMensagem("despesas"))); botaoReceitas.setTooltip(new Tooltip(idioma.getMensagem("receitas"))); botaoTransferencias.setTooltip(new Tooltip(idioma.getMensagem("transferencias"))); botaoDespesasAgendadas.setTooltip(new Tooltip(idioma.getMensagem("despesas_agendadas"))); botaoAgenda.setTooltip(new Tooltip(idioma.getMensagem("lembretes"))); botaoGrupo.setTooltip(new Tooltip(idioma.getMensagem("cotas_despesas"))); botaoCartaoCredito.setTooltip(new Tooltip(idioma.getMensagem("cartoes_credito"))); botaoContas.setTooltip(new Tooltip(idioma.getMensagem("contas"))); botaoUsuarios.setTooltip(new Tooltip(idioma.getMensagem("usuarios"))); botaoRelatorios.setTooltip(new Tooltip(idioma.getMensagem("relatorios"))); botaoCalculadora.setTooltip(new Tooltip(idioma.getMensagem("calculadora"))); botaoGuia.setTooltip(new Tooltip(idioma.getMensagem("guia"))); botaoAjuda.setTooltip(new Tooltip(idioma.getMensagem("ajuda"))); botaoAjudaProximo.setTooltip(new Tooltip(idioma.getMensagem("proximo"))); botaoAjudaAnterior.setTooltip(new Tooltip(idioma.getMensagem("anterior"))); } public void acaoGuia() { Janela.abrir(Utilitario.FXML_GUIA, idioma.getMensagem("guia")); } public void acaoAjuda() { if (ajuda) { desativarAjuda(); } else { ativarAjuda(); Kernel.controlador.acaoAjuda(); } } public void acaoAjudaAnterior() { Ajuda.getInstance().apresentarAnterior(); } public void acaoAjudaProximo() { Ajuda.getInstance().apresentarProximo(); } public void desativarAjuda() { ajuda = false; botaoAjuda.getStyleClass().remove("botaoAjudaSair"); botaoAjuda.getStyleClass().add("botaoAjuda"); botaoAjudaProximo.setVisible(false); ajudaProgresso.setVisible(false); botaoAjudaAnterior.setVisible(false); botaoAjuda.setTooltip(new Tooltip(idioma.getMensagem("ajuda"))); Ajuda.getInstance().desativarAjuda(); } private void ativarAjuda() { ajuda = true; botaoAjuda.getStyleClass().remove("botaoAjuda"); botaoAjuda.getStyleClass().add("botaoAjudaSair"); botaoAjudaProximo.setVisible(true); ajudaProgresso.setVisible(true); botaoAjudaAnterior.setVisible(true); botaoAjuda.setTooltip(new Tooltip(idioma.getMensagem("sair"))); } public void acaoSobreSistema() { Janela.abrir(Kernel.RAIZ + "/modulo/ajuda/SobreSistema.fxml", idioma.getMensagem("sobre_sistema")); } public void acaoVerificarAtualizacoes() { Atualizacao task = new Atualizacao(true, ajudaVerificarAtualizacoes); } private void verificarAtualizacoes() { if (DAYS.between(Datas.getLocalDate(Configuracao.getPropriedade("data_atualizacao")), LocalDate.now()) >= 30) { Configuracao.setPropriedade("data_atualizacao", Datas.toSqlData(LocalDate.now())); Atualizacao task = new Atualizacao(false, ajudaVerificarAtualizacoes); } } public void acaoConfiguracao() { Janela.abrir(Configuracao.FXML_FORMULARIO, idioma.getMensagem("configuracoes")); } public void acaoRelatorios() { carregarJanela(Relatorio.FXML); } public void acaoExportarBackup() { new Backup().exportarBackup(); } public void acaoImportarBackup() { new Backup().importarBackup(); } public void acaoHome() { carregarJanela(Kernel.FXML_HOME); } public void acaoCartaoCredito() { carregarJanela(CartaoCredito.FXML); } public void acaoConta() { carregarJanela(Conta.FXML); } public void acaoAgenda() { carregarJanela(Agenda.FXML); } public void acaoAgendaTipo() { carregarJanela(AgendaTipo.FXML); } public void acaoGrupoItem() { carregarJanela(GrupoItem.FXML); } public void acaoDespesa() { carregarJanela(Despesa.FXML); } public void acaoDespesaCadastroMultiplo() { carregarJanela(Despesa.FXML_CADASTRO_MULTIPLO); } public void acaoDespesaItem() { carregarJanela(DespesaItem.FXML); } public void acaoDespesaCategoria() { carregarJanela(DespesaCategoria.FXML); } public void acaoReceita() { carregarJanela(Receita.FXML); } public void acaoReceitaItem() { carregarJanela(ReceitaItem.FXML); } public void acaoReceitaCategoria() { carregarJanela(ReceitaCategoria.FXML); } public void acaoTransferencia() { carregarJanela(Transferencia.FXML); } public void acaoTransferenciaItem() { carregarJanela(TransferenciaItem.FXML); } public void acaoTransferenciaCategoria() { carregarJanela(TransferenciaCategoria.FXML); } public void acaoDespesasAgendadas() { carregarJanela(Despesa.FXML_DESPESAS_AGENDADAS); } public void acaoCartoesCredito() { carregarJanela(CartaoCredito.FXML); } public void acaoDespesasAgendadas(int mes, int ano) { DespesasAgendadasControlador c = carregarJanela(Despesa.FXML_DESPESAS_AGENDADAS); c.setData(mes, ano); } public void acaoUsuario() { carregarJanela(Usuario.FXML); } public void acaoVoltar() { carregarJanela(PilhaVoltar.voltar()); } public void acaoCalculadora() { try { Pane painel = new FXMLLoader().load(getClass().getResourceAsStream(Utilitario.FXML_CALCULADORA)); Scene cena = new Scene(painel); cena.getStylesheets().add(getClass().getResource(Kernel.CSS_PRINCIPAL).toExternalForm()); cena.getStylesheets().add(getClass().getResource(Kernel.CSS_AJUDA).toExternalForm()); cena.getStylesheets().add(getClass().getResource(Kernel.CSS_TOOLTIP).toExternalForm()); Stage palco = new Stage(); palco.setScene(cena); palco.setTitle(idioma.getMensagem("calculadora")); palco.getIcons().add(new Image("/badernageral/bgfinancas/recursos/imagem/outros/calculadora.png")); palco.initStyle(StageStyle.UTILITY); palco.show(); palco.requestFocus(); } catch (IOException ex) { Janela.showException(ex); } } @Override public void initialize(URL url, ResourceBundle rb) { traduzirMenu(); tooltipBotoes(); desativarAjuda(); Kernel.principal = this; Kernel.layoutGeral = this.layoutGeral; Kernel.layoutCentro = this.layoutCentro; carregarJanela(Kernel.FXML_HOME); verificarAtualizacoes(); } private <T> T carregarJanela(String arquivoFXML) { try { desativarAjuda(); PilhaVoltar.adicionar(arquivoFXML); FXMLLoader loader = new FXMLLoader(); loader.setLocation(Janela.class.getResource(arquivoFXML)); Node node = loader.load(Janela.class.getResourceAsStream(arquivoFXML)); Animacao.fadeOutInReplace(layoutCentro, node); Kernel.controlador = loader.getController(); Ajuda.getInstance().setBotaoProgresso(ajudaProgresso); return loader.getController(); } catch (Exception ex) { Janela.showException(ex); return null; } } }