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

138 lines
5.3 KiB
Python

from datetime import datetime, timedelta
import tkinter as tk
from . import globals as g
from .frm_history import FrmHistory
from .resources import load_image
HISTORY_WINDOW = None
def show_history(master, gun):
global HISTORY_WINDOW
if HISTORY_WINDOW is None or not HISTORY_WINDOW.winfo_exists():
HISTORY_WINDOW = FrmHistory(master)
HISTORY_WINDOW.set_gun(gun)
HISTORY_WINDOW.lift()
HISTORY_WINDOW.focus_set()
class GunButton(tk.Frame):
def __init__(self, master, gun):
super().__init__(master, bd=1, relief="solid", bg="#d9d9d9")
self.gun = gun
self.change_battery = False
self.flash_state = False
self._gun_img = load_image("Custom98.png")
self._gun_img_fired = load_image("Custom98_2.png")
self._gun_img_w = self._gun_img.width()
self.pb_battery = tk.Label(self, image=load_image("100.png"), bd=0, bg="#d9d9d9")
self.pb_battery.image = self.pb_battery.cget("image")
self.pb_battery.place(x=3, y=3)
self.pb_gun = tk.Label(self, image=self._gun_img, bd=0, bg="#d9d9d9")
self.pb_gun.image = self.pb_gun.cget("image")
self.pb_gun.place(x=122, y=3)
self.lbl_main = tk.Label(self, text="lblMain", anchor="center", justify="center", bg="#d9d9d9",
font=("Consolas", 10, "bold"))
self.lbl_main.place(x=-1, y=0, relwidth=1.0, relheight=1.0)
self.lbl_main.bind("<Button-1>", lambda e: show_history(self, self.gun))
self.bind("<Configure>", self._on_size_changed)
self.after(250, self._timer_update)
self.after(500, self._timer_battery)
def _on_size_changed(self, event=None):
self.pb_gun.place(x=self.winfo_width() - self._gun_img_w - 10, y=3)
def _set_background(self, color):
self.configure(bg=color)
self.lbl_main.configure(bg=color)
self.pb_gun.configure(bg=color)
self.pb_battery.configure(bg=color)
def _timer_update(self):
try:
now = datetime.now()
self.lbl_main.configure(
text="\n{}\n{}\nshot: {}\ntime: {}".format(
self.gun.gun_id,
self.gun.gun_mac,
self.gun.fired + self.gun.fired_overall,
g.minutes_to_string(self.gun.battery + self.gun.battery_overall)))
if self.gun.last_seen > now - timedelta(seconds=1):
if self.change_battery:
self._set_background("#ff960a")
else:
self._set_background("#14ff96")
elif self.gun.last_seen > now - timedelta(seconds=30):
secs = (now - self.gun.last_seen).total_seconds()
rg_col = int(secs / 30 * 220) + 20
self._set_background("#{:02x}{:02x}{:02x}".format(rg_col, 240, rg_col))
else:
self._set_background("#d9d9d9")
if self.gun.fired_last > now:
self.pb_gun.configure(image=self._gun_img_fired)
else:
self.pb_gun.configure(image=self._gun_img)
if self.gun.last_seen < now - timedelta(minutes=g.count_interval):
self.pb_gun.configure(image="")
if self.gun.battery + self.gun.battery_overall >= self.gun.settings_battery_life:
self.change_battery = True
if self.gun.fired + self.gun.fired_overall >= self.gun.settings_fired_max:
self.change_battery = True
if self.change_battery:
if (self.gun.battery + self.gun.battery_overall < self.gun.settings_battery_life) and \
(self.gun.fired + self.gun.fired_overall < self.gun.settings_fired_max):
self.change_battery = False
if not self.change_battery:
t_val = 100 - int((((self.gun.battery + self.gun.battery_overall) / self.gun.settings_battery_life) * 100))
s_val = 100 - int((((self.gun.fired + self.gun.fired_overall) / self.gun.settings_fired_max) * 100))
if s_val < t_val:
t_val = s_val
if t_val >= 95:
img = "100.png"
elif t_val >= 85:
img = "090.png"
elif t_val >= 75:
img = "080.png"
elif t_val >= 65:
img = "070.png"
elif t_val >= 55:
img = "060.png"
elif t_val >= 45:
img = "050.png"
elif t_val >= 35:
img = "040.png"
elif t_val >= 20:
img = "030.png"
elif t_val >= 10:
img = "020.png"
else:
img = "010.png"
self.pb_battery.configure(image=load_image(img))
finally:
self.after(250, self._timer_update)
def _timer_battery(self):
try:
if self.change_battery:
self.flash_state = not self.flash_state
if self.flash_state:
self.pb_battery.configure(image=load_image("000.png"))
else:
self.pb_battery.configure(image=load_image("010.png"))
finally:
self.after(500, self._timer_battery)