proyecto-global-psp/vista/central_panel/view_notas.py

100 lines
4.2 KiB
Python

# Módulo: vista/central_panel/view_notas.py
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
# Asumo que la ruta de importación de la lógica es correcta
from logica.T1.textEditor import cargar_contenido_res_notes, guardar_contenido_res_notes
from vista.config import *
class NotasPanel(ttk.Frame):
"""
Panel de la pestaña Tareas (Editor de Notas).
"""
def __init__(self, parent_notebook, root, *args, **kwargs):
super().__init__(parent_notebook, *args, **kwargs)
self.root = root
self.notes_text_editor = None
# 🎯 CORRECCIÓN CRÍTICA: Configurar la expansión del Frame de la pestaña
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)
self.crear_interfaz_tareas(self)
# -------------------------------------------------------------
# 📄 VISTA Y LÓGICA DE NOTAS
# -------------------------------------------------------------
def crear_interfaz_tareas(self, parent_frame):
"""Crea el editor de texto simple para el archivo res/notes."""
# 1. Frame Contenedor Principal. Lo ubicamos con grid para que ocupe todo el espacio.
frame = ttk.Frame(parent_frame, padding=15, style='TFrame')
# Usamos grid para ocupar el único espacio disponible en el parent_frame (NotasPanel)
frame.grid(row=0, column=0, sticky="nsew")
# 2. Configuración de expansión dentro del Frame Contenedor
# Queremos que el Text widget sea el único que se expanda vertical y horizontalmente.
# El Text widget está en la fila 2 (después de 2 labels).
frame.grid_rowconfigure(2, weight=1) # Fila del Text widget
frame.grid_columnconfigure(0, weight=1) # Columna única
# Etiquetas (usan pack/grid si fuera necesario, pero aquí usaremos grid para simplificar)
ttk.Label(frame, text="Editor de Notas ", font=FUENTE_TITULO).grid(row=0, column=0, pady=(0, 10), sticky="w")
ttk.Label(frame, text="Use este panel para tomar notas rápidas sobre la ejecución de tareas.",
font=FUENTE_NEGOCIOS).grid(row=1, column=0, pady=(0, 15), sticky="w")
# Editor de Texto
self.notes_text_editor = tk.Text(
frame,
height=20,
wrap="word",
bg=COLOR_BLANCO,
relief="solid",
borderwidth=1,
font=FUENTE_MONO
)
# 🎯 Ubicación del Text widget en la fila que tiene weight=1
self.notes_text_editor.grid(row=2, column=0, sticky="nsew", pady=(0, 10))
# Frame de Botones
frame_botones = ttk.Frame(frame)
frame_botones.grid(row=3, column=0, sticky="ew", pady=(5, 0)) # Colocado debajo del Text widget
# Botones dentro del Frame de Botones (usando pack para alineación lateral)
ttk.Button(frame_botones, text="Guardar Cambios", command=self.guardar_res_notes, style='Action.TButton').pack(
side=tk.RIGHT)
ttk.Button(frame_botones, text="Cargar Archivo", command=self.cargar_res_notes, style='Action.TButton').pack(
side=tk.LEFT)
self.cargar_res_notes(initial_load=True)
def cargar_res_notes(self, initial_load=False):
"""Carga el contenido de res/notes al editor de texto."""
if not self.notes_text_editor: return
contenido = cargar_contenido_res_notes()
self.notes_text_editor.delete("1.0", tk.END)
if "Error al cargar:" in contenido:
self.notes_text_editor.insert(tk.END, contenido)
else:
if initial_load and not contenido.strip():
self.notes_text_editor.insert(tk.END, "# Escriba aquí sus notas (res/notes)")
else:
self.notes_text_editor.insert(tk.END, contenido)
def guardar_res_notes(self):
"""Guarda el contenido del editor de texto en res/notes."""
if not self.notes_text_editor: return
contenido = self.notes_text_editor.get("1.0", tk.END)
success, message = guardar_contenido_res_notes(contenido)
if success:
messagebox.showinfo("✅ Guardado", "Notas guardadas exitosamente.")
else:
messagebox.showerror("❌ Error al Guardar", message)