# SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: LicenseRef-NvidiaProprietary # # NVIDIA CORPORATION, its affiliates and licensors retain all intellectual # property and proprietary rights in and to this material, related # documentation and any modifications thereto. Any use, reproduction, # disclosure or distribution of this material and related documentation # without an express license agreement from NVIDIA CORPORATION or # its affiliates is strictly prohibited. from math import ceil from tkinter import StringVar from tkinter.ttk import Label, LabelFrame from ...utils.common import PAttrs, PNames from ...utils.layoutmanager import fill_parent, grid_span, padding from ...utils.subjectobserver import Observer class EngineFrame(LabelFrame, Observer): def __init__(self, master=None, **kwargs): super().__init__(master, text="Engine", **kwargs) self.max_engines_per_col = 6 self.create_widgets() self.manage_layout() fill_parent(self) def create_widgets(self): self.engine_names = PNames.ENGINE_NAMES self.engine_nums = len(self.engine_names) self.engine_l = [None] * self.engine_nums self.freq_l = [None] * self.engine_nums self.freq_v = [None] * self.engine_nums self.pairs = ceil(self.engine_nums / self.max_engines_per_col) self.name_hl = [None] * self.pairs self.freq_hl = [None] * self.pairs for i in range(self.pairs): self.name_hl[i] = Label(self, text="Name") self.freq_hl[i] = Label(self, text="Freq (MHz)") for i in range(self.engine_nums): self.freq_v[i] = StringVar() self.engine_l[i] = Label(self, text=self.engine_names[i]) self.freq_l[i] = Label(self, textvariable=self.freq_v[i]) def manage_layout(self): for i in range(self.pairs): name_c = 2 * i freq_c = name_c + 1 self.name_hl[i].grid(row=0, column=name_c, **grid_span, **padding) self.freq_hl[i].grid(row=0, column=freq_c, **grid_span, **padding) for i in range(self.engine_nums): r = 1 + i % self.max_engines_per_col eng_c = (i // self.max_engines_per_col) * 2 freq_c = eng_c + 1 self.engine_l[i].grid(row=r, column=eng_c, **grid_span, **padding) self.freq_l[i].grid(row=r, column=freq_c, **grid_span, **padding) def update_data(self, data): for i in range(self.engine_nums): engine_name = self.engine_names[i] if data[(engine_name, PAttrs.STATE)]: self.freq_v[i].set(f"{data[(engine_name, PAttrs.CURR_FREQ)]} " "MHz") else: self.freq_v[i].set("offline")