Files
Hex_Tuning_EDC15/view_parameters.py
2024-12-06 09:37:17 -08:00

89 lines
4.2 KiB
Python

import tkinter as tk
from tkinter import ttk
class ViewParametersDialog:
def __init__(self, parent, current_params=None):
self.dialog = tk.Toplevel(parent)
self.dialog.title("Parâmetros de visualização")
self.dialog.geometry("300x400")
self.dialog.resizable(False, False)
# Make it modal
self.dialog.transient(parent)
self.dialog.grab_set()
# Use current parameters if provided, otherwise use defaults
if current_params is None:
current_params = {
'first_cell': '0000F0',
'offset': 0,
'columns': 16,
'hex_view': False,
'show_diff': True,
'value_type': '8bit'
}
# Parameters
self.first_cell = tk.StringVar(value=current_params['first_cell'])
self.offset = tk.StringVar(value=str(current_params['offset']))
self.columns = tk.StringVar(value=str(current_params['columns']))
self.hex_view = tk.BooleanVar(value=current_params['hex_view'])
self.show_diff = tk.BooleanVar(value=current_params['show_diff'])
self.value_type = tk.StringVar(value=current_params['value_type'])
self.create_widgets()
def create_widgets(self):
# Primeira Célula
ttk.Label(self.dialog, text="Primeira Célula").grid(row=0, column=0, sticky='w', padx=5, pady=2)
ttk.Entry(self.dialog, textvariable=self.first_cell, width=20).grid(row=1, column=0, sticky='w', padx=5)
# Offset byte num
ttk.Label(self.dialog, text="Offset byte num").grid(row=2, column=0, sticky='w', padx=5, pady=2)
ttk.Spinbox(self.dialog, from_=0, to=1000, textvariable=self.offset, width=5).grid(row=3, column=0, sticky='w', padx=5)
# Número de colunas
ttk.Label(self.dialog, text="Número de colunas").grid(row=4, column=0, sticky='w', padx=5, pady=2)
column_spin = ttk.Spinbox(self.dialog, from_=1, to=32, textvariable=self.columns, width=5)
column_spin.grid(row=5, column=0, sticky='w', padx=5)
# Checkboxes
ttk.Checkbutton(self.dialog, text="Mostrar em hexadecimal", variable=self.hex_view).grid(row=6, column=0, sticky='w', padx=5, pady=5)
ttk.Checkbutton(self.dialog, text="Mostrar diferenças", variable=self.show_diff).grid(row=7, column=0, sticky='w', padx=5)
# Valor Frame
value_frame = ttk.LabelFrame(self.dialog, text="Valor")
value_frame.grid(row=8, column=0, sticky='nsew', padx=5, pady=5)
# Valor options
ttk.Label(value_frame, text="Valor:").grid(row=0, column=0, sticky='w', padx=5, pady=2)
ttk.Radiobutton(value_frame, text="Valor de 8 bit", variable=self.value_type, value="8bit").grid(row=1, column=0, sticky='w', padx=20)
ttk.Radiobutton(value_frame, text="Valor de 16 bit", variable=self.value_type, value="16bit").grid(row=2, column=0, sticky='w', padx=20)
ttk.Radiobutton(value_frame, text="Valor de 32 bit", variable=self.value_type, value="32bit").grid(row=3, column=0, sticky='w', padx=20)
ttk.Radiobutton(value_frame, text="Valor floating point", variable=self.value_type, value="float").grid(row=4, column=0, sticky='w', padx=20)
# Buttons
button_frame = ttk.Frame(self.dialog)
button_frame.grid(row=10, column=0, pady=10)
ttk.Button(button_frame, text="OK", command=self.ok_clicked).pack(side=tk.LEFT, padx=5)
ttk.Button(button_frame, text="Cancelar", command=self.dialog.destroy).pack(side=tk.LEFT, padx=5)
def ok_clicked(self):
# Return the parameters
self.result = {
'first_cell': self.first_cell.get(),
'offset': int(self.offset.get()),
'columns': int(self.columns.get()),
'hex_view': self.hex_view.get(),
'show_diff': self.show_diff.get(),
'value_type': self.value_type.get()
}
self.dialog.destroy()
def show(self):
# Center the dialog on parent
self.dialog.focus_set()
self.dialog.wait_window()
return getattr(self, 'result', None)