diff --git a/gui/device_menu.py b/gui/device_menu.py new file mode 100644 --- /dev/null +++ b/gui/device_menu.py @@ -0,0 +1,52 @@ +from PyQt5 import QtWidgets +from mount import mount +from cdemu import CDEmuException + +class QDeviceMenu(QtWidgets.QMenu): + def __init__(self, device): + super().__init__(device.get_name()) + self._id = id + self.load = self.addAction('Load') + self.load.triggered.connect(self.on_load) + self.unload = self.addAction('Unload') + self.unload.triggered.connect(self.on_unload) + self.addSeparator() + self.dpm = self.addAction('DPM emulation') + self.dpm.setCheckable(True) + self.dpm.triggered.connect(self.on_dpm) + self.tr = self.addAction('Transfer rate emulation') + self.tr.setCheckable(True) + self.tr.triggered.connect(self.on_tr) + self.bs = self.addAction('Bad sector enulation') + self.bs.setCheckable(True) + self.bs.triggered.connect(self.on_bs) + self.device = device + self.device.add_handler('change', self.on_device_change) + self.on_device_change() + + def on_device_change(self): + self.unload.setEnabled(bool(self.device.get_img())) + self.dpm.setChecked(self.device.get_dpm()) + self.tr.setChecked(self.device.get_tr()) + self.bs.setChecked(self.device.get_bs()) + + def on_load(self): + fd = QtWidgets.QFileDialog(self) + fd.setAcceptMode(QtWidgets.QFileDialog.AcceptOpen) + if fd.exec() == QtWidgets.QDialog.Accepted: + self.device.load(fd.selectedFiles()[0]) + + def on_unload(self): + try: + self.device.unload() + except Exception as e: + QtWidgets.QMessageBox.critical(None, 'Error', str(e)) + + def on_dpm(self): + self.device.set_dpm(self.dpm.isChecked()) + + def on_tr(self): + self.device.set_tr(self.tr.isChecked()) + + def on_bs(self): + self.device.set_bs(self.bs.isChecked())