Work in progress
This commit is contained in:
178
main.py
178
main.py
@ -1,4 +1,4 @@
|
||||
import sys
|
||||
import sys, glob, json, os
|
||||
from PySide6 import QtWidgets
|
||||
from PySide6.QtWidgets import (
|
||||
QApplication,
|
||||
@ -10,10 +10,10 @@ from PySide6.QtWidgets import (
|
||||
QHBoxLayout,
|
||||
QLabel,
|
||||
QFileDialog,
|
||||
QInputDialog,
|
||||
QMessageBox,
|
||||
)
|
||||
from PySide6.QtCore import Slot
|
||||
import json
|
||||
import os
|
||||
from readdisk import ReadDiskWindow
|
||||
from ui_main_window import Ui_MainWindow
|
||||
from ui_read_disk import Ui_ReadDialog
|
||||
@ -23,7 +23,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
self.settings = {}
|
||||
self.settings = self.get_defaults()
|
||||
|
||||
# Create an instance of the UI class
|
||||
self.ui = Ui_MainWindow()
|
||||
@ -48,35 +48,183 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.logical_button_group.addButton(self.ui.rb_seek, 11)
|
||||
self.logical_button_group.addButton(self.ui.rb_delays, 12)
|
||||
self.logical_button_group.addButton(self.ui.rb_update_firmware, 13)
|
||||
self.profile = "GWUIDefault"
|
||||
|
||||
self.ui.rb_read.setChecked(True)
|
||||
|
||||
self.ui.pb_close.clicked.connect(self.close)
|
||||
# Populate combo_port with /dev/ttyACM* devices
|
||||
self.populate_serial_ports()
|
||||
self.profile = "GWUIDefault"
|
||||
|
||||
# Populate combo_profile with available profiles
|
||||
self.populate_profiles()
|
||||
self.ui.combo_profile.currentTextChanged.connect(self.on_combo_profile_changed)
|
||||
|
||||
self.load_settings(self.profile)
|
||||
|
||||
self.ui.combo_port.setCurrentText(self.settings.get("device", "Auto"))
|
||||
self.ui.combo_port.currentTextChanged.connect(self.on_combo_port_text_changed)
|
||||
|
||||
self.ui.action_quit.triggered.connect(self.close)
|
||||
self.ui.pb_close.clicked.connect(self.close)
|
||||
self.ui.pb_execute.clicked.connect(self.on_execute)
|
||||
self.ui.pb_refresh_ports.clicked.connect(self.populate_serial_ports)
|
||||
|
||||
self.ui.pb_add_profile.clicked.connect(self.on_pb_add_profile)
|
||||
self.ui.pb_delete_profile.clicked.connect(self.on_pb_delete_profile)
|
||||
|
||||
def on_combo_profile_changed(self, profile_name: str):
|
||||
if profile_name:
|
||||
self.profile = profile_name
|
||||
self.load_settings(self.profile)
|
||||
self.ui.combo_port.setCurrentText(self.settings.get("device", "Auto"))
|
||||
|
||||
def on_pb_add_profile(self):
|
||||
text, ok = QInputDialog.getText(self, "Add Profile", "Enter new profile name:")
|
||||
if ok and text:
|
||||
self.profile = text
|
||||
self.settings = self.get_defaults()
|
||||
self.save_settings(self.profile)
|
||||
self.populate_profiles()
|
||||
|
||||
self.ui.combo_profile.setCurrentText(self.profile)
|
||||
self.on_combo_profile_changed(self.profile)
|
||||
|
||||
def on_pb_delete_profile(self):
|
||||
"""Delete the currently selected profile and load the previous one, or defaults if none remain."""
|
||||
config_path = self.get_config_path(self.profile)
|
||||
try:
|
||||
if os.path.exists(config_path):
|
||||
os.remove(config_path)
|
||||
except Exception as e:
|
||||
QMessageBox.critical(self, "Error", f"Failed to delete profile: {e}")
|
||||
return
|
||||
# Refresh profile list
|
||||
self.populate_profiles()
|
||||
profiles = [self.ui.combo_profile.itemText(i) for i in range(self.ui.combo_profile.count())]
|
||||
if profiles:
|
||||
# Select the previous profile in the list, or the first if deleted was first
|
||||
idx = profiles.index(self.profile) if self.profile in profiles else 0
|
||||
if idx > 0:
|
||||
idx -= 1
|
||||
self.profile = profiles[idx]
|
||||
self.ui.combo_profile.setCurrentText(self.profile)
|
||||
self.load_settings(self.profile)
|
||||
self.ui.combo_port.setCurrentText(self.settings.get("device", "Auto"))
|
||||
else:
|
||||
# No profiles left, create default
|
||||
self.profile = "GWUIDefault"
|
||||
self.settings = self.get_defaults()
|
||||
self.save_settings(self.profile)
|
||||
self.populate_profiles()
|
||||
self.ui.combo_profile.setCurrentText(self.profile)
|
||||
self.ui.combo_port.setCurrentText(self.settings.get("device", "Auto"))
|
||||
|
||||
def on_combo_port_text_changed(self, text: str) -> None:
|
||||
self.settings["device"] = text
|
||||
self.save_settings(self.profile)
|
||||
|
||||
def get_defaults(self):
|
||||
return {
|
||||
"fileprefix": "disk-image",
|
||||
"filepath": "",
|
||||
"device": "Auto",
|
||||
"double_step_enabled": False,
|
||||
"double_step_value": "1",
|
||||
"fake_index_enabled": False,
|
||||
"fake_index_value": "300",
|
||||
"fake_index_unit": "",
|
||||
"bitrate_enabled": False,
|
||||
"bitrate_value": "250",
|
||||
"revs_enabled": False,
|
||||
"revs_value": "3",
|
||||
"drive_select_enabled": False,
|
||||
"drive_select_value": "A",
|
||||
"retries_enabled": False,
|
||||
"retriesAttributeError: 'MainWindow' object has no attribute 'profile'_value": "3",
|
||||
"pllspec_enabled": False,
|
||||
"pll_period": "",
|
||||
"pll_phase": "",
|
||||
"pll_lowpass": "",
|
||||
"head_sets_enabled": False,
|
||||
"head_sets_value": "0-1",
|
||||
"head_swap_enabled": False,
|
||||
"ss_legacy_enabled": False,
|
||||
"cylinder_sets_enabled": False,
|
||||
"cylinder_sets_value": "0-34,35-79",
|
||||
"rev_track_data_enabled": False,
|
||||
"hard_sectors_enabled": False,
|
||||
"no_clobber_enabled": False,
|
||||
"raw_enabled": False,
|
||||
"pin2_enabled": False,
|
||||
"pin2_high": False,
|
||||
"pin2_low": False,
|
||||
"flippy_enabled": False,
|
||||
"flippy_panasonic": True,
|
||||
"flippy_teac": False,
|
||||
"adjust_speed_enabled": False,
|
||||
"adjust_speed_value": "300",
|
||||
"adjust_speed_unit": "",
|
||||
"suffix_value": "",
|
||||
"inc_enabled": True,
|
||||
"format_enabled": False,
|
||||
"format_value": "",
|
||||
"disktype_value": ""
|
||||
}
|
||||
|
||||
def get_config_path(self, profile_name: str) -> str:
|
||||
"""Return the full path for a profile config file in ~/.config/gwui/"""
|
||||
config_dir = os.path.expanduser("~/.config/gwui")
|
||||
if not os.path.exists(config_dir):
|
||||
os.makedirs(config_dir, exist_ok=True)
|
||||
return os.path.join(config_dir, profile_name + ".json")
|
||||
|
||||
@Slot()
|
||||
def on_execute(self):
|
||||
read_disk_window = ReadDiskWindow()
|
||||
if self.load_settings("settings.json"):
|
||||
read_disk_window.set_settings(self.settings)
|
||||
# read_disk_window.set_port(self.ui.combo_port.currentText())
|
||||
read_disk_window.set_settings(self.settings)
|
||||
read_disk_window.exec()
|
||||
self.settings = read_disk_window.get_settings()
|
||||
self.save_settings("settings.json")
|
||||
self.settings["device"] = self.ui.combo_port.currentText()
|
||||
self.save_settings(self.profile)
|
||||
|
||||
def load_settings(self, file_name):
|
||||
if file_name:
|
||||
if os.path.exists(file_name):
|
||||
with open(file_name, 'r') as f:
|
||||
def load_settings(self, profile_name: str):
|
||||
config_path = self.get_config_path(profile_name)
|
||||
if profile_name:
|
||||
if os.path.exists(config_path):
|
||||
with open(config_path, 'r') as f:
|
||||
self.settings = json.load(f)
|
||||
return True
|
||||
return False
|
||||
|
||||
def save_settings(self, file_name):
|
||||
if file_name:
|
||||
with open(file_name, 'w') as f:
|
||||
def save_settings(self, profile_name: str):
|
||||
config_path = self.get_config_path(profile_name)
|
||||
if profile_name:
|
||||
with open(config_path, 'w') as f:
|
||||
json.dump(self.settings, f, indent=2)
|
||||
|
||||
def populate_serial_ports(self):
|
||||
"""Populate the combo_port with all /dev/ttyACM* devices."""
|
||||
ports = glob.glob('/dev/ttyACM*')
|
||||
self.ui.combo_port.clear()
|
||||
self.ui.combo_port.addItem("Auto")
|
||||
self.ui.combo_port.addItems(ports)
|
||||
|
||||
def populate_profiles(self):
|
||||
"""Populate combo_profile with all config files in ~/.config/gwui/ (minus .json)."""
|
||||
config_dir = os.path.expanduser("~/.config/gwui")
|
||||
if not os.path.exists(config_dir):
|
||||
os.makedirs(config_dir, exist_ok=True)
|
||||
profiles = []
|
||||
for fname in os.listdir(config_dir):
|
||||
if fname.endswith('.json'):
|
||||
profiles.append(fname[:-5])
|
||||
self.ui.combo_profile.clear()
|
||||
self.ui.combo_profile.addItems(sorted(profiles))
|
||||
# Optionally, set current profile
|
||||
if self.profile in profiles:
|
||||
self.ui.combo_profile.setCurrentText(self.profile)
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
|
||||
Reference in New Issue
Block a user