100 lines
4.2 KiB
Python
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) |