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)