commit 9eb9af0ec6b516b39afc8ac4909db25dce30e08a Author: Rainer Koschnick Date: Sat Jul 12 16:19:22 2025 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7d85c37 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +# Visual Studio Code +.vscode/ + +# Python +__pycache__/ +*.pyc + +# Temporary files +temp/ +call.txt diff --git a/main.py b/main.py new file mode 100644 index 0000000..6b912d5 --- /dev/null +++ b/main.py @@ -0,0 +1,64 @@ +import sys +from PySide6 import QtWidgets +from PySide6.QtWidgets import ( + QApplication, + QWidget, + QRadioButton, + QButtonGroup, + QGroupBox, + QVBoxLayout, + QHBoxLayout, + QLabel, +) +from PySide6.QtCore import Slot + +from readdisk import ReadDiskWindow +from ui_main_window import Ui_MainWindow +from ui_read_disk import Ui_ReadDialog + +# Inherit only from the Qt base class +class MainWindow(QtWidgets.QMainWindow): + def __init__(self): + super().__init__() + + # Create an instance of the UI class + self.ui = Ui_MainWindow() + # Call its setupUi method, passing in the current window (self) + self.ui.setupUi(self) + + # 1. Create the logical group. Pass `self` for parentage. + self.logical_button_group = QButtonGroup(self) + + # 2. Add all radio buttons from different containers. + # Assign a unique integer ID to each one. This is best practice. + self.logical_button_group.addButton(self.ui.rb_read, 1) + self.logical_button_group.addButton(self.ui.rb_write, 2) + self.logical_button_group.addButton(self.ui.rb_clean_heads, 3) + self.logical_button_group.addButton(self.ui.rb_erase_disk, 4) + self.logical_button_group.addButton(self.ui.rb_convert_files, 5) + self.logical_button_group.addButton(self.ui.rb_info, 6) + self.logical_button_group.addButton(self.ui.rb_measure, 7) + self.logical_button_group.addButton(self.ui.rb_pin_level, 8) + self.logical_button_group.addButton(self.ui.rb_reset, 9) + self.logical_button_group.addButton(self.ui.rb_rpm, 10) + 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.ui.rb_read.setChecked(True) + + self.ui.pb_close.clicked.connect(self.close) + self.ui.action_quit.triggered.connect(self.close) + self.ui.pb_execute.clicked.connect(self.on_execute) + + @Slot() + def on_execute(self): + read_disk_window = ReadDiskWindow() + read_disk_window.exec() + + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + window = MainWindow() + window.show() + sys.exit(app.exec()) diff --git a/readdisk.py b/readdisk.py new file mode 100644 index 0000000..590dae3 --- /dev/null +++ b/readdisk.py @@ -0,0 +1,98 @@ +import sys +from PySide6.QtWidgets import QApplication, QDialog, QButtonGroup +from PySide6.QtCore import Slot +from PySide6.QtGui import QIntValidator + +# Import the generated UI class from the ui_form.py file +from ui_read_disk import Ui_ReadDialog + +class ReadDiskWindow(QDialog): + def __init__(self, parent=None): + super().__init__(parent) + + self.ui = Ui_ReadDialog() + self.ui.setupUi(self) + + # --- Set up Logical Button Groups --- + self.flippy_type_group = QButtonGroup(self) + self.flippy_type_group.addButton(self.ui.rb_panasonic, 1) + self.flippy_type_group.addButton(self.ui.rb_teac, 2) + + self.pin2_setting_group = QButtonGroup(self) + self.pin2_setting_group.addButton(self.ui.rb_pin2_high, 1) + self.pin2_setting_group.addButton(self.ui.rb_pin2_low, 2) + + # --- Connect Signals to Slots --- + self.ui.cb_fake_index.toggled.connect(self.on_fake_index_toggled) + self.on_fake_index_toggled(self.ui.cb_fake_index.isChecked()) + + self.ui.le_double_step.setValidator(QIntValidator(0, 9)) + self.ui.le_revs.setValidator(QIntValidator(0, 999999)) + self.ui.le_bitrate.setValidator(QIntValidator(0, 999999)) + self.ui.le_retries.setValidator(QIntValidator(0, 999999)) + self.ui.le_fake_index.setValidator(QIntValidator(0, 999999)) + self.ui.le_period.setValidator(QIntValidator(0, 999999)) + self.ui.le_phase.setValidator(QIntValidator(0, 999999)) + + # --- Connect Buttons to Dialog's Built-in Slots --- + # The "Launch" button will "accept" the dialog (like OK) + # The "Back" button will "reject" the dialog (like Cancel) + self.ui.btn_launch.clicked.connect(self.on_launch) + self.ui.btn_back.clicked.connect(self.reject) + + @Slot(bool) + def on_fake_index_toggled(self, checked): + """Enables or disables the Fake Index widgets.""" + self.ui.le_fake_index.setEnabled(checked) + self.ui.combo_fake_index.setEnabled(checked) + + @Slot() + def on_launch(self): + filename = "my_disk" + tracks = "" + + if self.ui.cb_double_step.isChecked(): + tracks = "step=" + self.ui.le_double_step.text() + + if self.ui.cb_revs.isChecked(): + revs = " --revs=" + self.ui.le_revs.text() + + if self.ui.cb_drive_select.isChecked(): + drive = " --drive=" + self.ui.combo_drive_select.currentText() + + if self.ui.cb_bitrate.isChecked(): + bitrate = "bitrate=" + self.ui.le_bitrate.text() + + if self.ui.cb_retries.isChecked(): + retries = " --retries=" + self.ui.le_retries.text() + + if self.ui.cb_fake_index.isChecked(): + fake_index = " --fake-index=" + self.ui.le_fake_index.text() + self.ui.combo_fake_index.currentText() + + if self.ui.cb_pllspec.isChecked(): + pll = " --pll=period=" + self.ui.le_period.text() + ":phase=" + self.ui.le_phase.text() + + if tracks != "": + tracks = " --tracks=" + tracks + + if bitrate != "": + filename = filename + "::" + bitrate + + command = "gw read " + tracks + revs + drive + fake_index + pll + retries + ' "' + filename + '"' + + self.ui.te_command_line.setPlainText(command) + + def get_settings(self): + """ + A helper method to gather all settings from the UI into a dictionary. + This is a clean way to pass the data out of the dialog. + """ + settings = { + "filename": self.ui.le_filename.text(), + "double_step_enabled": self.ui.cb_double_step.isChecked(), + "double_step_value": self.ui.le_double_step.text(), + "fake_index_enabled": self.ui.cb_fake_index.isChecked(), + "fake_index_value": self.ui.le_fake_index.text(), + # Add all other settings here... + } + return settings \ No newline at end of file diff --git a/screenshots/Main.png b/screenshots/Main.png new file mode 100644 index 0000000..e85ead5 Binary files /dev/null and b/screenshots/Main.png differ diff --git a/screenshots/read.png b/screenshots/read.png new file mode 100644 index 0000000..0def10b Binary files /dev/null and b/screenshots/read.png differ diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui new file mode 100644 index 0000000..bb9ffbe --- /dev/null +++ b/ui/mainwindow.ui @@ -0,0 +1,284 @@ + + + MainWindow + + + + 0 + 0 + 543 + 544 + + + + + 0 + 0 + + + + GreaseWeazle UI + + + + + 0 + 0 + + + + + + + + 0 + 0 + + + + Action + + + + + + + 0 + 0 + + + + + 6 + + + + + Read from Disk + + + + + + + Write to Disk + + + + + + + Clean Heads + + + + + + + Erase Disk + + + + + + + Convert Files + + + + + + + + + + + 0 + 0 + + + + + + + Info on Setup + + + + + + + Measure Bandwidth + + + + + + + Pin Level + + + + + + + Reset Device + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Preferred + + + + 20 + 20 + + + + + + + + + + + + 0 + 0 + + + + + + + RPM of Spindle + + + + + + + Seek Cylinder + + + + + + + Set Delays + + + + + + + Update Firmware + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Preferred + + + + 20 + 20 + + + + + + + + + + + + + + + 0 + 0 + + + + USB Serial Ports + + + + + + QListView::ResizeMode::Adjust + + + + + + + Refresh + + + + + + + + + + + + + Execute + + + + + + + Close + + + + + + + + + + + + 0 + 0 + 543 + 21 + + + + + File + + + + + + + + + Quit + + + + + + diff --git a/ui/make_uis.sh b/ui/make_uis.sh new file mode 100755 index 0000000..ea37b75 --- /dev/null +++ b/ui/make_uis.sh @@ -0,0 +1,5 @@ +#!/bin/sh +pyside6-uic mainwindow.ui -o ui_main_window.py +pyside6-uic readdisk.ui -o ui_read_disk.py +mv *.py .. + diff --git a/ui/readdisk (copy).ui b/ui/readdisk (copy).ui new file mode 100644 index 0000000..d384820 --- /dev/null +++ b/ui/readdisk (copy).ui @@ -0,0 +1,659 @@ + + + ReadDialog + + + + 0 + 0 + 660 + 622 + + + + Read From Disk + + + true + + + + + + + + + + + + + + Revisions + + + + + + + + + false + + + Fake index pulses at SPEED + + + 300 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + rpm + + + + + ms + + + + + us + + + + + ns + + + + + scp + + + + + + + + + + + + Period + + + + + + + Period adjustment as percentage of phase error + + + 5 + + + + + + + Phase: + + + + + + + Phase adjustment as percentage of phase error + + + 60 + + + + + + + + + Number of revolutions to read per track + + + 3 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + Fake Index + + + + + + + + + Lowpass + + + + + + + Filter flux periods shorter than USEC + + + + + + + + + Number of retries per seek-retry + + + 3 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + Drive select + + + + + + + PLLSPEC + + + + + + + Retries + + + + + + + + + High + + + true + + + + + + + Low + + + + + + + + + Drive to read + + + + A + + + + + B + + + + + 0 + + + + + 1 + + + + + 2 + + + + + + + + HFE kbit/s + + + Bitrate + + + + + + + HFE kbit/s + + + 250 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + Head steps + + + + + + + false + + + Head steps between cylinders + + + 1 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + + + + + + Head sets + + + + + + + Head Swap + + + + + + + SS Legacy + + + + + + + Cylinder sets + + + + + + + 0-1 + + + + + + + Rev Track Data + + + + + + + Hard Sectors + + + + + + + 0-34,35-79 + + + + + + + No Clobber + + + + + + + Raw + + + + + + + + + + + + 5.25 Set Pin 2 + + + + + + + + + Flippy offset + + + + + + + Panasonic + + + true + + + + + + + Teac + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Adjust-Speed + + + + + + + 300 + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 10 + + + + + + + + + + + + + + + + + + + Suffix: + + + + + + + DiskType: + + + + + + + + + + Format: + + + + + + + + + + + + >>>> + + + + + + + <<<< + + + + + + + + + Inc++ + + + + + + + mydisk.scp + + + + + + + Filename: + + + + + + + + UNSPECIFIED FORMAT + + + + + + + + + + + Command Line + + + + + + gw.exe read --device=COM3 "C:\Users\Rainer\Downloads\GreaseweazleGUI-v2.127\mydisk.scp" + + + + + + + + + + + + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Fira Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Segoe UI'; font-size:9pt;">Using CMD Console mode</span></p></body></html> + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Select Folder + + + + + + + Select File + + + + + + + Launch + + + + + + + Back + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + diff --git a/ui/readdisk.ui b/ui/readdisk.ui new file mode 100644 index 0000000..3a7965a --- /dev/null +++ b/ui/readdisk.ui @@ -0,0 +1,656 @@ + + + ReadDialog + + + + 0 + 0 + 685 + 652 + + + + Read From Disk + + + true + + + + + + + + + + + + + + Fake Index + + + + + + + HFE kbit/s + + + Bitrate + + + + + + + Head steps + + + + + + + Revisions + + + + + + + Drive to read + + + + A + + + + + B + + + + + 0 + + + + + 1 + + + + + 2 + + + + + + + + + + false + + + Fake index pulses at SPEED + + + 300 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + rpm + + + + + ms + + + + + us + + + + + ns + + + + + scp + + + + + + + + + + + + Lowpass + + + + + + + Filter flux periods shorter than USEC + + + + + + + + + Drive select + + + + + + + + + Period + + + + + + + Period adjustment as percentage of phase error + + + 5 + + + + + + + Phase: + + + + + + + Phase adjustment as percentage of phase error + + + 60 + + + + + + + + + HFE kbit/s + + + 250 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + PLLSPEC + + + + + + + Number of revolutions to read per track + + + 3 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + Head steps between cylinders + + + 1 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + Retries + + + + + + + Number of retries per seek-retry + + + 3 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + + + + + + Head sets + + + + + + + Head Swap + + + + + + + SS Legacy + + + + + + + Cylinder sets + + + + + + + 0-1 + + + + + + + Rev Track Data + + + + + + + Hard Sectors + + + + + + + 0-34,35-79 + + + + + + + No Clobber + + + + + + + Raw + + + + + + + 5.25 Set Pin 2 + + + + + + + + + High + + + false + + + + + + + Low + + + + + + + + + Flippy offset + + + + + + + + + Panasonic + + + true + + + + + + + Teac + + + + + + + + + Adjust-Speed + + + + + + + + + 300 + + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 10 + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + Suffix: + + + + + + + DiskType: + + + + + + + + + + Format: + + + + + + + + + + + + >>>> + + + + + + + <<<< + + + + + + + + + Inc++ + + + + + + + mydisk.scp + + + + + + + Filename: + + + + + + + + UNSPECIFIED FORMAT + + + + + + + + + + + Command Line + + + + + + gw.exe read --device=COM3 "C:\Users\Rainer\Downloads\GreaseweazleGUI-v2.127\mydisk.scp" + + + + + + + + + + + + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Fira Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Segoe UI'; font-size:9pt;">Using CMD Console mode</span></p></body></html> + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Select Folder + + + + + + + Select File + + + + + + + Launch + + + + + + + Back + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + diff --git a/ui/readdisk.ui.1 b/ui/readdisk.ui.1 new file mode 100644 index 0000000..2b3c7c3 --- /dev/null +++ b/ui/readdisk.ui.1 @@ -0,0 +1,548 @@ + + + Form + + + + 0 + 0 + 660 + 622 + + + + Read From Disk + + + + + + + + + + + + + + Fake Index + + + + + + + + + 300 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + + + + Retries + + + + + + + Double-Step [0-9] + + + + + + + Revs to read per track + + + + + + + 250 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 2 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + A + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Bitrate (HFE kbit/s) + + + + + + + 3 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + PLLSPEC Period: + + + + + + + No Clobber + + + + + + + F7 Drive Select (AB012) + + + + + + + 3 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 5.25 Set Pin 2 + + + + + + + Raw + + + + + + + + + High + + + true + + + + + + + Low + + + + + + + + + + + 5 + + + + + + + Phase: + + + + + + + 60 + + + + + + + + + + + + + + + + + + + + Head sets + + + + + + + Head Swap + + + + + + + SS Legacy + + + + + + + 0-34,35-79 + + + + + + + Cylinder sets + + + + + + + 0-1 + + + + + + + Rev Track Data + + + + + + + Hard Sectors + + + + + + + + + + + Flippy offset + + + + + + + Panasonic + + + true + + + + + + + Teac + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Adjust-Speed + + + + + + + 300 + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 10 + + + + + + + + + + + + + + + + + + + Suffix: + + + + + + + DiskType: + + + + + + + + + + Format: + + + + + + + + + + + + >>>> + + + + + + + <<<< + + + + + + + + + Inc++ + + + + + + + mydisk.scp + + + + + + + Filename: + + + + + + + + UNSPECIFIED FORMAT + + + + + + + + + + + Command Line + + + + + + gw.exe read --device=COM3 "C:\Users\Rainer\Downloads\GreaseweazleGUI-v2.127\mydisk.scp" + + + true + + + + + + + + + + + + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Fira Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Segoe UI'; font-size:9pt;">Using CMD Console mode</span></p></body></html> + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Select Folder + + + + + + + Select File + + + + + + + Launch + + + + + + + Back + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + diff --git a/ui/readdisk.ui.ok b/ui/readdisk.ui.ok new file mode 100644 index 0000000..8d5017b --- /dev/null +++ b/ui/readdisk.ui.ok @@ -0,0 +1,658 @@ + + + ReadDialog + + + + 0 + 0 + 660 + 652 + + + + Read From Disk + + + true + + + + + + + + + + + + + + Fake Index + + + + + + + HFE kbit/s + + + Bitrate + + + + + + + Head steps + + + + + + + Revisions + + + + + + + Drive to read + + + + A + + + + + B + + + + + 0 + + + + + 1 + + + + + 2 + + + + + + + + + + false + + + Fake index pulses at SPEED + + + 300 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + rpm + + + + + ms + + + + + us + + + + + ns + + + + + scp + + + + + + + + + + + + Lowpass + + + + + + + Filter flux periods shorter than USEC + + + + + + + + + Drive select + + + + + + + + + Period + + + + + + + Period adjustment as percentage of phase error + + + 5 + + + + + + + Phase: + + + + + + + Phase adjustment as percentage of phase error + + + 60 + + + + + + + + + HFE kbit/s + + + 250 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + PLLSPEC + + + + + + + Number of revolutions to read per track + + + 3 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + false + + + Head steps between cylinders + + + 1 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + Retries + + + + + + + Number of retries per seek-retry + + + 3 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + + + + + + + + + + + + Head sets + + + + + + + Head Swap + + + + + + + SS Legacy + + + + + + + Cylinder sets + + + + + + + 0-1 + + + + + + + Rev Track Data + + + + + + + Hard Sectors + + + + + + + 0-34,35-79 + + + + + + + No Clobber + + + + + + + Raw + + + + + + + + + + + 5.25 Set Pin 2 + + + + + + + High + + + true + + + + + + + Low + + + + + + + + Flippy offset + + + + + + + Panasonic + + + true + + + + + + + Teac + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Adjust-Speed + + + + + + + 300 + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 10 + + + + + + + + + + + + + + + + + + + Suffix: + + + + + + + DiskType: + + + + + + + + + + Format: + + + + + + + + + + + + >>>> + + + + + + + <<<< + + + + + + + + + Inc++ + + + + + + + mydisk.scp + + + + + + + Filename: + + + + + + + + UNSPECIFIED FORMAT + + + + + + + + + + + Command Line + + + + + + gw.exe read --device=COM3 "C:\Users\Rainer\Downloads\GreaseweazleGUI-v2.127\mydisk.scp" + + + + + + + + + + + + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Fira Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Segoe UI'; font-size:9pt;">Using CMD Console mode</span></p></body></html> + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Select Folder + + + + + + + Select File + + + + + + + Launch + + + + + + + Back + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + diff --git a/ui/readdiskv2.ui b/ui/readdiskv2.ui new file mode 100644 index 0000000..4934a64 --- /dev/null +++ b/ui/readdiskv2.ui @@ -0,0 +1,561 @@ + + + ReadDialog + + + + 0 + 0 + 660 + 622 + + + + Read From Disk + + + true + + + + + + + + + + + + + + Fake Index + + + + + + + + + 300 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + + + + + Retries + + + + + + + Double-Step [0-9] + + + + + + + Revs to read per track + + + + + + + 250 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 2 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + A + + + Qt::AlignmentFlag::AlignCenter + + + + + + + Bitrate (HFE kbit/s) + + + + + + + 3 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + PLLSPEC Period: + + + + + + + No Clobber + + + + + + + F7 Drive Select (AB012) + + + + + + + 3 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 5.25 Set Pin 2 + + + + + + + Raw + + + + + + + + + High + + + true + + + + + + + Low + + + + + + + + + + + 5 + + + + + + + Phase: + + + + + + + 60 + + + + + + + + + + + + + + + + + + + + Head sets + + + + + + + Head Swap + + + + + + + SS Legacy + + + + + + + 0-34,35-79 + + + + + + + Cylinder sets + + + + + + + 0-1 + + + + + + + Rev Track Data + + + + + + + Hard Sectors + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 10 + + + + + + + + + + Flippy offset + + + + + + + Panasonic + + + true + + + + + + + Teac + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 10 + + + + + + + + + + Adjust-Speed + + + + + + + 300 + + + + + + + + + + + + + + + + + + + + + + + Suffix: + + + + + + + DiskType: + + + + + + + + + + Format: + + + + + + + + + + + + >>>> + + + + + + + <<<< + + + + + + + + + Inc++ + + + + + + + mydisk.scp + + + + + + + Filename: + + + + + + + + UNSPECIFIED FORMAT + + + + + + + + + + + Command Line + + + + + + gw.exe read --device=COM3 "C:\Users\Rainer\Downloads\GreaseweazleGUI-v2.127\mydisk.scp" + + + + + + + + + + + + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Fira Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Segoe UI'; font-size:9pt;">Using CMD Console mode</span></p></body></html> + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Select Folder + + + + + + + Select File + + + + + + + Launch + + + + + + + Back + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + diff --git a/ui_main_window.py b/ui_main_window.py new file mode 100644 index 0000000..aa6ffc2 --- /dev/null +++ b/ui_main_window.py @@ -0,0 +1,238 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'mainwindow.ui' +## +## Created by: Qt User Interface Compiler version 6.9.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient, + QCursor, QFont, QFontDatabase, QGradient, + QIcon, QImage, QKeySequence, QLinearGradient, + QPainter, QPalette, QPixmap, QRadialGradient, + QTransform) +from PySide6.QtWidgets import (QApplication, QGroupBox, QHBoxLayout, QListView, + QMainWindow, QMenu, QMenuBar, QPushButton, + QRadioButton, QSizePolicy, QSpacerItem, QStatusBar, + QVBoxLayout, QWidget) + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + MainWindow.resize(543, 544) + sizePolicy = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) + MainWindow.setSizePolicy(sizePolicy) + self.action_quit = QAction(MainWindow) + self.action_quit.setObjectName(u"action_quit") + self.central_widget = QWidget(MainWindow) + self.central_widget.setObjectName(u"central_widget") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.central_widget.sizePolicy().hasHeightForWidth()) + self.central_widget.setSizePolicy(sizePolicy1) + self.verticalLayout_4 = QVBoxLayout(self.central_widget) + self.verticalLayout_4.setObjectName(u"verticalLayout_4") + self.gb_actions = QGroupBox(self.central_widget) + self.gb_actions.setObjectName(u"gb_actions") + sizePolicy1.setHeightForWidth(self.gb_actions.sizePolicy().hasHeightForWidth()) + self.gb_actions.setSizePolicy(sizePolicy1) + self.horizontalLayout = QHBoxLayout(self.gb_actions) + self.horizontalLayout.setObjectName(u"horizontalLayout") + self.widget_left = QWidget(self.gb_actions) + self.widget_left.setObjectName(u"widget_left") + sizePolicy1.setHeightForWidth(self.widget_left.sizePolicy().hasHeightForWidth()) + self.widget_left.setSizePolicy(sizePolicy1) + self.verticalLayout = QVBoxLayout(self.widget_left) + self.verticalLayout.setSpacing(6) + self.verticalLayout.setObjectName(u"verticalLayout") + self.rb_read = QRadioButton(self.widget_left) + self.rb_read.setObjectName(u"rb_read") + + self.verticalLayout.addWidget(self.rb_read) + + self.rb_write = QRadioButton(self.widget_left) + self.rb_write.setObjectName(u"rb_write") + + self.verticalLayout.addWidget(self.rb_write) + + self.rb_clean_heads = QRadioButton(self.widget_left) + self.rb_clean_heads.setObjectName(u"rb_clean_heads") + + self.verticalLayout.addWidget(self.rb_clean_heads) + + self.rb_erase_disk = QRadioButton(self.widget_left) + self.rb_erase_disk.setObjectName(u"rb_erase_disk") + + self.verticalLayout.addWidget(self.rb_erase_disk) + + self.rb_convert_files = QRadioButton(self.widget_left) + self.rb_convert_files.setObjectName(u"rb_convert_files") + + self.verticalLayout.addWidget(self.rb_convert_files) + + + self.horizontalLayout.addWidget(self.widget_left) + + self.widget_middle = QWidget(self.gb_actions) + self.widget_middle.setObjectName(u"widget_middle") + sizePolicy1.setHeightForWidth(self.widget_middle.sizePolicy().hasHeightForWidth()) + self.widget_middle.setSizePolicy(sizePolicy1) + self.verticalLayout_2 = QVBoxLayout(self.widget_middle) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.rb_info = QRadioButton(self.widget_middle) + self.rb_info.setObjectName(u"rb_info") + + self.verticalLayout_2.addWidget(self.rb_info) + + self.rb_measure = QRadioButton(self.widget_middle) + self.rb_measure.setObjectName(u"rb_measure") + + self.verticalLayout_2.addWidget(self.rb_measure) + + self.rb_pin_level = QRadioButton(self.widget_middle) + self.rb_pin_level.setObjectName(u"rb_pin_level") + + self.verticalLayout_2.addWidget(self.rb_pin_level) + + self.rb_reset = QRadioButton(self.widget_middle) + self.rb_reset.setObjectName(u"rb_reset") + + self.verticalLayout_2.addWidget(self.rb_reset) + + self.vertical_spacer = QSpacerItem(20, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Preferred) + + self.verticalLayout_2.addItem(self.vertical_spacer) + + + self.horizontalLayout.addWidget(self.widget_middle) + + self.widget_right = QWidget(self.gb_actions) + self.widget_right.setObjectName(u"widget_right") + sizePolicy1.setHeightForWidth(self.widget_right.sizePolicy().hasHeightForWidth()) + self.widget_right.setSizePolicy(sizePolicy1) + self.verticalLayout_3 = QVBoxLayout(self.widget_right) + self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.rb_rpm = QRadioButton(self.widget_right) + self.rb_rpm.setObjectName(u"rb_rpm") + + self.verticalLayout_3.addWidget(self.rb_rpm) + + self.rb_seek = QRadioButton(self.widget_right) + self.rb_seek.setObjectName(u"rb_seek") + + self.verticalLayout_3.addWidget(self.rb_seek) + + self.rb_delays = QRadioButton(self.widget_right) + self.rb_delays.setObjectName(u"rb_delays") + + self.verticalLayout_3.addWidget(self.rb_delays) + + self.rb_update_firmware = QRadioButton(self.widget_right) + self.rb_update_firmware.setObjectName(u"rb_update_firmware") + + self.verticalLayout_3.addWidget(self.rb_update_firmware) + + self.vertical_spacer_2 = QSpacerItem(20, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Preferred) + + self.verticalLayout_3.addItem(self.vertical_spacer_2) + + + self.horizontalLayout.addWidget(self.widget_right) + + + self.verticalLayout_4.addWidget(self.gb_actions) + + self.gb_serial = QGroupBox(self.central_widget) + self.gb_serial.setObjectName(u"gb_serial") + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.gb_serial.sizePolicy().hasHeightForWidth()) + self.gb_serial.setSizePolicy(sizePolicy2) + self.horizontalLayout_2 = QHBoxLayout(self.gb_serial) + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.list_view = QListView(self.gb_serial) + self.list_view.setObjectName(u"list_view") + self.list_view.setResizeMode(QListView.ResizeMode.Adjust) + + self.horizontalLayout_2.addWidget(self.list_view) + + self.pb_refresh_ports = QPushButton(self.gb_serial) + self.pb_refresh_ports.setObjectName(u"pb_refresh_ports") + + self.horizontalLayout_2.addWidget(self.pb_refresh_ports) + + self.horizontalLayout_2.setStretch(0, 1) + + self.verticalLayout_4.addWidget(self.gb_serial) + + self.widget = QWidget(self.central_widget) + self.widget.setObjectName(u"widget") + self.horizontalLayout_3 = QHBoxLayout(self.widget) + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.pb_execute = QPushButton(self.widget) + self.pb_execute.setObjectName(u"pb_execute") + + self.horizontalLayout_3.addWidget(self.pb_execute) + + self.pb_close = QPushButton(self.widget) + self.pb_close.setObjectName(u"pb_close") + + self.horizontalLayout_3.addWidget(self.pb_close) + + + self.verticalLayout_4.addWidget(self.widget) + + MainWindow.setCentralWidget(self.central_widget) + self.menu_bar = QMenuBar(MainWindow) + self.menu_bar.setObjectName(u"menu_bar") + self.menu_bar.setGeometry(QRect(0, 0, 543, 21)) + self.menu_file = QMenu(self.menu_bar) + self.menu_file.setObjectName(u"menu_file") + MainWindow.setMenuBar(self.menu_bar) + self.status_bar = QStatusBar(MainWindow) + self.status_bar.setObjectName(u"status_bar") + MainWindow.setStatusBar(self.status_bar) + + self.menu_bar.addAction(self.menu_file.menuAction()) + self.menu_file.addAction(self.action_quit) + + self.retranslateUi(MainWindow) + + QMetaObject.connectSlotsByName(MainWindow) + # setupUi + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"GreaseWeazle UI", None)) + self.action_quit.setText(QCoreApplication.translate("MainWindow", u"Quit", None)) + self.gb_actions.setTitle(QCoreApplication.translate("MainWindow", u"Action", None)) + self.rb_read.setText(QCoreApplication.translate("MainWindow", u"Read from Disk", None)) + self.rb_write.setText(QCoreApplication.translate("MainWindow", u"Write to Disk", None)) + self.rb_clean_heads.setText(QCoreApplication.translate("MainWindow", u"Clean Heads", None)) + self.rb_erase_disk.setText(QCoreApplication.translate("MainWindow", u"Erase Disk", None)) + self.rb_convert_files.setText(QCoreApplication.translate("MainWindow", u"Convert Files", None)) + self.rb_info.setText(QCoreApplication.translate("MainWindow", u"Info on Setup", None)) + self.rb_measure.setText(QCoreApplication.translate("MainWindow", u"Measure Bandwidth", None)) + self.rb_pin_level.setText(QCoreApplication.translate("MainWindow", u"Pin Level", None)) + self.rb_reset.setText(QCoreApplication.translate("MainWindow", u"Reset Device", None)) + self.rb_rpm.setText(QCoreApplication.translate("MainWindow", u"RPM of Spindle", None)) + self.rb_seek.setText(QCoreApplication.translate("MainWindow", u"Seek Cylinder", None)) + self.rb_delays.setText(QCoreApplication.translate("MainWindow", u"Set Delays", None)) + self.rb_update_firmware.setText(QCoreApplication.translate("MainWindow", u"Update Firmware", None)) + self.gb_serial.setTitle(QCoreApplication.translate("MainWindow", u"USB Serial Ports", None)) + self.pb_refresh_ports.setText(QCoreApplication.translate("MainWindow", u"Refresh", None)) + self.pb_execute.setText(QCoreApplication.translate("MainWindow", u"Execute", None)) + self.pb_close.setText(QCoreApplication.translate("MainWindow", u"Close", None)) + self.menu_file.setTitle(QCoreApplication.translate("MainWindow", u"File", None)) + # retranslateUi + diff --git a/ui_read_disk.py b/ui_read_disk.py new file mode 100644 index 0000000..dd0c231 --- /dev/null +++ b/ui_read_disk.py @@ -0,0 +1,550 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'readdisk.ui' +## +## Created by: Qt User Interface Compiler version 6.9.1 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QDialog, + QGridLayout, QGroupBox, QHBoxLayout, QLabel, + QLineEdit, QPlainTextEdit, QPushButton, QRadioButton, + QSizePolicy, QSpacerItem, QTextEdit, QVBoxLayout, + QWidget) + +class Ui_ReadDialog(object): + def setupUi(self, ReadDialog): + if not ReadDialog.objectName(): + ReadDialog.setObjectName(u"ReadDialog") + ReadDialog.resize(660, 652) + ReadDialog.setModal(True) + self.verticalLayout_5 = QVBoxLayout(ReadDialog) + self.verticalLayout_5.setObjectName(u"verticalLayout_5") + self.horizontalLayout_3 = QHBoxLayout() + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.groupBox_2 = QGroupBox(ReadDialog) + self.groupBox_2.setObjectName(u"groupBox_2") + self.gridLayout_2 = QGridLayout(self.groupBox_2) + self.gridLayout_2.setObjectName(u"gridLayout_2") + self.cb_fake_index = QCheckBox(self.groupBox_2) + self.cb_fake_index.setObjectName(u"cb_fake_index") + + self.gridLayout_2.addWidget(self.cb_fake_index, 5, 0, 1, 1) + + self.cb_bitrate = QCheckBox(self.groupBox_2) + self.cb_bitrate.setObjectName(u"cb_bitrate") + + self.gridLayout_2.addWidget(self.cb_bitrate, 3, 0, 1, 1) + + self.cb_double_step = QCheckBox(self.groupBox_2) + self.cb_double_step.setObjectName(u"cb_double_step") + + self.gridLayout_2.addWidget(self.cb_double_step, 0, 0, 1, 1) + + self.cb_revs = QCheckBox(self.groupBox_2) + self.cb_revs.setObjectName(u"cb_revs") + + self.gridLayout_2.addWidget(self.cb_revs, 1, 0, 1, 1) + + self.combo_drive_select = QComboBox(self.groupBox_2) + self.combo_drive_select.addItem("") + self.combo_drive_select.addItem("") + self.combo_drive_select.addItem("") + self.combo_drive_select.addItem("") + self.combo_drive_select.addItem("") + self.combo_drive_select.setObjectName(u"combo_drive_select") + + self.gridLayout_2.addWidget(self.combo_drive_select, 2, 1, 1, 1) + + self.horizontalLayout_8 = QHBoxLayout() + self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") + self.le_fake_index = QLineEdit(self.groupBox_2) + self.le_fake_index.setObjectName(u"le_fake_index") + self.le_fake_index.setAcceptDrops(False) + self.le_fake_index.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) + + self.horizontalLayout_8.addWidget(self.le_fake_index) + + self.combo_fake_index = QComboBox(self.groupBox_2) + self.combo_fake_index.addItem("") + self.combo_fake_index.addItem("") + self.combo_fake_index.addItem("") + self.combo_fake_index.addItem("") + self.combo_fake_index.addItem("") + self.combo_fake_index.addItem("") + self.combo_fake_index.setObjectName(u"combo_fake_index") + + self.horizontalLayout_8.addWidget(self.combo_fake_index) + + + self.gridLayout_2.addLayout(self.horizontalLayout_8, 5, 1, 1, 1) + + self.horizontalLayout_9 = QHBoxLayout() + self.horizontalLayout_9.setObjectName(u"horizontalLayout_9") + self.label_6 = QLabel(self.groupBox_2) + self.label_6.setObjectName(u"label_6") + + self.horizontalLayout_9.addWidget(self.label_6) + + self.le_lowpass = QLineEdit(self.groupBox_2) + self.le_lowpass.setObjectName(u"le_lowpass") + + self.horizontalLayout_9.addWidget(self.le_lowpass) + + + self.gridLayout_2.addLayout(self.horizontalLayout_9, 7, 1, 1, 1) + + self.cb_drive_select = QCheckBox(self.groupBox_2) + self.cb_drive_select.setObjectName(u"cb_drive_select") + + self.gridLayout_2.addWidget(self.cb_drive_select, 2, 0, 1, 1) + + self.horizontalLayout_2 = QHBoxLayout() + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.label_5 = QLabel(self.groupBox_2) + self.label_5.setObjectName(u"label_5") + + self.horizontalLayout_2.addWidget(self.label_5) + + self.le_period = QLineEdit(self.groupBox_2) + self.le_period.setObjectName(u"le_period") + + self.horizontalLayout_2.addWidget(self.le_period) + + self.label = QLabel(self.groupBox_2) + self.label.setObjectName(u"label") + + self.horizontalLayout_2.addWidget(self.label) + + self.le_phase = QLineEdit(self.groupBox_2) + self.le_phase.setObjectName(u"le_phase") + + self.horizontalLayout_2.addWidget(self.le_phase) + + + self.gridLayout_2.addLayout(self.horizontalLayout_2, 6, 1, 1, 1) + + self.le_bitrate = QLineEdit(self.groupBox_2) + self.le_bitrate.setObjectName(u"le_bitrate") + self.le_bitrate.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) + + self.gridLayout_2.addWidget(self.le_bitrate, 3, 1, 1, 1) + + self.cb_pllspec = QCheckBox(self.groupBox_2) + self.cb_pllspec.setObjectName(u"cb_pllspec") + + self.gridLayout_2.addWidget(self.cb_pllspec, 6, 0, 1, 1) + + self.le_revs = QLineEdit(self.groupBox_2) + self.le_revs.setObjectName(u"le_revs") + self.le_revs.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) + + self.gridLayout_2.addWidget(self.le_revs, 1, 1, 1, 1) + + self.le_double_step = QLineEdit(self.groupBox_2) + self.le_double_step.setObjectName(u"le_double_step") + self.le_double_step.setAcceptDrops(False) + self.le_double_step.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) + + self.gridLayout_2.addWidget(self.le_double_step, 0, 1, 1, 1) + + self.cb_retries = QCheckBox(self.groupBox_2) + self.cb_retries.setObjectName(u"cb_retries") + + self.gridLayout_2.addWidget(self.cb_retries, 4, 0, 1, 1) + + self.le_retries = QLineEdit(self.groupBox_2) + self.le_retries.setObjectName(u"le_retries") + self.le_retries.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) + + self.gridLayout_2.addWidget(self.le_retries, 4, 1, 1, 1) + + + self.horizontalLayout_3.addWidget(self.groupBox_2) + + self.groupBox_3 = QGroupBox(ReadDialog) + self.groupBox_3.setObjectName(u"groupBox_3") + self.verticalLayout_2 = QVBoxLayout(self.groupBox_3) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.gridLayout_3 = QGridLayout() + self.gridLayout_3.setObjectName(u"gridLayout_3") + self.cb_head_sets = QCheckBox(self.groupBox_3) + self.cb_head_sets.setObjectName(u"cb_head_sets") + + self.gridLayout_3.addWidget(self.cb_head_sets, 1, 0, 1, 1) + + self.cb_head_swap = QCheckBox(self.groupBox_3) + self.cb_head_swap.setObjectName(u"cb_head_swap") + + self.gridLayout_3.addWidget(self.cb_head_swap, 2, 0, 1, 1) + + self.cb_ss_legacy = QCheckBox(self.groupBox_3) + self.cb_ss_legacy.setObjectName(u"cb_ss_legacy") + + self.gridLayout_3.addWidget(self.cb_ss_legacy, 2, 1, 1, 1) + + self.cb_cylinder_sets = QCheckBox(self.groupBox_3) + self.cb_cylinder_sets.setObjectName(u"cb_cylinder_sets") + + self.gridLayout_3.addWidget(self.cb_cylinder_sets, 0, 0, 1, 1) + + self.le_head_sets = QLineEdit(self.groupBox_3) + self.le_head_sets.setObjectName(u"le_head_sets") + + self.gridLayout_3.addWidget(self.le_head_sets, 1, 1, 1, 1) + + self.cb_rev_track_data = QCheckBox(self.groupBox_3) + self.cb_rev_track_data.setObjectName(u"cb_rev_track_data") + + self.gridLayout_3.addWidget(self.cb_rev_track_data, 3, 0, 1, 1) + + self.cb_hard_sectors = QCheckBox(self.groupBox_3) + self.cb_hard_sectors.setObjectName(u"cb_hard_sectors") + + self.gridLayout_3.addWidget(self.cb_hard_sectors, 3, 1, 1, 1) + + self.le_cylinder_sets = QLineEdit(self.groupBox_3) + self.le_cylinder_sets.setObjectName(u"le_cylinder_sets") + + self.gridLayout_3.addWidget(self.le_cylinder_sets, 0, 1, 1, 1) + + self.cb_no_clobber = QCheckBox(self.groupBox_3) + self.cb_no_clobber.setObjectName(u"cb_no_clobber") + + self.gridLayout_3.addWidget(self.cb_no_clobber, 4, 0, 1, 1) + + self.cb_raw = QCheckBox(self.groupBox_3) + self.cb_raw.setObjectName(u"cb_raw") + + self.gridLayout_3.addWidget(self.cb_raw, 4, 1, 1, 1) + + + self.verticalLayout_2.addLayout(self.gridLayout_3) + + self.horizontalLayout_10 = QHBoxLayout() + self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") + self.cb_pin2 = QCheckBox(self.groupBox_3) + self.cb_pin2.setObjectName(u"cb_pin2") + + self.horizontalLayout_10.addWidget(self.cb_pin2) + + self.rb_pin2_high = QRadioButton(self.groupBox_3) + self.rb_pin2_high.setObjectName(u"rb_pin2_high") + self.rb_pin2_high.setChecked(True) + + self.horizontalLayout_10.addWidget(self.rb_pin2_high) + + self.rb_pin2_low = QRadioButton(self.groupBox_3) + self.rb_pin2_low.setObjectName(u"rb_pin2_low") + + self.horizontalLayout_10.addWidget(self.rb_pin2_low) + + + self.verticalLayout_2.addLayout(self.horizontalLayout_10) + + self.horizontalLayout_4 = QHBoxLayout() + self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.cb_flippy = QCheckBox(self.groupBox_3) + self.cb_flippy.setObjectName(u"cb_flippy") + + self.horizontalLayout_4.addWidget(self.cb_flippy) + + self.rb_panasonic = QRadioButton(self.groupBox_3) + self.rb_panasonic.setObjectName(u"rb_panasonic") + self.rb_panasonic.setChecked(True) + + self.horizontalLayout_4.addWidget(self.rb_panasonic) + + self.rb_teac = QRadioButton(self.groupBox_3) + self.rb_teac.setObjectName(u"rb_teac") + + self.horizontalLayout_4.addWidget(self.rb_teac) + + self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_4.addItem(self.horizontalSpacer_2) + + + self.verticalLayout_2.addLayout(self.horizontalLayout_4) + + self.horizontalLayout_5 = QHBoxLayout() + self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") + self.cb_adjust_speed = QCheckBox(self.groupBox_3) + self.cb_adjust_speed.setObjectName(u"cb_adjust_speed") + + self.horizontalLayout_5.addWidget(self.cb_adjust_speed) + + self.le_adjust_speed = QLineEdit(self.groupBox_3) + self.le_adjust_speed.setObjectName(u"le_adjust_speed") + + self.horizontalLayout_5.addWidget(self.le_adjust_speed) + + self.combo_adjust_speed = QComboBox(self.groupBox_3) + self.combo_adjust_speed.setObjectName(u"combo_adjust_speed") + + self.horizontalLayout_5.addWidget(self.combo_adjust_speed) + + + self.verticalLayout_2.addLayout(self.horizontalLayout_5) + + self.verticalSpacer = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.verticalLayout_2.addItem(self.verticalSpacer) + + + self.horizontalLayout_3.addWidget(self.groupBox_3) + + + self.verticalLayout_5.addLayout(self.horizontalLayout_3) + + self.groupBox = QGroupBox(ReadDialog) + self.groupBox.setObjectName(u"groupBox") + self.gridLayout = QGridLayout(self.groupBox) + self.gridLayout.setObjectName(u"gridLayout") + self.label_3 = QLabel(self.groupBox) + self.label_3.setObjectName(u"label_3") + + self.gridLayout.addWidget(self.label_3, 0, 3, 1, 1) + + self.label_4 = QLabel(self.groupBox) + self.label_4.setObjectName(u"label_4") + + self.gridLayout.addWidget(self.label_4, 1, 0, 1, 1) + + self.combo_disktype = QComboBox(self.groupBox) + self.combo_disktype.setObjectName(u"combo_disktype") + + self.gridLayout.addWidget(self.combo_disktype, 1, 1, 1, 1) + + self.cb_format = QCheckBox(self.groupBox) + self.cb_format.setObjectName(u"cb_format") + + self.gridLayout.addWidget(self.cb_format, 1, 2, 1, 1) + + self.horizontalLayout_6 = QHBoxLayout() + self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") + self.le_suffix = QLineEdit(self.groupBox) + self.le_suffix.setObjectName(u"le_suffix") + + self.horizontalLayout_6.addWidget(self.le_suffix) + + self.btn_suffix_inc = QPushButton(self.groupBox) + self.btn_suffix_inc.setObjectName(u"btn_suffix_inc") + + self.horizontalLayout_6.addWidget(self.btn_suffix_inc) + + self.btn_suffix_dec = QPushButton(self.groupBox) + self.btn_suffix_dec.setObjectName(u"btn_suffix_dec") + + self.horizontalLayout_6.addWidget(self.btn_suffix_dec) + + + self.gridLayout.addLayout(self.horizontalLayout_6, 0, 4, 1, 1) + + self.cb_inc = QCheckBox(self.groupBox) + self.cb_inc.setObjectName(u"cb_inc") + + self.gridLayout.addWidget(self.cb_inc, 0, 2, 1, 1) + + self.le_filename = QLineEdit(self.groupBox) + self.le_filename.setObjectName(u"le_filename") + + self.gridLayout.addWidget(self.le_filename, 0, 1, 1, 1) + + self.label_2 = QLabel(self.groupBox) + self.label_2.setObjectName(u"label_2") + + self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1) + + self.combo_format = QComboBox(self.groupBox) + self.combo_format.addItem("") + self.combo_format.setObjectName(u"combo_format") + + self.gridLayout.addWidget(self.combo_format, 1, 3, 1, 2) + + + self.verticalLayout_5.addWidget(self.groupBox) + + self.groupBox_4 = QGroupBox(ReadDialog) + self.groupBox_4.setObjectName(u"groupBox_4") + self.verticalLayout = QVBoxLayout(self.groupBox_4) + self.verticalLayout.setObjectName(u"verticalLayout") + self.te_command_line = QPlainTextEdit(self.groupBox_4) + self.te_command_line.setObjectName(u"te_command_line") + + self.verticalLayout.addWidget(self.te_command_line) + + + self.verticalLayout_5.addWidget(self.groupBox_4) + + self.groupBox_5 = QGroupBox(ReadDialog) + self.groupBox_5.setObjectName(u"groupBox_5") + self.verticalLayout_3 = QVBoxLayout(self.groupBox_5) + self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.te_console = QTextEdit(self.groupBox_5) + self.te_console.setObjectName(u"te_console") + self.te_console.setReadOnly(True) + + self.verticalLayout_3.addWidget(self.te_console) + + + self.verticalLayout_5.addWidget(self.groupBox_5) + + self.horizontalLayout_7 = QHBoxLayout() + self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") + self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_7.addItem(self.horizontalSpacer) + + self.btn_select_folder = QPushButton(ReadDialog) + self.btn_select_folder.setObjectName(u"btn_select_folder") + + self.horizontalLayout_7.addWidget(self.btn_select_folder) + + self.btn_select_file = QPushButton(ReadDialog) + self.btn_select_file.setObjectName(u"btn_select_file") + + self.horizontalLayout_7.addWidget(self.btn_select_file) + + self.btn_launch = QPushButton(ReadDialog) + self.btn_launch.setObjectName(u"btn_launch") + + self.horizontalLayout_7.addWidget(self.btn_launch) + + self.btn_back = QPushButton(ReadDialog) + self.btn_back.setObjectName(u"btn_back") + + self.horizontalLayout_7.addWidget(self.btn_back) + + self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) + + self.horizontalLayout_7.addItem(self.horizontalSpacer_3) + + + self.verticalLayout_5.addLayout(self.horizontalLayout_7) + + + self.retranslateUi(ReadDialog) + + QMetaObject.connectSlotsByName(ReadDialog) + # setupUi + + def retranslateUi(self, ReadDialog): + ReadDialog.setWindowTitle(QCoreApplication.translate("ReadDialog", u"Read From Disk", None)) + self.groupBox_2.setTitle("") + self.cb_fake_index.setText(QCoreApplication.translate("ReadDialog", u"Fake Index", None)) +#if QT_CONFIG(tooltip) + self.cb_bitrate.setToolTip(QCoreApplication.translate("ReadDialog", u"HFE kbit/s", None)) +#endif // QT_CONFIG(tooltip) + self.cb_bitrate.setText(QCoreApplication.translate("ReadDialog", u"Bitrate", None)) + self.cb_double_step.setText(QCoreApplication.translate("ReadDialog", u"Head steps", None)) + self.cb_revs.setText(QCoreApplication.translate("ReadDialog", u"Revisions", None)) + self.combo_drive_select.setItemText(0, QCoreApplication.translate("ReadDialog", u"A", None)) + self.combo_drive_select.setItemText(1, QCoreApplication.translate("ReadDialog", u"B", None)) + self.combo_drive_select.setItemText(2, QCoreApplication.translate("ReadDialog", u"0", None)) + self.combo_drive_select.setItemText(3, QCoreApplication.translate("ReadDialog", u"1", None)) + self.combo_drive_select.setItemText(4, QCoreApplication.translate("ReadDialog", u"2", None)) + +#if QT_CONFIG(tooltip) + self.combo_drive_select.setToolTip(QCoreApplication.translate("ReadDialog", u"Drive to read", None)) +#endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.le_fake_index.setToolTip(QCoreApplication.translate("ReadDialog", u"Fake index pulses at SPEED", None)) +#endif // QT_CONFIG(tooltip) + self.le_fake_index.setText(QCoreApplication.translate("ReadDialog", u"300", None)) + self.combo_fake_index.setItemText(0, "") + self.combo_fake_index.setItemText(1, QCoreApplication.translate("ReadDialog", u"rpm", None)) + self.combo_fake_index.setItemText(2, QCoreApplication.translate("ReadDialog", u"ms", None)) + self.combo_fake_index.setItemText(3, QCoreApplication.translate("ReadDialog", u"us", None)) + self.combo_fake_index.setItemText(4, QCoreApplication.translate("ReadDialog", u"ns", None)) + self.combo_fake_index.setItemText(5, QCoreApplication.translate("ReadDialog", u"scp", None)) + + self.label_6.setText(QCoreApplication.translate("ReadDialog", u"Lowpass", None)) +#if QT_CONFIG(tooltip) + self.le_lowpass.setToolTip(QCoreApplication.translate("ReadDialog", u"Filter flux periods shorter than USEC", None)) +#endif // QT_CONFIG(tooltip) + self.cb_drive_select.setText(QCoreApplication.translate("ReadDialog", u"Drive select", None)) + self.label_5.setText(QCoreApplication.translate("ReadDialog", u"Period", None)) +#if QT_CONFIG(tooltip) + self.le_period.setToolTip(QCoreApplication.translate("ReadDialog", u"Period adjustment as percentage of phase error", None)) +#endif // QT_CONFIG(tooltip) + self.le_period.setText(QCoreApplication.translate("ReadDialog", u"5", None)) + self.label.setText(QCoreApplication.translate("ReadDialog", u"Phase:", None)) +#if QT_CONFIG(tooltip) + self.le_phase.setToolTip(QCoreApplication.translate("ReadDialog", u"Phase adjustment as percentage of phase error", None)) +#endif // QT_CONFIG(tooltip) + self.le_phase.setText(QCoreApplication.translate("ReadDialog", u"60", None)) +#if QT_CONFIG(tooltip) + self.le_bitrate.setToolTip(QCoreApplication.translate("ReadDialog", u"HFE kbit/s", None)) +#endif // QT_CONFIG(tooltip) + self.le_bitrate.setText(QCoreApplication.translate("ReadDialog", u"250", None)) + self.cb_pllspec.setText(QCoreApplication.translate("ReadDialog", u"PLLSPEC", None)) +#if QT_CONFIG(tooltip) + self.le_revs.setToolTip(QCoreApplication.translate("ReadDialog", u"Number of revolutions to read per track", None)) +#endif // QT_CONFIG(tooltip) + self.le_revs.setText(QCoreApplication.translate("ReadDialog", u"3", None)) +#if QT_CONFIG(tooltip) + self.le_double_step.setToolTip(QCoreApplication.translate("ReadDialog", u"Head steps between cylinders", None)) +#endif // QT_CONFIG(tooltip) + self.le_double_step.setText(QCoreApplication.translate("ReadDialog", u"1", None)) + self.cb_retries.setText(QCoreApplication.translate("ReadDialog", u"Retries", None)) +#if QT_CONFIG(tooltip) + self.le_retries.setToolTip(QCoreApplication.translate("ReadDialog", u"Number of retries per seek-retry", None)) +#endif // QT_CONFIG(tooltip) + self.le_retries.setText(QCoreApplication.translate("ReadDialog", u"3", None)) + self.groupBox_3.setTitle("") + self.cb_head_sets.setText(QCoreApplication.translate("ReadDialog", u"Head sets", None)) + self.cb_head_swap.setText(QCoreApplication.translate("ReadDialog", u"Head Swap", None)) + self.cb_ss_legacy.setText(QCoreApplication.translate("ReadDialog", u"SS Legacy", None)) + self.cb_cylinder_sets.setText(QCoreApplication.translate("ReadDialog", u"Cylinder sets", None)) + self.le_head_sets.setText(QCoreApplication.translate("ReadDialog", u"0-1", None)) + self.cb_rev_track_data.setText(QCoreApplication.translate("ReadDialog", u"Rev Track Data", None)) + self.cb_hard_sectors.setText(QCoreApplication.translate("ReadDialog", u"Hard Sectors", None)) + self.le_cylinder_sets.setText(QCoreApplication.translate("ReadDialog", u"0-34,35-79", None)) + self.cb_no_clobber.setText(QCoreApplication.translate("ReadDialog", u"No Clobber", None)) + self.cb_raw.setText(QCoreApplication.translate("ReadDialog", u"Raw", None)) + self.cb_pin2.setText(QCoreApplication.translate("ReadDialog", u"5.25 Set Pin 2", None)) + self.rb_pin2_high.setText(QCoreApplication.translate("ReadDialog", u"High", None)) + self.rb_pin2_low.setText(QCoreApplication.translate("ReadDialog", u"Low", None)) + self.cb_flippy.setText(QCoreApplication.translate("ReadDialog", u"Flippy offset", None)) + self.rb_panasonic.setText(QCoreApplication.translate("ReadDialog", u"Panasonic", None)) + self.rb_teac.setText(QCoreApplication.translate("ReadDialog", u"Teac", None)) + self.cb_adjust_speed.setText(QCoreApplication.translate("ReadDialog", u"Adjust-Speed", None)) + self.le_adjust_speed.setText(QCoreApplication.translate("ReadDialog", u"300", None)) + self.groupBox.setTitle("") + self.label_3.setText(QCoreApplication.translate("ReadDialog", u"Suffix:", None)) + self.label_4.setText(QCoreApplication.translate("ReadDialog", u"DiskType:", None)) + self.cb_format.setText(QCoreApplication.translate("ReadDialog", u"Format:", None)) + self.btn_suffix_inc.setText(QCoreApplication.translate("ReadDialog", u">>>>", None)) + self.btn_suffix_dec.setText(QCoreApplication.translate("ReadDialog", u"<<<<", None)) + self.cb_inc.setText(QCoreApplication.translate("ReadDialog", u"Inc++", None)) + self.le_filename.setText(QCoreApplication.translate("ReadDialog", u"mydisk.scp", None)) + self.label_2.setText(QCoreApplication.translate("ReadDialog", u"Filename:", None)) + self.combo_format.setItemText(0, QCoreApplication.translate("ReadDialog", u"UNSPECIFIED FORMAT", None)) + + self.groupBox_4.setTitle(QCoreApplication.translate("ReadDialog", u"Command Line", None)) + self.te_command_line.setPlainText(QCoreApplication.translate("ReadDialog", u"gw.exe read --device=COM3 \"C:\\Users\\Rainer\\Downloads\\GreaseweazleGUI-v2.127\\mydisk.scp\"", None)) + self.groupBox_5.setTitle("") + self.te_console.setHtml(QCoreApplication.translate("ReadDialog", u"\n" +"\n" +"

Using CMD Console mode

", None)) + self.btn_select_folder.setText(QCoreApplication.translate("ReadDialog", u"Select Folder", None)) + self.btn_select_file.setText(QCoreApplication.translate("ReadDialog", u"Select File", None)) + self.btn_launch.setText(QCoreApplication.translate("ReadDialog", u"Launch", None)) + self.btn_back.setText(QCoreApplication.translate("ReadDialog", u"Back", None)) + # retranslateUi +