#!/usr/bin/env python
# Pass Generator - V 1.5.1
# Rodrigo Calanca Nishino
# 
# Programa simples que gera passwords
# Atenção: Ele usa o anygui (anygui.sourceforge.net)
#
# ChangeLog:
#  - Modificado por FelipeLessa (2004/02/15):
#     o Nova função cria() (renomeada para criar_password() ) de RodrigoNishino torna
#     o programa totalmente dependente da anygui. Removendo anygui_disponivel.
#     o Alterações simples.
#  - Modificado por RodrigoNishino (2004/02/15):
#     o Interface redesenhada.
#     o Codigo foi simplificado.
#  - Modificado por FelipeLessa para (2004/01/23):
#     o Não aceitar números negativos. Obrigado por mostrar o problema RodrigoNishino.
#     o Unificar funções que tratam os sinais recebidos pelos botões. Aquilo realmente era uma repetição.
#  - Modificado por FelipeLessa para (2004/01/19):
#     o Possibilitar a importação do arquivo sem que a instalação do anygui seja necessária.
#  - Modificado por FelipeLessa para (2004/01/17):
#     o Otimizar conjuntos de letras.
#     o Utilizar "".join ao invés de laço for em password() . 
#     o Retirar tag coding visto que quando o código for copiado & colado do  Wiki ele pode ser alterado.
#     o Texto que aparece por padrão deve corresponder ao especificado no  início do arquivo.
#     o Adicionada a possibilidade de importar arquivo sem abrir a janela.
#     o Modificações menores.

###
### Import's
###

try:
    import anygui as gui
except ImportError:
    from sys import stderr, exit
    print >> stderr, "ERRO: Interface anygui não disponível."
    exit(1)

from random import choice

###
### Função por onde todo o programa se desenrola
###

def criar_password(**kwds):
    carac = ""

    # Usei "abcd..." ao invés de string.lowercase porque está acontecendo algum bug...
    if Check_az.on == 1:
        carac += "abcdefghijklmnopqrstuvwxyz"
    if Check_AZ.on == 1:
        carac += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    if Check_09.on == 1:
        carac += "0123456789"

    if carac:
        tamanho = int(TamanhoTField.text)
        if tamanho < 5:
            Texto.text = "Tamanho muito pequeno"
        else:
            final = ""
            for p in xrange(tamanho):
                final += choice(carac)
            Texto.text = final # Pega a variável final e põe dentro de Texto.text .
    else:
        Texto.text = "Parametros invalidos"


###
### Interface Gráfica
###

Programa = gui.Application()

Janela = gui.Window(title="PassGenerator")
Janela.size = (180, 105)

Texto = gui.TextField()
Texto.width = Janela.width
Texto.hstretch = 1
Janela.add(Texto)

OKButton = gui.Button(text="Criar Senha")
OKButton.width = Janela.width - 20
OKButton.hstretch = 1
Janela.add(OKButton, top=(Texto, 5), left = 10)
gui.link(OKButton, criar_password)

Check_az = gui.CheckBox(text="a-z")
Check_az.width = 60
Check_az.on = 1
Janela.add(Check_az, top=(OKButton, 5), left = 5)

Check_AZ = gui.CheckBox(text="A-Z")
Check_AZ.width = 60
Janela.add(Check_AZ, top=(OKButton, 5), left=(Check_az, 5))

Check_09 = gui.CheckBox(text="0-9")
Check_09.width = 60
Janela.add(Check_09, top=(OKButton, 5), left=(Check_AZ, 5))

TamanhoLabel = gui.Label(text="Tamanho")
TamanhoLabel.width = 50
Janela.add(TamanhoLabel, top=(Check_az, 5), left = 5)

TamanhoTField = gui.TextField()
TamanhoTField.width = 50
TamanhoTField.height = 17
TamanhoTField.text = "5"
Janela.add(TamanhoTField, top=(Check_az, 5), left=(TamanhoLabel, 5))

Programa.add(Janela)

if __name__=="__main__":
    Programa.run()
