Addition Of Files
This commit is contained in:
180
gui/hints_skills_view.py
Normal file
180
gui/hints_skills_view.py
Normal file
@@ -0,0 +1,180 @@
|
||||
"""
|
||||
Hints and Skills View - Display support hints and event skills
|
||||
"""
|
||||
|
||||
import tkinter as tk
|
||||
from tkinter import ttk
|
||||
import sys
|
||||
import os
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from db.db_queries import get_hints, get_events, get_all_event_skills, get_card_by_id
|
||||
from gui.theme import (
|
||||
BG_DARK, BG_MEDIUM, BG_LIGHT,
|
||||
ACCENT_PRIMARY, ACCENT_SECONDARY, ACCENT_TERTIARY, ACCENT_SUCCESS,
|
||||
TEXT_PRIMARY, TEXT_SECONDARY, TEXT_MUTED,
|
||||
FONT_HEADER, FONT_SUBHEADER, FONT_BODY, FONT_BODY_BOLD, FONT_SMALL,
|
||||
create_styled_text, create_card_frame
|
||||
)
|
||||
|
||||
|
||||
class HintsSkillsFrame(ttk.Frame):
|
||||
"""Frame for viewing support hints and event skills"""
|
||||
|
||||
def __init__(self, parent):
|
||||
super().__init__(parent)
|
||||
self.current_card_id = None
|
||||
self.current_card_name = None
|
||||
|
||||
self.create_widgets()
|
||||
|
||||
def create_widgets(self):
|
||||
"""Create the hints and skills interface"""
|
||||
# Header
|
||||
header_frame = tk.Frame(self, bg=BG_DARK)
|
||||
header_frame.pack(fill=tk.X, padx=20, pady=15)
|
||||
|
||||
self.card_label = tk.Label(header_frame,
|
||||
text="💡 Select a card from the Card List tab",
|
||||
font=FONT_HEADER, bg=BG_DARK, fg=ACCENT_PRIMARY)
|
||||
self.card_label.pack(side=tk.LEFT)
|
||||
|
||||
# Main content with two columns
|
||||
content_frame = tk.Frame(self, bg=BG_DARK)
|
||||
content_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=(0, 15))
|
||||
|
||||
# Left column: Hints
|
||||
left_container = tk.Frame(content_frame, bg=BG_DARK)
|
||||
left_container.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=(0, 10))
|
||||
|
||||
hints_header = tk.Frame(left_container, bg=BG_DARK)
|
||||
hints_header.pack(fill=tk.X, pady=(0, 8))
|
||||
tk.Label(hints_header, text="🎯 Training Hints", font=FONT_SUBHEADER,
|
||||
bg=BG_DARK, fg=TEXT_PRIMARY).pack(side=tk.LEFT)
|
||||
|
||||
hints_frame = create_card_frame(left_container)
|
||||
hints_frame.pack(fill=tk.BOTH, expand=True)
|
||||
|
||||
self.hints_text = create_styled_text(hints_frame, height=18)
|
||||
self.hints_text.pack(fill=tk.BOTH, expand=True, padx=2, pady=2)
|
||||
self.hints_text.config(state=tk.DISABLED)
|
||||
|
||||
# Configure tags for hints
|
||||
self.hints_text.tag_configure('header', font=FONT_SUBHEADER, foreground=ACCENT_PRIMARY)
|
||||
self.hints_text.tag_configure('skill', foreground=ACCENT_TERTIARY, font=FONT_BODY_BOLD)
|
||||
self.hints_text.tag_configure('desc', foreground=TEXT_MUTED)
|
||||
self.hints_text.tag_configure('number', foreground=ACCENT_SECONDARY)
|
||||
|
||||
# Right column: Events and Skills
|
||||
right_container = tk.Frame(content_frame, bg=BG_DARK)
|
||||
right_container.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)
|
||||
|
||||
events_header = tk.Frame(right_container, bg=BG_DARK)
|
||||
events_header.pack(fill=tk.X, pady=(0, 8))
|
||||
tk.Label(events_header, text="📅 Training Events & Skills", font=FONT_SUBHEADER,
|
||||
bg=BG_DARK, fg=TEXT_PRIMARY).pack(side=tk.LEFT)
|
||||
|
||||
events_frame = create_card_frame(right_container)
|
||||
events_frame.pack(fill=tk.BOTH, expand=True)
|
||||
|
||||
tree_container = tk.Frame(events_frame, bg=BG_MEDIUM)
|
||||
tree_container.pack(fill=tk.BOTH, expand=True, padx=2, pady=2)
|
||||
|
||||
# Treeview for events
|
||||
self.events_tree = ttk.Treeview(tree_container, columns=('event', 'skills'), show='tree headings')
|
||||
self.events_tree.heading('#0', text='')
|
||||
self.events_tree.heading('event', text='Event/Skill')
|
||||
self.events_tree.heading('skills', text='Details')
|
||||
|
||||
self.events_tree.column('#0', width=35)
|
||||
self.events_tree.column('event', width=240)
|
||||
self.events_tree.column('skills', width=180)
|
||||
|
||||
scrollbar = ttk.Scrollbar(tree_container, orient=tk.VERTICAL, command=self.events_tree.yview)
|
||||
self.events_tree.configure(yscrollcommand=scrollbar.set)
|
||||
|
||||
self.events_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
|
||||
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
|
||||
|
||||
# Summary section at bottom
|
||||
summary_frame = tk.Frame(self, bg=BG_MEDIUM, padx=15, pady=10)
|
||||
summary_frame.pack(fill=tk.X, padx=20, pady=(0, 10))
|
||||
|
||||
self.summary_label = tk.Label(summary_frame, text="", font=FONT_SMALL,
|
||||
bg=BG_MEDIUM, fg=TEXT_SECONDARY)
|
||||
self.summary_label.pack()
|
||||
|
||||
def set_card(self, card_id):
|
||||
"""Load a card's hints and skills"""
|
||||
self.current_card_id = card_id
|
||||
|
||||
# Get card info
|
||||
card = get_card_by_id(card_id)
|
||||
if card:
|
||||
self.current_card_name = card[1]
|
||||
self.card_label.config(text=f"💡 {self.current_card_name}")
|
||||
|
||||
self.update_hints_display()
|
||||
self.update_events_display()
|
||||
|
||||
def update_hints_display(self):
|
||||
"""Update the hints display"""
|
||||
self.hints_text.config(state=tk.NORMAL)
|
||||
self.hints_text.delete('1.0', tk.END)
|
||||
|
||||
if not self.current_card_id:
|
||||
self.hints_text.insert(tk.END, "No card selected\n\n", 'desc')
|
||||
self.hints_text.insert(tk.END, "Select a card from the Card List tab to view its hints.", 'desc')
|
||||
self.hints_text.config(state=tk.DISABLED)
|
||||
return
|
||||
|
||||
hints = get_hints(self.current_card_id)
|
||||
|
||||
self.hints_text.insert(tk.END, "Training Skills this card can teach:\n\n", 'header')
|
||||
|
||||
if hints:
|
||||
for i, (hint_name, hint_desc) in enumerate(hints, 1):
|
||||
self.hints_text.insert(tk.END, f" {i}. ", 'number')
|
||||
self.hints_text.insert(tk.END, f"{hint_name}\n", 'skill')
|
||||
if hint_desc:
|
||||
self.hints_text.insert(tk.END, f" {hint_desc}\n", 'desc')
|
||||
self.hints_text.insert(tk.END, "\n")
|
||||
else:
|
||||
self.hints_text.insert(tk.END, " No hints/skills data available.\n\n", 'desc')
|
||||
self.hints_text.insert(tk.END, " This may mean:\n", 'desc')
|
||||
self.hints_text.insert(tk.END, " • Card hasn't been scraped yet\n", 'desc')
|
||||
self.hints_text.insert(tk.END, " • Card has no trainable skills\n", 'desc')
|
||||
|
||||
self.hints_text.config(state=tk.DISABLED)
|
||||
|
||||
def update_events_display(self):
|
||||
"""Update the events tree display"""
|
||||
self.events_tree.delete(*self.events_tree.get_children())
|
||||
|
||||
if not self.current_card_id:
|
||||
return
|
||||
|
||||
events = get_events(self.current_card_id)
|
||||
events_with_skills = get_all_event_skills(self.current_card_id)
|
||||
|
||||
# Add events as parent nodes
|
||||
for event_id, event_name, event_type in events:
|
||||
skills = events_with_skills.get(event_name, [])
|
||||
skill_count = f"{len(skills)} skills" if skills else "No skills"
|
||||
|
||||
event_node = self.events_tree.insert('', tk.END, text='📅',
|
||||
values=(event_name, skill_count))
|
||||
|
||||
# Add skills as children
|
||||
for skill in skills:
|
||||
self.events_tree.insert(event_node, tk.END, text='⭐',
|
||||
values=(skill, ''))
|
||||
|
||||
# Update summary
|
||||
hint_count = len(get_hints(self.current_card_id))
|
||||
event_count = len(events)
|
||||
|
||||
self.summary_label.config(
|
||||
text=f"📊 Summary: {hint_count} hints │ {event_count} events"
|
||||
)
|
||||
Reference in New Issue
Block a user