89 lines
4.2 KiB
Python
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)
|