138 lines
5.3 KiB
Python
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)
|