diff --git a/visao/componentes/dialogo_adicionar_pet.py b/visao/componentes/dialogo_adicionar_pet.py index 34661d8..7db00aa 100644 --- a/visao/componentes/dialogo_adicionar_pet.py +++ b/visao/componentes/dialogo_adicionar_pet.py @@ -4,51 +4,94 @@ from tkinter import messagebox class DialogoAdicionarPet(tk.Toplevel): def __init__(self, parent): super().__init__(parent) - self.transient(parent) - self.title("Adicionar Novo Pet") - self.parent = parent self.result = None - body = tk.Frame(self, padx=15, pady=15) - self.initial_focus = self.criar_formulario(body) - body.pack() + self.title("Adicionar Novo Pet") + self.geometry("300x200") + self.configure(bg="#1e1e1e") + self.transient(parent) + self.grab_set() - self.criar_botoes() + self._criar_widgets() + self.wait_window(self) - self.grab_set() # Torna a janela modal - self.protocol("WM_DELETE_WINDOW", self._on_cancel) - self.geometry(f"+{parent.winfo_rootx()+50}+{parent.winfo_rooty()+50}") - self.initial_focus.focus_set() - self.wait_window(self) # Pausa a execução até que a janela seja fechada + def _criar_widgets(self): + main_frame = tk.Frame(self, bg="#1e1e1e", padx=20, pady=20) + main_frame.pack(fill="both", expand=True) - def criar_formulario(self, master): - tk.Label(master, text="Nome:").grid(row=0, column=0, sticky="w", pady=3) - self.nome_entry = tk.Entry(master, width=30) - self.nome_entry.grid(row=0, column=1, padx=5, pady=3) + tk.Label(main_frame, text="Nome:", bg="#1e1e1e", fg="white").pack(anchor="w") + self.entry_nome = tk.Entry(main_frame, bg="#2c2c2c", fg="white", insertbackground="white") + self.entry_nome.pack(fill="x", pady=(0, 10)) - tk.Label(master, text="Espécie:").grid(row=1, column=0, sticky="w", pady=3) - self.especie_entry = tk.Entry(master, width=30) - self.especie_entry.grid(row=1, column=1, padx=5, pady=3) + tk.Label(main_frame, text="Espécie:", bg="#1e1e1e", fg="white").pack(anchor="w") + self.entry_especie = tk.Entry(main_frame, bg="#2c2c2c", fg="white", insertbackground="white") + self.entry_especie.pack(fill="x", pady=(0, 20)) - return self.nome_entry # Define o foco inicial + botoes_frame = tk.Frame(main_frame, bg="#1e1e1e") + botoes_frame.pack(fill="x") - def criar_botoes(self): - box = tk.Frame(self, pady=5) - tk.Button(box, text="Adicionar", width=10, command=self._on_ok, default=tk.ACTIVE).pack(side=tk.LEFT, padx=5) - tk.Button(box, text="Cancelar", width=10, command=self._on_cancel).pack(side=tk.LEFT, padx=5) - self.bind("", self._on_ok) - self.bind("", self._on_cancel) - box.pack() + btn_ok = tk.Button(botoes_frame, text="Adicionar", command=self._on_ok, bg="#4CAF50", fg="white", relief="flat") + btn_ok.pack(side="right", padx=(10, 0)) - def _on_ok(self, event=None): - nome = self.nome_entry.get().strip() - especie = self.especie_entry.get().strip() + btn_cancelar = tk.Button(botoes_frame, text="Cancelar", command=self.destroy, bg="#f44336", fg="white", relief="flat") + btn_cancelar.pack(side="right") + + self.entry_nome.focus_set() + + def _on_ok(self): + nome = self.entry_nome.get().strip() + especie = self.entry_especie.get().strip() if not nome or not especie: messagebox.showwarning("Campos Vazios", "Por favor, preencha o nome e a espécie.", parent=self) return self.result = {"nome": nome, "especie": especie} - self._on_cancel() + self.destroy() - def _on_cancel(self, event=None): - self.parent.focus_set() + +class DialogoEditarPet(tk.Toplevel): + def __init__(self, parent, pet_atual): + super().__init__(parent) + self.result = None + self.pet_atual = pet_atual + + self.title("Editar Pet") + self.geometry("300x200") + self.configure(bg="#1e1e1e") + self.transient(parent) + self.grab_set() + + self._criar_widgets() + + def _criar_widgets(self): + main_frame = tk.Frame(self, bg="#1e1e1e", padx=20, pady=20) + main_frame.pack(fill="both", expand=True) + + tk.Label(main_frame, text="Nome:", bg="#1e1e1e", fg="white").pack(anchor="w") + self.entry_nome = tk.Entry(main_frame, bg="#2c2c2c", fg="white", insertbackground="white") + self.entry_nome.insert(0, self.pet_atual.nome) + self.entry_nome.pack(fill="x", pady=(0, 10)) + + tk.Label(main_frame, text="Espécie:", bg="#1e1e1e", fg="white").pack(anchor="w") + self.entry_especie = tk.Entry(main_frame, bg="#2c2c2c", fg="white", insertbackground="white") + self.entry_especie.insert(0, self.pet_atual.especie) + self.entry_especie.pack(fill="x", pady=(0, 20)) + + botoes_frame = tk.Frame(main_frame, bg="#1e1e1e") + botoes_frame.pack(fill="x") + + btn_ok = tk.Button(botoes_frame, text="Salvar", command=self._on_ok, bg="#4CAF50", fg="white", relief="flat") + btn_ok.pack(side="right", padx=(10, 0)) + + btn_cancelar = tk.Button(botoes_frame, text="Cancelar", command=self.destroy, bg="#f44336", fg="white", relief="flat") + btn_cancelar.pack(side="right") + + def _on_ok(self): + nome = self.entry_nome.get().strip() + especie = self.entry_especie.get().strip() + + if not nome or not especie: + messagebox.showerror("Erro", "Nome e espécie não podem ser vazios.", parent=self) + return + + self.result = {"nome": nome, "especie": especie} self.destroy() \ No newline at end of file diff --git a/visao/frames/frame_pessoa.py b/visao/frames/frame_pessoa.py index 2eb9c31..ade9916 100644 --- a/visao/frames/frame_pessoa.py +++ b/visao/frames/frame_pessoa.py @@ -73,6 +73,20 @@ class FramePessoas(tk.Frame): ) btn_adicionar.pack(side="left", padx=5) + # Botão Alterar + btn_alterar = tk.Button( + botoes_frame, + text="Alterar", + command=self.alterar_pessoa, + bg="#ffc107", # Cor amarela para edição + fg="white", + font=("Arial", 12), + relief="flat", + padx=10, + pady=5 + ) + btn_alterar.pack(side="left", padx=5) + btn_apagar = tk.Button( botoes_frame, text="Apagar", @@ -101,6 +115,30 @@ class FramePessoas(tk.Frame): self.popular_treeview() messagebox.showinfo("Sucesso", "Pessoa adicionada com sucesso.") + def alterar_pessoa(self): + selecionado = self.tree.selection() + if not selecionado: + messagebox.showwarning("Aviso", "Por favor, selecione uma pessoa para alterar.") + return + + item = self.tree.item(selecionado[0]) + id_pessoa, nome_atual = item['values'] + + novo_nome = simpledialog.askstring( + "Alterar Pessoa", + "Digite o novo nome:", + initialvalue=nome_atual, + parent=self + ) + + if novo_nome and novo_nome.strip() and novo_nome.strip() != nome_atual: + pessoa = self.bd.pessoas.buscar_por_id(id_pessoa) + if pessoa: + pessoa.nome = novo_nome.strip() + self.bd.pessoas.alterar(pessoa.id, pessoa) + self.popular_treeview() + messagebox.showinfo("Sucesso", "Pessoa alterada com sucesso.") + def apagar_pessoa(self): selecionado = self.tree.selection() if not selecionado: diff --git a/visao/frames/frame_pet.py b/visao/frames/frame_pet.py index 3e5906e..55ef103 100644 --- a/visao/frames/frame_pet.py +++ b/visao/frames/frame_pet.py @@ -2,7 +2,7 @@ import tkinter as tk from tkinter import ttk, messagebox from modelo.pet import Pet -from visao.componentes.dialogo_adicionar_pet import DialogoAdicionarPet +from visao.componentes.dialogo_adicionar_pet import DialogoAdicionarPet, DialogoEditarPet class FramePet(tk.Frame): def __init__(self, master=None, bd=None): @@ -80,6 +80,20 @@ class FramePet(tk.Frame): ) btn_adicionar.pack(side="left", padx=5) + # Botão Alterar + btn_alterar = tk.Button( + botoes_frame, + text="Alterar", + command=self.alterar_pet, + bg="#ffc107", # Cor amarela para edição + fg="white", + font=("Arial", 12), + relief="flat", + padx=10, + pady=5 + ) + btn_alterar.pack(side="left", padx=5) + # Botão Apagar btn_apagar = tk.Button( botoes_frame, @@ -111,6 +125,30 @@ class FramePet(tk.Frame): self.popular_treeview() messagebox.showinfo("Sucesso", "Pet adicionado com sucesso.") + def alterar_pet(self): + selecionado = self.tree.selection() + if not selecionado: + messagebox.showwarning("Aviso", "Por favor, selecione um pet para alterar.") + return + + item = self.tree.item(selecionado[0]) + id_pet, _, _ = item['values'] + + pet_atual = self.bd.pets.buscar_por_id(id_pet) + if not pet_atual: + messagebox.showerror("Erro", "Pet não encontrado no banco de dados.") + return + + dialog = DialogoEditarPet(self, pet_atual) + self.wait_window(dialog) + + if dialog.result: + pet_atual.nome = dialog.result["nome"] + pet_atual.especie = dialog.result["especie"] + self.bd.pets.alterar(pet_atual.id, pet_atual) + self.popular_treeview() + messagebox.showinfo("Sucesso", "Pet alterado com sucesso.") + def apagar_pet(self): selecionado = self.tree.selection() if not selecionado: