1+ import customtkinter as ctk
2+
3+ from .styles import *
4+
15class NotesManager :
2- pass
6+ def __init__ (self , app , data_manager ):
7+ self .app = app
8+ self .data_manager = data_manager
9+
10+ def create_task (self , index ):
11+ self .frame = ctk .CTkFrame (self .app .notes_data_frame , width = WIDTH + frame_padding , fg_color = (light_frame_color , frame_color ), height = button_height + frame_padding * 2 )
12+ self .frame .pack (pady = frame_padding / 2 )
13+ self .frame .grid_propagate (False )
14+
15+ def title_text (title : str ) -> str :
16+ max_letters = 20
17+
18+ display_title = title
19+
20+ if len (title ) > max_letters :
21+ display_title = title [:max_letters ] + "..."
22+
23+ return display_title
24+
25+ title = ctk .CTkLabel (self .frame , text = title_text (str (self .data_manager .worksheet ["O" + str (index )].value )), font = (font_family , font_size * 1.25 ),
26+ text_color = (light_font_color , font_color ), anchor = "center" , height = button_height + frame_padding * 2 )
27+ title .grid (row = 0 , column = 0 , padx = widget_padding_x )
28+ date = ctk .CTkLabel (self .frame , text = str (self .data_manager .worksheet ["N" + str (index )].value ), font = (font_family , font_size * 1.25 ),
29+ text_color = (light_font_color , font_color ), anchor = "center" , height = button_height + frame_padding * 2 )
30+ date .grid (row = 0 , column = 1 , padx = widget_padding_x )
31+
32+ button_frame = ctk .CTkFrame (self .frame , fg_color = "transparent" )
33+ button_frame .place (anchor = "center" , rely = 0.5 , relx = 0.825 )
34+
35+ open_button = ctk .CTkButton (button_frame , text = "Open" , height = button_height , fg_color = self .data_manager .color , hover_color = self .data_manager .highlight_color , font = (font_family , font_size ), text_color = button_font_color ,
36+ command = lambda : self ._open_notes_text (str (self .data_manager .worksheet ["N" + str (index )].value ), str (self .data_manager .worksheet ["O" + str (index )].value ), str (self .data_manager .worksheet ["P" + str (index )].value ), index ))
37+ open_button .grid (row = 0 , column = 0 , padx = widget_padding_x )
38+ delete_button = ctk .CTkButton (button_frame , text = "Delete" , height = button_height , fg_color = self .data_manager .color , hover_color = self .data_manager .highlight_color , font = (font_family , font_size ), text_color = button_font_color ,
39+ command = lambda : self .delete_task (index ))
40+ delete_button .grid (row = 0 , column = 1 )
41+
42+
43+ def delete_task (self , index ):
44+ self .data_manager .worksheet ["M" + str (index )].value = "Yes"
45+ self .frame .destroy ()
46+ self .data_manager .load_notes ()
47+
48+
49+ def _open_notes_text (self , date , title , text , index ):
50+ self .app .notes_frame_frame .grid_forget ()
51+
52+ frame = ctk .CTkFrame (self .app .notes_frame , fg_color = "transparent" , corner_radius = 10 , height = HEIGHT + frame_padding * 2 , width = WIDTH - frame_padding * 2 )
53+ frame .grid (padx = frame_padding , pady = frame_padding )
54+ frame .grid_propagate (False )
55+
56+ header_frame = ctk .CTkFrame (frame , fg_color = (light_frame_color , frame_color ), corner_radius = 10 , width = WIDTH - frame_padding * 2 , height = 60 )
57+ header_frame .grid (row = 0 , column = 0 , pady = (0 , frame_padding ))
58+ header_frame .grid_propagate (False )
59+
60+ title_label = ctk .CTkLabel (header_frame , text = title , font = (font_family , font_size * 1.5 ), text_color = (light_font_color , font_color ),
61+ height = 40 , width = WIDTH - 280 - frame_padding * 6 , fg_color = (light_frame_color , frame_color ), anchor = "w" )
62+ title_label .grid (row = 0 , column = 0 , padx = widget_padding_x , pady = widget_padding_y )
63+ #date_label = ctk.CTkLabel(header_frame, text=date, font=(font_family, font_size), text_color=(light_font_color, font_color),
64+ #height=40, width=WIDTH - 280 - frame_padding * 6, fg_color=(light_frame_color, frame_color))
65+ #date_label.grid(row=0, column=0, padx=widget_padding_x, pady=widget_padding_y)
66+
67+ button_frame = ctk .CTkFrame (header_frame , fg_color = "transparent" )
68+ button_frame .place (anchor = "center" , rely = 0.5 , relx = 0.85 )
69+
70+ textbox = ctk .CTkTextbox (frame , font = (font_family , font_size ), text_color = (light_font_color , font_color ), fg_color = "transparent" , width = WIDTH - frame_padding * 2 , height = HEIGHT + frame_padding * 2 - 60 )
71+ textbox .grid (row = 1 , column = 0 )
72+ textbox .insert ("0.0" , text )
73+ textbox .configure (state = "disabled" )
74+
75+ edit_button = ctk .CTkButton (button_frame , height = button_height , text = "Edit" , fg_color = self .data_manager .color ,
76+ hover_color = self .data_manager .highlight_color , font = (font_family , font_size ), text_color = button_font_color , command = lambda : self .edit_note (index , textbox , edit_button , frame ))
77+ edit_button .grid (row = 0 , column = 1 )
78+ exit_button = ctk .CTkButton (button_frame , height = button_height , text = "Exit" , fg_color = self .data_manager .color , command = lambda : self ._exit_note (frame ),
79+ hover_color = self .data_manager .highlight_color , font = (font_family , font_size ), text_color = button_font_color )
80+ exit_button .grid (row = 0 , column = 2 , padx = widget_padding_x , pady = widget_padding_y )
81+
82+
83+ def _exit_note (self , frame ):
84+ frame .destroy ()
85+ self .app .notes_frame_frame .grid (row = 0 , column = 0 , padx = frame_padding , pady = (frame_padding , 0 ))
86+
87+
88+ def edit_note (self , index , textbox , edit_button , frame ):
89+ def save_note (index , frame ):
90+ self .data_manager .worksheet ["P" + str (index )].value = textbox .get ("0.0" , "end" )
91+ self ._exit_note (frame )
92+ self .data_manager .workbook .save (self .app .data_file )
93+
94+ textbox .configure (state = "normal" , fg_color = (light_frame_color , frame_color ))
95+ edit_button .configure (text = "Save" , command = lambda : save_note (index , frame ))
96+
97+
98+ def clear_notes (self ):
99+ for note in self .app .notes_data_frame .winfo_children ():
100+ note .destroy ()
0 commit comments