Files
lbms_py/lbms/frm_history.py
T
2026-10-11 20:37:14 -04:00

132 lines
5.6 KiB
Python

from datetime import datetime
import tkinter as tk
from . import globals as g
class FrmHistory(tk.Toplevel):
FONT = ("Consolas", 12, "bold")
def __init__(self, master):
super().__init__(master)
self.title("History")
self.my_gun = None
self._build_ui()
self.set_gun_height(549)
def _build_ui(self):
self.lbl_title = tk.Label(self, text="", anchor="center", font=self.FONT)
self.lbl_title.place(x=13, y=9, width=395, height=23)
self._lbl_fired = tk.Label(self, text="Fired: ", anchor="e", font=self.FONT)
self._lbl_fired.place(x=13, y=32, width=134, height=23)
self.lbl_fired = tk.Label(self, text="", anchor="w", font=self.FONT)
self.lbl_fired.place(x=155, y=32, width=253, height=23)
self._lbl_time = tk.Label(self, text="On Time: ", anchor="e", font=self.FONT)
self._lbl_time.place(x=13, y=55, width=134, height=23)
self.lbl_time = tk.Label(self, text="", anchor="w", font=self.FONT)
self.lbl_time.place(x=155, y=55, width=253, height=23)
self._lbl_hist = tk.Label(self, text="HISTORICAL", anchor="center", bg="black", fg="gray", font=self.FONT)
self._lbl_hist.place(x=1, y=103, width=419, height=23)
self._lbl_fired_hist = tk.Label(self, text="Fired: ", anchor="e", font=self.FONT)
self._lbl_fired_hist.place(x=13, y=126, width=134, height=23)
self.lbl_fired_hist = tk.Label(self, text="", anchor="w", font=self.FONT)
self.lbl_fired_hist.place(x=155, y=126, width=253, height=23)
self._lbl_time_hist = tk.Label(self, text="On Time: ", anchor="e", font=self.FONT)
self._lbl_time_hist.place(x=13, y=149, width=134, height=23)
self.lbl_time_hist = tk.Label(self, text="", anchor="w", font=self.FONT)
self.lbl_time_hist.place(x=155, y=149, width=253, height=23)
self.btn_cancel = tk.Button(self, text="Cancel", font=self.FONT, command=self.destroy)
self.btn_cancel.place(x=333, y=58, width=75, height=42)
self.btn_change_batteries = tk.Button(self, text="Change Batteries", font=self.FONT,
command=self._btn_change_batteries)
self.btn_change_batteries.place(x=12, y=198, width=396, height=36)
self.txt_history = tk.Text(self, width=50, height=13, state="disabled", font=self.FONT)
self.txt_history.place(x=12, y=240, width=397, height=258)
self.txt_set_fired = tk.Entry(self, font=self.FONT)
self.txt_set_fired.place(x=12, y=504, width=100, height=26)
self.btn_set_fired = tk.Button(self, text="SetFired", font=self.FONT, command=self._btn_set_fired)
self.btn_set_fired.place(x=118, y=504, width=113, height=26)
self.txt_set_time = tk.Entry(self, font=self.FONT)
self.txt_set_time.place(x=12, y=536, width=100, height=26)
self.btn_set_time = tk.Button(self, text="SetTime", font=self.FONT, command=self._btn_set_time)
self.btn_set_time.place(x=118, y=536, width=113, height=26)
def set_gun_height(self, height):
self.geometry("421x{}".format(height))
def set_gun(self, gun):
self.my_gun = gun
admin_widgets = (self.txt_set_fired, self.txt_set_time, self.btn_set_fired, self.btn_set_time)
positions = {
self.txt_set_fired: (12, 504, 100, 26),
self.btn_set_fired: (118, 504, 113, 26),
self.txt_set_time: (12, 536, 100, 26),
self.btn_set_time: (118, 536, 113, 26),
}
if g.admin_mode:
self.set_gun_height(605)
for w in admin_widgets:
x, y, ww, h = positions[w]
w.place(x=x, y=y, width=ww, height=h)
else:
self.set_gun_height(549)
for w in admin_widgets:
w.place_forget()
self.init()
def init(self):
self.lbl_title.configure(text="{} - {}".format(self.my_gun.gun_id, self.my_gun.gun_mac))
self.lbl_fired.configure(text=str(self.my_gun.fired + self.my_gun.fired_overall))
self.lbl_fired_hist.configure(text=str(self.my_gun.history_fired))
self.lbl_time.configure(text=g.minutes_to_string(self.my_gun.battery + self.my_gun.battery_overall))
self.lbl_time_hist.configure(text=g.minutes_to_string(self.my_gun.history_battery_usage))
self.txt_history.configure(state="normal")
self.txt_history.delete("1.0", "end")
for item in self.my_gun.change_history:
self.txt_history.insert("end", item + "\n")
self.txt_history.configure(state="disabled")
self.focus_set()
def _btn_change_batteries(self):
now = datetime.now()
self.my_gun.battery_last_changed = now
self.my_gun.change_history.append(
"{},B,{},F,{}".format(now, self.my_gun.battery + self.my_gun.battery_overall,
self.my_gun.fired + self.my_gun.fired_overall))
self.my_gun.history_battery_changes += 1
self.my_gun.history_battery_usage = (self.my_gun.battery + self.my_gun.battery_overall + self.my_gun.history_battery_usage)
self.my_gun.history_fired += (self.my_gun.fired + self.my_gun.fired_overall)
self.my_gun.battery = 0
self.my_gun.battery_overall = 0
self.my_gun.fired = 0
self.my_gun.fired_overall = 0
self.my_gun.store_gun_info()
self.destroy()
def _btn_set_fired(self):
self.my_gun.fired = int(self.txt_set_fired.get())
self.my_gun.store_gun_info()
def _btn_set_time(self):
self.my_gun.battery = int(self.txt_set_time.get())
self.my_gun.store_gun_info()