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("", lambda e: show_history(self, self.gun)) self.bind("", 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)