Coverage Report - net.sf.webphotos.gui.Visualizador
 
Classes in this File Line Coverage Branch Coverage Complexity
Visualizador
0%
0/36
0%
0/6
1,6
 
 1  
 /**
 2  
  * Copyright 2008 WebPhotos
 3  
  *
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  *      http://www.apache.org/licenses/LICENSE-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 package net.sf.webphotos.gui;
 17  
 
 18  
 import java.awt.BorderLayout;
 19  
 import java.awt.Container;
 20  
 import java.awt.Dimension;
 21  
 import java.awt.Frame;
 22  
 import java.awt.Graphics;
 23  
 import java.awt.Image;
 24  
 import java.awt.event.ActionEvent;
 25  
 import java.awt.event.ActionListener;
 26  
 import javax.swing.ImageIcon;
 27  
 import javax.swing.JButton;
 28  
 import javax.swing.JDialog;
 29  
 
 30  
 /**
 31  
  * Cria um visualizador de fotos numa janela popup.
 32  
  * Calcula as dimensões da imagem e implementa a imagem na janela.
 33  
  */
 34  
 public class Visualizador extends JDialog implements ActionListener {
 35  
 
 36  
     private Image foto;
 37  
     private int largura;
 38  
     private int altura;
 39  
 
 40  
     /**
 41  
      * Construtor da classe.
 42  
      * Abre a janela popup com a foto.
 43  
      * Recebe um frame para inclusão, nome da foto e um título para a janela.
 44  
      * Testa se é necessário redimensionar a foto, caso positivo chama a função calculaRedução.
 45  
      * Implementa um botão para fechar a janela e por último mostra a tela ao usuário.
 46  
      * @param caminhoImagem Caminho da foto.
 47  
      * @param frame Janela frame para alocar a foto.
 48  
      * @param titulo Título da janela.
 49  
      */
 50  
     public Visualizador(String caminhoImagem, Frame frame, String titulo) {
 51  0
         super(frame, titulo, true);
 52  0
         Container cp = this.getContentPane();
 53  
 
 54  0
         cp.setLayout(new BorderLayout());
 55  0
         foto = new ImageIcon(caminhoImagem).getImage();
 56  0
         largura = foto.getWidth(this);
 57  0
         altura = foto.getHeight(this);
 58  
 
 59  
         // no caso de uma imagem muito grande, utiliza de redução
 60  
         // (por ex. usuário acabou de adicionar uma imagem ao album)
 61  0
         if (largura > 550 || altura > 550) {
 62  0
             Dimension d = calculaReducao(new Dimension(largura, altura), 550);
 63  0
             largura = d.width;
 64  0
             altura = d.height;
 65  
         }
 66  
 
 67  0
         this.setSize(largura + 10, altura + 60);
 68  0
         JButton btFechar = new JButton("fechar");
 69  0
         cp.add(btFechar, BorderLayout.SOUTH);
 70  0
         btFechar.addActionListener(this);
 71  0
         this.setLocationRelativeTo(null);
 72  0
         show();
 73  
 
 74  0
     }
 75  
 
 76  
     /**
 77  
      * Faz uma redução de dimensão da foto.
 78  
      * Recebe um valor de dimensão e um tamanho máximo.
 79  
      * Faz um cálculo baseado na divisão da largura pela altura para saber se a imagem
 80  
      * está na vertical ou na horizontal, então calcula e retorna a nova dimensão.
 81  
      * @param original Dimensão original.
 82  
      * @param tamMaximo Tamanho máximo da nova dimensão.
 83  
      * @return Retorna a nova dimensão.
 84  
      */
 85  
     public static Dimension calculaReducao(Dimension original, int tamMaximo) {
 86  
 
 87  0
         Dimension d = new Dimension();
 88  
         // proporção
 89  0
         double p = original.getWidth() / original.getHeight();
 90  
 
 91  
         // imagem horizontal
 92  0
         if (p > 1) {
 93  0
             d.width = tamMaximo;
 94  0
             d.height = (int) (tamMaximo / p);
 95  
 
 96  
             // imagem vertical
 97  
         } else {
 98  0
             d.width = (int) (tamMaximo * p);
 99  0
             d.height = tamMaximo;
 100  
         }
 101  0
         return d;
 102  
     }
 103  
 
 104  
     /**
 105  
      * Faz uma chamada a classe base e pinta todos os componentes.
 106  
      * Esse método não é utilizado.
 107  
      * TODO: avaliar a funcionalidade deste método.
 108  
      * @param g Contexto gráfico.
 109  
      */
 110  
     @Override
 111  
     public void paint(Graphics g) {
 112  0
         super.paintComponents(g);
 113  0
         g.drawImage(foto, 5, 28, largura, altura, null);
 114  0
     }
 115  
 
 116  
     /**
 117  
      * Desabilita a tela.
 118  
      * Desabilita sua visibilidade e encerra seus dados.
 119  
      * Esse método não é utilizado.
 120  
      * TODO: avaliar a funcionalidade deste método.
 121  
      * @param e Evento de ação.
 122  
      */
 123  
     @Override
 124  
     public void actionPerformed(ActionEvent e) {
 125  0
         this.setVisible(false);
 126  0
         this.dispose();
 127  0
     }
 128  
 
 129  
     /**
 130  
      * Método principal.
 131  
      * Cria um objeto {@link java.awt.Dimension Dimension} e seta seus valores.
 132  
      * Logo após utiliza o método calculaRedução da própria classe para reduzir a dimensão original.
 133  
      * Ao final, imprime as duas dimensões.
 134  
      * @param a args do método main.
 135  
      */
 136  
     public static void main(String a[]) {
 137  0
         Dimension dim = new Dimension(1154, 1772);
 138  0
         Dimension novo = calculaReducao(dim, 550);
 139  0
         System.out.println("original:" + dim.toString());
 140  0
         System.out.println("reduzido:" + novo.toString());
 141  0
     }
 142  
 }