Merge pull request #121 from alindt/ui-core-redesign

UI/core redesign
pull/124/head
multibootusb 7 years ago committed by GitHub
commit 07b4dc328c

5
.gitignore vendored

@ -97,4 +97,7 @@ multibootusb*.tar.gz
# Setup file
multibootusb*.exe
multibootusb*.exe
# VIM temp files
*.swp

@ -48,7 +48,7 @@ def extract_iso(src, dst, pattern=None, suppress_out=True):
_cmd = _7zip + cli_option + ' x -y -o' + gen.quote(dst) + ' ' + gen.quote(src) + suppress_out
else:
_cmd = _7zip + ' -y x ' + gen.quote(src) + ' -o' + dst + ' ' + gen.quote(pattern) + ' -r' + suppress_out
# gen.log('Executing', _cmd)
gen.log('Executing ' + _cmd)
_7zip_process = subprocess.Popen(_cmd, universal_newlines=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE,
stdout=subprocess.PIPE, shell=True)
config.status_text = 'Status: Extracting ' + os.path.basename(src).strip()

@ -12,6 +12,8 @@ usb_mount = ""
usb_uuid = ""
usb_label = ""
persistence = 0
persistence_available = False
persistence_max_size = 0
distro = ""
status_text = ""
percentage = 0

@ -19,7 +19,7 @@ def mbusb_update_grub_cfg():
:return:
"""
# Lets convert syslinux config file to grub2 accepted file format.
_iso_dir = os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.iso_link))
_iso_dir = os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.image_path))
try:
gen.log('Trying to create loopback.cfg')
iso2_grub2_cfg = iso2grub2(_iso_dir)
@ -34,21 +34,21 @@ def mbusb_update_grub_cfg():
sys_cfg_path = None
loopback_cfg_path = None
mbus_grub_cfg_path = os.path.join(config.usb_mount, 'multibootusb', 'grub', 'grub.cfg')
iso_grub_cfg = iso.iso_file_path(config.iso_link, 'grub.cfg')
if iso.isolinux_bin_dir(config.iso_link) is not False:
iso_sys_cfg_path = os.path.join(iso.isolinux_bin_dir(config.iso_link), 'syslinux.cfg')
iso_iso_cfg_path = os.path.join(iso.isolinux_bin_dir(config.iso_link), 'isolinux.cfg')
iso_grub_cfg = iso.iso_file_path(config.image_path, 'grub.cfg')
if iso.isolinux_bin_dir(config.image_path) is not False:
iso_sys_cfg_path = os.path.join(iso.isolinux_bin_dir(config.image_path), 'syslinux.cfg')
iso_iso_cfg_path = os.path.join(iso.isolinux_bin_dir(config.image_path), 'isolinux.cfg')
if os.path.exists(os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.iso_link),
if os.path.exists(os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.image_path),
iso_sys_cfg_path)):
syslinux_menu = iso_sys_cfg_path.replace('\\', '/')
elif os.path.exists(os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.iso_link),
elif os.path.exists(os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.image_path),
iso_iso_cfg_path)):
syslinux_menu = iso_iso_cfg_path.replace('\\', '/')
efi_grub_cfg = get_grub_cfg(config.iso_link)
loopback_cfg_path = iso.iso_file_path(config.iso_link, 'loopback.cfg')
boot_grub_cfg = get_grub_cfg(config.iso_link, efi=False)
efi_grub_cfg = get_grub_cfg(config.image_path)
loopback_cfg_path = iso.iso_file_path(config.image_path, 'loopback.cfg')
boot_grub_cfg = get_grub_cfg(config.image_path, efi=False)
if loopback_cfg_path is not False:
grub_cfg_path = loopback_cfg_path.replace('\\', '/')
@ -65,30 +65,30 @@ def mbusb_update_grub_cfg():
gen.log('Updating grub.cfg file...')
if grub_custom_menu(mbus_grub_cfg_path, config.distro) is False:
with open(mbus_grub_cfg_path, 'a') as f:
f.write("#start " + iso.iso_basename(config.iso_link) + "\n")
f.write("#start " + iso.iso_basename(config.image_path) + "\n")
if grub_cfg_path is not None:
f.write(' menuentry ' + iso.iso_basename(config.iso_link) + ' {configfile '
+ '/multibootusb/' + iso.iso_basename(config.iso_link) + '/' + grub_cfg_path + '}' + "\n")
f.write(' menuentry ' + iso.iso_basename(config.image_path) + ' {configfile '
+ '/multibootusb/' + iso.iso_basename(config.image_path) + '/' + grub_cfg_path + '}' + "\n")
elif config.distro == 'f4ubcd':
f.write(' menuentry ' + iso.iso_basename(config.iso_link) +
f.write(' menuentry ' + iso.iso_basename(config.image_path) +
' {linux /multibootusb/grub.exe --config-file=/multibootusb' +
iso.iso_basename(config.iso_link) + '/menu.lst}'"\n")
iso.iso_basename(config.image_path) + '/menu.lst}'"\n")
elif config.distro == 'pc-unlocker':
f.write(' menuentry ' + iso.iso_basename(config.iso_link) +
f.write(' menuentry ' + iso.iso_basename(config.image_path) +
' {\n linux /ldntldr\n ntldr /ntldr }' + "\n")
elif config.distro == 'ReactOS':
f.write(' menuentry ' + iso.iso_basename(config.iso_link) +
f.write(' menuentry ' + iso.iso_basename(config.image_path) +
' {multiboot /loader/setupldr.sys}' + "\n")
elif config.distro == 'mentest':
f.write(' menuentry ' + iso.iso_basename(config.iso_link) +
' {linux16 ' + '/multibootusb/' + iso.iso_basename(config.iso_link) + '/BISOLINUX/MEMTEST}' + "\n")
f.write(' menuentry ' + iso.iso_basename(config.image_path) +
' {linux16 ' + '/multibootusb/' + iso.iso_basename(config.image_path) + '/BISOLINUX/MEMTEST}' + "\n")
elif syslinux_menu is not None:
f.write(' menuentry ' + iso.iso_basename(config.iso_link) + ' {syslinux_configfile '
+ '/multibootusb/' + iso.iso_basename(config.iso_link) + '/' + syslinux_menu + '}' + "\n")
f.write("#end " + iso.iso_basename(config.iso_link) + "\n")
f.write(' menuentry ' + iso.iso_basename(config.image_path) + ' {syslinux_configfile '
+ '/multibootusb/' + iso.iso_basename(config.image_path) + '/' + syslinux_menu + '}' + "\n")
f.write("#end " + iso.iso_basename(config.image_path) + "\n")
# Ascertain if the entry is made..
if gen.check_text_in_file(mbus_grub_cfg_path, iso.iso_basename(config.iso_link)):
if gen.check_text_in_file(mbus_grub_cfg_path, iso.iso_basename(config.image_path)):
gen.log('Updated entry in grub.cfg...')
else:
gen.log('Unable to update entry in grub.cfg...')
@ -119,7 +119,7 @@ def get_grub_cfg(iso_link, efi=True):
def grub_custom_menu(mbus_grub_cfg_path, distro):
iso_size_mb = iso.iso_size(config.iso_link) / (1024.0 * 1024.0)
iso_size_mb = iso.iso_size(config.image_path) / (1024.0 * 1024.0)
gen.log('size of the ISO is ' + str(iso_size_mb))
if distro == 'sgrubd2' or distro == 'raw_iso':
grub_raw_iso(mbus_grub_cfg_path)
@ -127,9 +127,9 @@ def grub_custom_menu(mbus_grub_cfg_path, distro):
'''
with open(mbus_grub_cfg_path, 'a') as f:
f.write("#start " + iso.iso_basename(config.iso_link) + "\n")
f.write("#start " + iso.iso_basename(config.image_path) + "\n")
f.write(grub_raw_iso())
f.write("#end " + iso.iso_basename(config.iso_link) + "\n")
f.write("#end " + iso.iso_basename(config.image_path) + "\n")
elif iso_size_mb < 750.0:
@ -146,15 +146,15 @@ def grub_raw_iso(mbus_grub_cfg_path):
Generic menu entry for booting ISO files directly using memdisk. Should have enough memory to load to RAM
:return:
"""
menu_entry = ' search --set -f /multibootusb/' + iso.iso_basename(config.iso_link) + '/' + iso.iso_name(config.iso_link) + '\n' \
' menuentry ' + iso.iso_basename(config.iso_link) + ' {\n' \
menu_entry = ' search --set -f /multibootusb/' + iso.iso_basename(config.image_path) + '/' + iso.iso_name(config.image_path) + '\n' \
' menuentry ' + iso.iso_basename(config.image_path) + ' {\n' \
' linux16 /multibootusb/memdisk iso raw vmalloc=750M\n' \
' initrd16 /multibootusb/' + iso.iso_basename(config.iso_link) + '/' + iso.iso_name(config.iso_link) + '\n' \
' initrd16 /multibootusb/' + iso.iso_basename(config.image_path) + '/' + iso.iso_name(config.image_path) + '\n' \
'}\n'
with open(mbus_grub_cfg_path, 'a') as f:
f.write("#start " + iso.iso_basename(config.iso_link) + "\n")
f.write("#start " + iso.iso_basename(config.image_path) + "\n")
f.write(menu_entry)
f.write("#end " + iso.iso_basename(config.iso_link) + "\n")
f.write("#end " + iso.iso_basename(config.image_path) + "\n")
return menu_entry
@ -190,7 +190,7 @@ def iso2grub2(iso_dir):
:param file_out: Path to 'loopback.cfg' file. By default it is set to root of distro install directory.
:return:
"""
grub_file_path = os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.iso_link), 'loopback.cfg')
grub_file_path = os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.image_path), 'loopback.cfg')
gen.log('loopback.cfg file is set to ' + grub_file_path)
# Loop though the distro installed directory for finding config files
for dirpath, dirnames, filenames in os.walk(iso_dir):
@ -242,12 +242,12 @@ def iso2grub2(iso_dir):
elif 'linux=' in kernel.lower():
kernel = kernel.strip().replace('linux=', 'linux /multibootusb/' +
iso.iso_basename(config.iso_link) + '/'
+ iso.isolinux_bin_dir(config.iso_link).replace('\\', '/') + '/')
iso.iso_basename(config.image_path) + '/'
+ iso.isolinux_bin_dir(config.image_path).replace('\\', '/') + '/')
elif 'linux /' not in kernel:
kernel = kernel.strip().replace('linux ', 'linux /multibootusb/' +
iso.iso_basename(config.iso_link) + '/'
+ iso.isolinux_bin_dir(config.iso_link).replace('\\', '/') + '/')
iso.iso_basename(config.image_path) + '/'
+ iso.isolinux_bin_dir(config.image_path).replace('\\', '/') + '/')
# Ensure that we do not have linux parameter in caps
kernel = kernel.replace('LINUX ', 'linux ')
@ -268,16 +268,16 @@ def iso2grub2(iso_dir):
# standard
initrd = initrd.replace(',/', ' /')
initrd = initrd.replace('z,', 'z /multibootusb/' +
iso.iso_basename(config.iso_link) + '/'
+ iso.isolinux_bin_dir(config.iso_link).replace('\\', '/') + '/')
iso.iso_basename(config.image_path) + '/'
+ iso.isolinux_bin_dir(config.image_path).replace('\\', '/') + '/')
#print('initrd')
else:
# Extract initrd parameter from within the line
initrd = re.findall('(initrd[= ].*?[ ])', m.group(), re.I|re.DOTALL)[0]
initrd = initrd.replace(',/', ' /')
initrd = initrd.replace('z,', 'z /multibootusb/' +
iso.iso_basename(config.iso_link) + '/'
+ iso.isolinux_bin_dir(config.iso_link).replace('\\', '/') + '/')
iso.iso_basename(config.image_path) + '/'
+ iso.isolinux_bin_dir(config.image_path).replace('\\', '/') + '/')
#print(initrd)
# Ensure that we change the relative path to absolute path
@ -287,8 +287,8 @@ def iso2grub2(iso_dir):
elif 'initrd=' in initrd.lower():
initrd = initrd.strip().replace('initrd=', 'initrd /multibootusb/' +
iso.iso_basename(config.iso_link) + '/'
+ iso.isolinux_bin_dir(config.iso_link).replace('\\', '/') + '/')
iso.iso_basename(config.image_path) + '/'
+ iso.isolinux_bin_dir(config.image_path).replace('\\', '/') + '/')
# Ensure that there is no caps which is not accepted by grub2
initrd = initrd.replace('INITRD', 'initrd')

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>About</class>
<widget class="QDialog" name="About">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>380</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout_11">
<item row="1" column="1">
<widget class="QLabel" name="label_6">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;An advanced bootable usb creator with option to install/uninstall multiple distros.&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;This software is written in Python and PyQt. &lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Copyright 2010-2017 Sundar&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Author(s)&lt;/span&gt;: Sundar, Ian Bruce, Lee&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Licence&lt;/span&gt;: GPL version 2 or later&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Home page&lt;/span&gt;: &lt;a href=&quot; http://multibootusb.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://multibootusb.org&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Help/Email&lt;/span&gt;: feedback.multibootusb@gmail.com&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Source Code&lt;/span&gt;: &lt;a href=&quot;https://github.com/mbusb/multibootusb&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com/mbusb/multibootusb&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="1" column="2">
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="button_close">
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,519 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'gui/multibootusb.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(717, 516)
self.horizontalLayout = QtWidgets.QHBoxLayout(Dialog)
self.horizontalLayout.setObjectName("horizontalLayout")
self.tabWidget = QtWidgets.QTabWidget(Dialog)
self.tabWidget.setEnabled(True)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setEnabled(True)
self.tab_3.setObjectName("tab_3")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tab_3)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setContentsMargins(5, 5, 5, 5)
self.gridLayout.setObjectName("gridLayout")
self.groupBox_6 = QtWidgets.QGroupBox(self.tab_3)
self.groupBox_6.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing)
self.groupBox_6.setFlat(False)
self.groupBox_6.setCheckable(False)
self.groupBox_6.setObjectName("groupBox_6")
self.formLayout = QtWidgets.QFormLayout(self.groupBox_6)
self.formLayout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout.setObjectName("formLayout")
self.label_usb_dev = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_dev.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_usb_dev.setObjectName("label_usb_dev")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_usb_dev)
self.usb_dev = QtWidgets.QLabel(self.groupBox_6)
self.usb_dev.setText("")
self.usb_dev.setObjectName("usb_dev")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.usb_dev)
self.label_usb_vendor = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_vendor.setObjectName("label_usb_vendor")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_usb_vendor)
self.usb_vendor = QtWidgets.QLabel(self.groupBox_6)
self.usb_vendor.setText("")
self.usb_vendor.setObjectName("usb_vendor")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.usb_vendor)
self.label_usb_model = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_model.setObjectName("label_usb_model")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_usb_model)
self.label_usb_size = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_size.setFrameShape(QtWidgets.QFrame.NoFrame)
self.label_usb_size.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_usb_size.setObjectName("label_usb_size")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_usb_size)
self.label_usb_mount = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_mount.setObjectName("label_usb_mount")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_usb_mount)
self.usb_model = QtWidgets.QLabel(self.groupBox_6)
self.usb_model.setText("")
self.usb_model.setObjectName("usb_model")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.usb_model)
self.usb_size = QtWidgets.QLabel(self.groupBox_6)
self.usb_size.setText("")
self.usb_size.setObjectName("usb_size")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.usb_size)
self.usb_mount = QtWidgets.QLabel(self.groupBox_6)
self.usb_mount.setText("")
self.usb_mount.setObjectName("usb_mount")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.usb_mount)
self.gridLayout.addWidget(self.groupBox_6, 2, 0, 1, 5)
self.close = QtWidgets.QPushButton(self.tab_3)
self.close.setObjectName("close")
self.gridLayout.addWidget(self.close, 9, 6, 1, 1)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 8, 0, 1, 1)
self.browse_iso = QtWidgets.QPushButton(self.tab_3)
self.browse_iso.setCheckable(False)
self.browse_iso.setFlat(False)
self.browse_iso.setObjectName("browse_iso")
self.gridLayout.addWidget(self.browse_iso, 4, 4, 1, 1)
self.listWidget = QtWidgets.QListWidget(self.tab_3)
self.listWidget.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.listWidget.setFrameShadow(QtWidgets.QFrame.Sunken)
self.listWidget.setResizeMode(QtWidgets.QListView.Fixed)
self.listWidget.setObjectName("listWidget")
self.gridLayout.addWidget(self.listWidget, 1, 5, 8, 2)
self.label_persistence = QtWidgets.QLabel(self.tab_3)
self.label_persistence.setEnabled(False)
self.label_persistence.setMouseTracking(True)
self.label_persistence.setStyleSheet("font-weight: 600")
self.label_persistence.setObjectName("label_persistence")
self.gridLayout.addWidget(self.label_persistence, 6, 0, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.tab_3)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 4, 0, 1, 4)
self.detect_usb = QtWidgets.QPushButton(self.tab_3)
self.detect_usb.setObjectName("detect_usb")
self.gridLayout.addWidget(self.detect_usb, 1, 2, 1, 2)
self.uninstall = QtWidgets.QPushButton(self.tab_3)
self.uninstall.setObjectName("uninstall")
self.gridLayout.addWidget(self.uninstall, 0, 5, 1, 2)
self.comboBox = QtWidgets.QComboBox(self.tab_3)
self.comboBox.setObjectName("comboBox")
self.gridLayout.addWidget(self.comboBox, 1, 0, 1, 2)
self.slider_persistence = QtWidgets.QSlider(self.tab_3)
self.slider_persistence.setEnabled(False)
self.slider_persistence.setAutoFillBackground(False)
self.slider_persistence.setOrientation(QtCore.Qt.Horizontal)
self.slider_persistence.setTickPosition(QtWidgets.QSlider.TicksBothSides)
self.slider_persistence.setObjectName("slider_persistence")
self.gridLayout.addWidget(self.slider_persistence, 6, 1, 1, 3)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 8, 2, 1, 2)
self.checkBox_all_drives = QtWidgets.QCheckBox(self.tab_3)
self.checkBox_all_drives.setObjectName("checkBox_all_drives")
self.gridLayout.addWidget(self.checkBox_all_drives, 1, 4, 1, 1)
self.label_persistence_value = QtWidgets.QLabel(self.tab_3)
self.label_persistence_value.setEnabled(False)
self.label_persistence_value.setObjectName("label_persistence_value")
self.gridLayout.addWidget(self.label_persistence_value, 6, 4, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem2, 8, 1, 1, 1)
self.create = QtWidgets.QPushButton(self.tab_3)
self.create.setObjectName("create")
self.gridLayout.addWidget(self.create, 7, 4, 1, 1)
self.progressBar = QtWidgets.QProgressBar(self.tab_3)
self.progressBar.setProperty("value", 0)
self.progressBar.setInvertedAppearance(False)
self.progressBar.setObjectName("progressBar")
self.gridLayout.addWidget(self.progressBar, 7, 0, 1, 4)
self.status = QtWidgets.QLabel(self.tab_3)
self.status.setMinimumSize(QtCore.QSize(0, 0))
self.status.setAcceptDrops(False)
self.status.setAutoFillBackground(False)
self.status.setFrameShadow(QtWidgets.QFrame.Plain)
self.status.setTextFormat(QtCore.Qt.AutoText)
self.status.setScaledContents(False)
self.status.setObjectName("status")
self.gridLayout.addWidget(self.status, 9, 0, 1, 6)
self.labelstep1 = QtWidgets.QLabel(self.tab_3)
self.labelstep1.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep1.setObjectName("labelstep1")
self.gridLayout.addWidget(self.labelstep1, 0, 0, 1, 5)
self.labelstep2 = QtWidgets.QLabel(self.tab_3)
self.labelstep2.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep2.setObjectName("labelstep2")
self.gridLayout.addWidget(self.labelstep2, 3, 0, 1, 5)
self.labelstep3 = QtWidgets.QLabel(self.tab_3)
self.labelstep3.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep3.setObjectName("labelstep3")
self.gridLayout.addWidget(self.labelstep3, 5, 0, 1, 5)
self.horizontalLayout_2.addLayout(self.gridLayout)
self.tabWidget.addTab(self.tab_3, "")
self.imager = QtWidgets.QWidget()
self.imager.setEnabled(True)
self.imager.setObjectName("imager")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.imager)
self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.gridLayout_9 = QtWidgets.QGridLayout()
self.gridLayout_9.setContentsMargins(5, 5, 5, 5)
self.gridLayout_9.setObjectName("gridLayout_9")
self.widget_7 = QtWidgets.QWidget(self.imager)
self.widget_7.setObjectName("widget_7")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.widget_7)
self.verticalLayout_6.setContentsMargins(5, 5, 5, 5)
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.gridLayout_11 = QtWidgets.QGridLayout()
self.gridLayout_11.setObjectName("gridLayout_11")
self.groupBox_10 = QtWidgets.QGroupBox(self.widget_7)
self.groupBox_10.setObjectName("groupBox_10")
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.groupBox_10)
self.verticalLayout_9.setObjectName("verticalLayout_9")
self.pushButton = QtWidgets.QPushButton(self.groupBox_10)
self.pushButton.setObjectName("pushButton")
self.verticalLayout_9.addWidget(self.pushButton)
self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_10)
self.lineEdit_3.setObjectName("lineEdit_3")
self.verticalLayout_9.addWidget(self.lineEdit_3)
self.imager_bootable = QtWidgets.QLabel(self.groupBox_10)
self.imager_bootable.setObjectName("imager_bootable")
self.verticalLayout_9.addWidget(self.imager_bootable)
self.imager_iso_size = QtWidgets.QLabel(self.groupBox_10)
self.imager_iso_size.setObjectName("imager_iso_size")
self.verticalLayout_9.addWidget(self.imager_iso_size)
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_9.addItem(spacerItem3)
self.gridLayout_11.addWidget(self.groupBox_10, 0, 1, 1, 1)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_11.addItem(spacerItem4, 1, 0, 1, 1)
self.groupBox_9 = QtWidgets.QGroupBox(self.widget_7)
self.groupBox_9.setStyleSheet("")
self.groupBox_9.setObjectName("groupBox_9")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.groupBox_9)
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.comboBox_2 = QtWidgets.QComboBox(self.groupBox_9)
self.comboBox_2.setObjectName("comboBox_2")
self.verticalLayout_8.addWidget(self.comboBox_2)
self.pushbtn_imager_refreshusb = QtWidgets.QPushButton(self.groupBox_9)
self.pushbtn_imager_refreshusb.setObjectName("pushbtn_imager_refreshusb")
self.verticalLayout_8.addWidget(self.pushbtn_imager_refreshusb)
self.formLayout_3 = QtWidgets.QFormLayout()
self.formLayout_3.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout_3.setObjectName("formLayout_3")
self.label_imager_disk_label = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_disk_label.setObjectName("label_imager_disk_label")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_imager_disk_label)
self.label_imager_total_size = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_total_size.setObjectName("label_imager_total_size")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_imager_total_size)
self.label_imager_uuid = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_uuid.setObjectName("label_imager_uuid")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_imager_uuid)
self.imager_disk_label = QtWidgets.QLabel(self.groupBox_9)
self.imager_disk_label.setText("")
self.imager_disk_label.setObjectName("imager_disk_label")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.imager_disk_label)
self.imager_total_size = QtWidgets.QLabel(self.groupBox_9)
self.imager_total_size.setText("")
self.imager_total_size.setObjectName("imager_total_size")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.imager_total_size)
self.imager_uuid = QtWidgets.QLabel(self.groupBox_9)
self.imager_uuid.setText("")
self.imager_uuid.setObjectName("imager_uuid")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.imager_uuid)
self.verticalLayout_8.addLayout(self.formLayout_3)
spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_8.addItem(spacerItem5)
self.gridLayout_11.addWidget(self.groupBox_9, 0, 0, 1, 1)
self.verticalLayout_6.addLayout(self.gridLayout_11)
self.imager_label_status = QtWidgets.QLabel(self.widget_7)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.imager_label_status.sizePolicy().hasHeightForWidth())
self.imager_label_status.setSizePolicy(sizePolicy)
self.imager_label_status.setObjectName("imager_label_status")
self.verticalLayout_6.addWidget(self.imager_label_status)
self.gridLayout_12 = QtWidgets.QGridLayout()
self.gridLayout_12.setObjectName("gridLayout_12")
self.label_10 = QtWidgets.QLabel(self.widget_7)
self.label_10.setObjectName("label_10")
self.gridLayout_12.addWidget(self.label_10, 1, 0, 1, 3)
self.imager_progressbar = QtWidgets.QProgressBar(self.widget_7)
self.imager_progressbar.setProperty("value", 0)
self.imager_progressbar.setObjectName("imager_progressbar")
self.gridLayout_12.addWidget(self.imager_progressbar, 0, 0, 1, 3)
self.imager_write = QtWidgets.QPushButton(self.widget_7)
self.imager_write.setObjectName("imager_write")
self.gridLayout_12.addWidget(self.imager_write, 2, 2, 1, 1)
self.verticalLayout_6.addLayout(self.gridLayout_12)
self.gridLayout_9.addWidget(self.widget_7, 0, 0, 1, 2)
self.imager_close = QtWidgets.QPushButton(self.imager)
self.imager_close.setObjectName("imager_close")
self.gridLayout_9.addWidget(self.imager_close, 1, 1, 1, 1)
spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_9.addItem(spacerItem6, 1, 0, 1, 1)
self.horizontalLayout_7.addLayout(self.gridLayout_9)
self.tabWidget.addTab(self.imager, "")
self.syslinux_ab = QtWidgets.QWidget()
self.syslinux_ab.setObjectName("syslinux_ab")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.syslinux_ab)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.gridLayout_2 = QtWidgets.QGridLayout()
self.gridLayout_2.setObjectName("gridLayout_2")
self.groupBox_2 = QtWidgets.QGroupBox(self.syslinux_ab)
self.groupBox_2.setAutoFillBackground(False)
self.groupBox_2.setObjectName("groupBox_2")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.groupBox_2)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3")
self.install_sys_only = QtWidgets.QRadioButton(self.groupBox_2)
self.install_sys_only.setObjectName("install_sys_only")
self.gridLayout_3.addWidget(self.install_sys_only, 0, 0, 1, 1)
self.install_sys_all = QtWidgets.QRadioButton(self.groupBox_2)
self.install_sys_all.setObjectName("install_sys_all")
self.gridLayout_3.addWidget(self.install_sys_all, 1, 0, 1, 1)
self.install_syslinux = QtWidgets.QPushButton(self.groupBox_2)
self.install_syslinux.setObjectName("install_syslinux")
self.gridLayout_3.addWidget(self.install_syslinux, 0, 2, 2, 1)
spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_3.addItem(spacerItem7, 0, 1, 2, 1)
self.horizontalLayout_4.addLayout(self.gridLayout_3)
self.gridLayout_2.addWidget(self.groupBox_2, 0, 0, 1, 1)
spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_2.addItem(spacerItem8, 3, 0, 1, 1)
self.groupBox_3 = QtWidgets.QGroupBox(self.syslinux_ab)
self.groupBox_3.setObjectName("groupBox_3")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.groupBox_3)
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.gridLayout_4 = QtWidgets.QGridLayout()
self.gridLayout_4.setObjectName("gridLayout_4")
self.edit_syslinux = QtWidgets.QPushButton(self.groupBox_3)
self.edit_syslinux.setObjectName("edit_syslinux")
self.gridLayout_4.addWidget(self.edit_syslinux, 0, 2, 1, 1)
self.label_2 = QtWidgets.QLabel(self.groupBox_3)
self.label_2.setObjectName("label_2")
self.gridLayout_4.addWidget(self.label_2, 0, 0, 1, 1)
spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_4.addItem(spacerItem9, 0, 1, 1, 1)
self.horizontalLayout_5.addLayout(self.gridLayout_4)
self.gridLayout_2.addWidget(self.groupBox_3, 2, 0, 1, 1)
spacerItem10 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
self.gridLayout_2.addItem(spacerItem10, 1, 0, 1, 1)
self.horizontalLayout_3.addLayout(self.gridLayout_2)
self.tabWidget.addTab(self.syslinux_ab, "")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.groupBox_5 = QtWidgets.QGroupBox(self.tab)
self.groupBox_5.setObjectName("groupBox_5")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_5)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.gridLayout_7 = QtWidgets.QGridLayout()
self.gridLayout_7.setObjectName("gridLayout_7")
spacerItem11 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_7.addItem(spacerItem11, 3, 0, 1, 1)
spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_7.addItem(spacerItem12, 1, 6, 1, 1)
self.boot_iso_qemu = QtWidgets.QPushButton(self.groupBox_5)
self.boot_iso_qemu.setObjectName("boot_iso_qemu")
self.gridLayout_7.addWidget(self.boot_iso_qemu, 3, 6, 1, 1)
self.browse_iso_qemu = QtWidgets.QPushButton(self.groupBox_5)
self.browse_iso_qemu.setObjectName("browse_iso_qemu")
self.gridLayout_7.addWidget(self.browse_iso_qemu, 0, 6, 1, 1)
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox_5)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout_7.addWidget(self.lineEdit_2, 0, 0, 1, 6)
spacerItem13 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_7.addItem(spacerItem13, 2, 6, 1, 1)
self.label_3 = QtWidgets.QLabel(self.groupBox_5)
self.label_3.setObjectName("label_3")
self.gridLayout_7.addWidget(self.label_3, 2, 0, 1, 1)
self.ram_iso_256 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_256.setObjectName("ram_iso_256")
self.gridLayout_7.addWidget(self.ram_iso_256, 2, 1, 1, 1)
self.ram_iso_512 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_512.setObjectName("ram_iso_512")
self.gridLayout_7.addWidget(self.ram_iso_512, 2, 2, 1, 1)
self.ram_iso_768 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_768.setObjectName("ram_iso_768")
self.gridLayout_7.addWidget(self.ram_iso_768, 2, 3, 1, 1)
self.ram_iso_1024 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_1024.setObjectName("ram_iso_1024")
self.gridLayout_7.addWidget(self.ram_iso_1024, 2, 4, 1, 1)
self.ram_iso_2048 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_2048.setObjectName("ram_iso_2048")
self.gridLayout_7.addWidget(self.ram_iso_2048, 2, 5, 1, 1)
self.verticalLayout_3.addLayout(self.gridLayout_7)
self.verticalLayout_2.addWidget(self.groupBox_5)
self.gridLayout_6 = QtWidgets.QGridLayout()
self.gridLayout_6.setObjectName("gridLayout_6")
self.groupBox_4 = QtWidgets.QGroupBox(self.tab)
self.groupBox_4.setStyleSheet("")
self.groupBox_4.setObjectName("groupBox_4")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_4)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.gridLayout_8 = QtWidgets.QGridLayout()
self.gridLayout_8.setObjectName("gridLayout_8")
self.ram_usb_2048 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_2048.setObjectName("ram_usb_2048")
self.gridLayout_8.addWidget(self.ram_usb_2048, 0, 5, 1, 1)
spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_8.addItem(spacerItem14, 0, 6, 1, 1)
spacerItem15 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_8.addItem(spacerItem15, 1, 0, 1, 1)
self.boot_usb_qemu = QtWidgets.QPushButton(self.groupBox_4)
self.boot_usb_qemu.setObjectName("boot_usb_qemu")
self.gridLayout_8.addWidget(self.boot_usb_qemu, 1, 6, 1, 1)
self.ram_usb_256 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_256.setObjectName("ram_usb_256")
self.gridLayout_8.addWidget(self.ram_usb_256, 0, 1, 1, 1)
self.ram_usb_768 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_768.setObjectName("ram_usb_768")
self.gridLayout_8.addWidget(self.ram_usb_768, 0, 3, 1, 1)
self.label_4 = QtWidgets.QLabel(self.groupBox_4)
self.label_4.setObjectName("label_4")
self.gridLayout_8.addWidget(self.label_4, 0, 0, 1, 1)
self.ram_usb_512 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_512.setObjectName("ram_usb_512")
self.gridLayout_8.addWidget(self.ram_usb_512, 0, 2, 1, 1)
self.ram_usb_1024 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_1024.setObjectName("ram_usb_1024")
self.gridLayout_8.addWidget(self.ram_usb_1024, 0, 4, 1, 1)
self.verticalLayout_4.addLayout(self.gridLayout_8)
self.gridLayout_6.addWidget(self.groupBox_4, 0, 0, 1, 1)
self.verticalLayout_2.addLayout(self.gridLayout_6)
spacerItem16 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem16)
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.tab_2)
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.gridLayout_10 = QtWidgets.QGridLayout()
self.gridLayout_10.setObjectName("gridLayout_10")
spacerItem17 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem17, 0, 1, 1, 1)
spacerItem18 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem18, 1, 0, 1, 1)
spacerItem19 = QtWidgets.QSpacerItem(20, 30, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem19, 2, 1, 1, 1)
self.label_5 = QtWidgets.QLabel(self.tab_2)
self.label_5.setObjectName("label_5")
self.gridLayout_10.addWidget(self.label_5, 1, 1, 1, 1)
spacerItem20 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem20, 1, 2, 1, 1)
self.horizontalLayout_6.addLayout(self.gridLayout_10)
self.tabWidget.addTab(self.tab_2, "")
self.horizontalLayout.addWidget(self.tabWidget)
self.retranslateUi(Dialog)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(Dialog)
Dialog.setTabOrder(self.comboBox, self.detect_usb)
Dialog.setTabOrder(self.detect_usb, self.lineEdit)
Dialog.setTabOrder(self.lineEdit, self.slider_persistence)
Dialog.setTabOrder(self.slider_persistence, self.uninstall)
Dialog.setTabOrder(self.uninstall, self.listWidget)
Dialog.setTabOrder(self.listWidget, self.close)
Dialog.setTabOrder(self.close, self.comboBox_2)
Dialog.setTabOrder(self.comboBox_2, self.pushButton)
Dialog.setTabOrder(self.pushButton, self.pushbtn_imager_refreshusb)
Dialog.setTabOrder(self.pushbtn_imager_refreshusb, self.lineEdit_3)
Dialog.setTabOrder(self.lineEdit_3, self.imager_write)
Dialog.setTabOrder(self.imager_write, self.imager_close)
Dialog.setTabOrder(self.imager_close, self.install_sys_only)
Dialog.setTabOrder(self.install_sys_only, self.install_sys_all)
Dialog.setTabOrder(self.install_sys_all, self.install_syslinux)
Dialog.setTabOrder(self.install_syslinux, self.edit_syslinux)
Dialog.setTabOrder(self.edit_syslinux, self.lineEdit_2)
Dialog.setTabOrder(self.lineEdit_2, self.browse_iso_qemu)
Dialog.setTabOrder(self.browse_iso_qemu, self.ram_iso_256)
Dialog.setTabOrder(self.ram_iso_256, self.ram_iso_512)
Dialog.setTabOrder(self.ram_iso_512, self.ram_iso_768)
Dialog.setTabOrder(self.ram_iso_768, self.ram_iso_1024)
Dialog.setTabOrder(self.ram_iso_1024, self.ram_iso_2048)
Dialog.setTabOrder(self.ram_iso_2048, self.boot_iso_qemu)
Dialog.setTabOrder(self.boot_iso_qemu, self.ram_usb_256)
Dialog.setTabOrder(self.ram_usb_256, self.ram_usb_512)
Dialog.setTabOrder(self.ram_usb_512, self.ram_usb_768)
Dialog.setTabOrder(self.ram_usb_768, self.ram_usb_1024)
Dialog.setTabOrder(self.ram_usb_1024, self.ram_usb_2048)
Dialog.setTabOrder(self.ram_usb_2048, self.boot_usb_qemu)
Dialog.setTabOrder(self.boot_usb_qemu, self.tabWidget)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "multibootusb"))
self.groupBox_6.setTitle(_translate("Dialog", "USB Details"))
self.label_usb_dev.setText(_translate("Dialog", "Drive:"))
self.label_usb_vendor.setText(_translate("Dialog", "Vendor:"))
self.label_usb_model.setText(_translate("Dialog", "Model:"))
self.label_usb_size.setText(_translate("Dialog", "Size:"))
self.label_usb_mount.setText(_translate("Dialog", "Mount:"))
self.close.setText(_translate("Dialog", "Quit"))
self.browse_iso.setText(_translate("Dialog", "Browse ISO"))
self.label_persistence.setText(_translate("Dialog", "Persistence"))
self.detect_usb.setText(_translate("Dialog", "Detect Drives"))
self.uninstall.setText(_translate("Dialog", "Uninstall Distro"))
self.slider_persistence.setToolTip(_translate("Dialog", "Choose Persistence size. Not all distros supports persistence..."))
self.checkBox_all_drives.setText(_translate("Dialog", "All Drives"))
self.label_persistence_value.setText(_translate("Dialog", "0 MB"))
self.create.setText(_translate("Dialog", "Install"))
self.status.setText(_translate("Dialog", "Status: Idle"))
self.labelstep1.setText(_translate("Dialog", "Step 1 :: Select drive"))
self.labelstep2.setText(_translate("Dialog", "Step 2 :: Select ISO"))
self.labelstep3.setText(_translate("Dialog", "Step 3 :: Install distro"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("Dialog", "MultiBootUSB"))
self.groupBox_10.setTitle(_translate("Dialog", "Select image"))
self.pushButton.setText(_translate("Dialog", "Browse image..."))
self.imager_bootable.setText(_translate("Dialog", "Bootable ISO"))
self.imager_iso_size.setText(_translate("Dialog", "Image Size"))
self.groupBox_9.setTitle(_translate("Dialog", "Select USB Drive"))
self.pushbtn_imager_refreshusb.setText(_translate("Dialog", "Refresh USB"))
self.label_imager_disk_label.setText(_translate("Dialog", "Disk Type:"))
self.label_imager_total_size.setText(_translate("Dialog", "Disk Size:"))
self.label_imager_uuid.setText(_translate("Dialog", "Disk Label:"))
self.imager_label_status.setText(_translate("Dialog", "Status: Idle"))
self.label_10.setText(_translate("Dialog", "<html><head/><body><p><span style=\" font-weight:600; color:#ff0000;\">WARNING</span> : Any bootable USB made using<span style=\" font-weight:600;\"> ISO Imager will destroy all data </span>on the selected USB disk. </p><p>Use it at your own risk. Developers are not responsile for loss of any data.</p></body></html>"))
self.imager_write.setText(_translate("Dialog", "Write Image"))
self.imager_close.setText(_translate("Dialog", "Quit"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.imager), _translate("Dialog", "Write Image to USB"))
self.groupBox_2.setTitle(_translate("Dialog", "Install Syslinux"))
self.install_sys_only.setText(_translate("Dialog", "Install only syslinu&x (existing configurations will not be altered)."))
self.install_sys_all.setText(_translate("Dialog", "Install syslinux and copy all re&quired files."))
self.install_syslinux.setText(_translate("Dialog", "Install"))
self.groupBox_3.setTitle(_translate("Dialog", "Edit syslinux.cfg"))
self.edit_syslinux.setText(_translate("Dialog", "Edit"))
self.label_2.setText(_translate("Dialog", "<html><head/><body><p align=\"justify\">Edit syslinux.cfg file directly using the default editor of your system. </p><p align=\"justify\">Be <span style=\" font-weight:600; color:#ff0000;\">CAREFUL</span> while editing syslinux.cfg!</p></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.syslinux_ab), _translate("Dialog", "Install Syslinux"))
self.groupBox_5.setTitle(_translate("Dialog", "Boot ISO :: Test bootable ISOs without reboot"))
self.boot_iso_qemu.setText(_translate("Dialog", "Boot ISO"))
self.browse_iso_qemu.setText(_translate("Dialog", "Browse ISO"))
self.label_3.setText(_translate("Dialog", "Choose RAM size:"))
self.ram_iso_256.setText(_translate("Dialog", "&256 MB"))
self.ram_iso_512.setText(_translate("Dialog", "&512 MB"))
self.ram_iso_768.setText(_translate("Dialog", "&768 MB"))
self.ram_iso_1024.setText(_translate("Dialog", "&1024 MB"))
self.ram_iso_2048.setText(_translate("Dialog", "204&8 MB"))
self.groupBox_4.setTitle(_translate("Dialog", "Boot USB :: Test bootable USB drive without reboot"))
self.ram_usb_2048.setText(_translate("Dialog", "20&48 MB"))
self.boot_usb_qemu.setText(_translate("Dialog", "Boot USB"))
self.ram_usb_256.setText(_translate("Dialog", "25&6 MB"))
self.ram_usb_768.setText(_translate("Dialog", "7&68 MB"))
self.label_4.setText(_translate("Dialog", "Choose RAM size:"))
self.ram_usb_512.setText(_translate("Dialog", "5&12 MB"))
self.ram_usb_1024.setText(_translate("Dialog", "1&024 MB"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", "Boot ISO/USB"))
self.label_5.setText(_translate("Dialog", "<html><head/><body><p align=\"center\">An advanced bootable usb creator with option to install/uninstall multiple distros.</p><p align=\"center\">This software is written in python and pyqt. </p><p align=\"center\">Copyright 2010-2016 Sundar</p><p align=\"center\"><span style=\" font-weight:600;\">Author(s)</span>: Sundar, Ian Bruce, Lee</p><p align=\"center\"><span style=\" font-weight:600;\">Licence</span>: GPL version 2 or later</p><p align=\"center\"><span style=\" font-weight:600;\">Home page</span>: <a href=\" http://multibootusb.org\"><span style=\" text-decoration: underline; color:#0000ff;\">http://multibootusb.org</span></a></p><p align=\"center\"><span style=\" font-weight:600;\">Help/Email</span>: feedback.multibootusb@gmail.com</p><p align=\"center\"><span style=\" font-weight:600;\">Source Code</span>: <a href=\"https://github.com/mbusb/multibootusb\"><span style=\" text-decoration: underline; color:#0000ff;\">https://github.com/mbusb/multibootusb</span></a></p><p><br/></p></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Dialog", "About"))

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'gui/about.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_About(object):
def setupUi(self, About):
About.setObjectName("About")
About.resize(640, 380)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(About.sizePolicy().hasHeightForWidth())
About.setSizePolicy(sizePolicy)
self.verticalLayout = QtWidgets.QVBoxLayout(About)
self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout_11 = QtWidgets.QGridLayout()
self.gridLayout_11.setObjectName("gridLayout_11")
self.label_6 = QtWidgets.QLabel(About)
self.label_6.setObjectName("label_6")
self.gridLayout_11.addWidget(self.label_6, 1, 1, 1, 1)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_11.addItem(spacerItem, 1, 2, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_11.addItem(spacerItem1, 1, 0, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_11.addItem(spacerItem2, 0, 1, 1, 1)
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_11.addItem(spacerItem3, 2, 1, 1, 1)
self.verticalLayout.addLayout(self.gridLayout_11)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem4)
self.button_close = QtWidgets.QPushButton(About)
self.button_close.setObjectName("button_close")
self.horizontalLayout.addWidget(self.button_close)
self.verticalLayout.addLayout(self.horizontalLayout)
self.retranslateUi(About)
QtCore.QMetaObject.connectSlotsByName(About)
def retranslateUi(self, About):
_translate = QtCore.QCoreApplication.translate
About.setWindowTitle(_translate("About", "Dialog"))
self.label_6.setText(_translate("About", "<html><head/><body><p align=\"center\">An advanced bootable usb creator with option to install/uninstall multiple distros.</p><p align=\"center\">This software is written in Python and PyQt. </p><p align=\"center\">Copyright 2010-2017 Sundar</p><p align=\"center\"><span style=\" font-weight:600;\">Author(s)</span>: Sundar, Ian Bruce, Lee</p><p align=\"center\"><span style=\" font-weight:600;\">Licence</span>: GPL version 2 or later</p><p align=\"center\"><span style=\" font-weight:600;\">Home page</span>: <a href=\" http://multibootusb.org\"><span style=\" text-decoration: underline; color:#0000ff;\">http://multibootusb.org</span></a></p><p align=\"center\"><span style=\" font-weight:600;\">Help/Email</span>: feedback.multibootusb@gmail.com</p><p align=\"center\"><span style=\" font-weight:600;\">Source Code</span>: <a href=\"https://github.com/mbusb/multibootusb\"><span style=\" text-decoration: underline; color:#0000ff;\">https://github.com/mbusb/multibootusb</span></a></p><p><br/></p></body></html>"))
self.button_close.setText(_translate("About", "Close"))

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'gui/multibootusb.ui'
# Form implementation generated from reading ui file 'gui/test.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
@ -8,512 +8,420 @@
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(717, 516)
self.horizontalLayout = QtWidgets.QHBoxLayout(Dialog)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(629, 593)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout_7.setObjectName("verticalLayout_7")
self.verticalLayout_5 = QtWidgets.QVBoxLayout()
self.verticalLayout_5.setContentsMargins(5, 5, 5, 5)
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.tabWidget = QtWidgets.QTabWidget(Dialog)
self.tabWidget.setEnabled(True)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setEnabled(True)
self.tab_3.setObjectName("tab_3")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tab_3)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setContentsMargins(5, 5, 5, 5)
self.gridLayout.setObjectName("gridLayout")
self.groupBox_6 = QtWidgets.QGroupBox(self.tab_3)
self.groupBox_6.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing)
self.groupBox_6.setFlat(False)
self.groupBox_6.setCheckable(False)
self.groupBox_6.setObjectName("groupBox_6")
self.formLayout = QtWidgets.QFormLayout(self.groupBox_6)
self.gridLayout_disk = QtWidgets.QGridLayout()
self.gridLayout_disk.setContentsMargins(-1, 10, -1, -1)
self.gridLayout_disk.setObjectName("gridLayout_disk")
self.label_select_usb_disk = QtWidgets.QLabel(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_select_usb_disk.sizePolicy().hasHeightForWidth())
self.label_select_usb_disk.setSizePolicy(sizePolicy)
self.label_select_usb_disk.setMinimumSize(QtCore.QSize(100, 0))
self.label_select_usb_disk.setObjectName("label_select_usb_disk")
self.gridLayout_disk.addWidget(self.label_select_usb_disk, 0, 0, 1, 3)
self.combo_drives = QtWidgets.QComboBox(self.centralwidget)
self.combo_drives.setObjectName("combo_drives")
self.gridLayout_disk.addWidget(self.combo_drives, 1, 0, 1, 3)
self.button_detect_drives = QtWidgets.QPushButton(self.centralwidget)
self.button_detect_drives.setObjectName("button_detect_drives")
self.gridLayout_disk.addWidget(self.button_detect_drives, 1, 3, 1, 1)
self.checkbox_all_drives = QtWidgets.QCheckBox(self.centralwidget)
self.checkbox_all_drives.setObjectName("checkbox_all_drives")
self.gridLayout_disk.addWidget(self.checkbox_all_drives, 0, 3, 1, 1)
self.group_usb_details = QtWidgets.QGroupBox(self.centralwidget)
self.group_usb_details.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing)
self.group_usb_details.setFlat(False)
self.group_usb_details.setCheckable(False)
self.group_usb_details.setObjectName("group_usb_details")
self.formLayout = QtWidgets.QFormLayout(self.group_usb_details)
self.formLayout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout.setObjectName("formLayout")
self.label_usb_dev = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_dev = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_dev.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_usb_dev.setObjectName("label_usb_dev")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_usb_dev)
self.usb_dev = QtWidgets.QLabel(self.groupBox_6)
self.usb_dev = QtWidgets.QLabel(self.group_usb_details)
self.usb_dev.setText("")
self.usb_dev.setObjectName("usb_dev")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.usb_dev)
self.label_usb_vendor = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_vendor = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_vendor.setObjectName("label_usb_vendor")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_usb_vendor)
self.usb_vendor = QtWidgets.QLabel(self.groupBox_6)
self.usb_vendor = QtWidgets.QLabel(self.group_usb_details)
self.usb_vendor.setText("")
self.usb_vendor.setObjectName("usb_vendor")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.usb_vendor)
self.label_usb_model = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_model = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_model.setObjectName("label_usb_model")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_usb_model)
self.label_usb_size = QtWidgets.QLabel(self.groupBox_6)
self.usb_model = QtWidgets.QLabel(self.group_usb_details)
self.usb_model.setText("")
self.usb_model.setObjectName("usb_model")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.usb_model)
self.label_usb_size = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_size.setFrameShape(QtWidgets.QFrame.NoFrame)
self.label_usb_size.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_usb_size.setObjectName("label_usb_size")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_usb_size)
self.label_usb_mount = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_mount.setObjectName("label_usb_mount")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_usb_mount)
self.usb_model = QtWidgets.QLabel(self.groupBox_6)
self.usb_model.setText("")
self.usb_model.setObjectName("usb_model")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.usb_model)
self.usb_size = QtWidgets.QLabel(self.groupBox_6)
self.usb_size = QtWidgets.QLabel(self.group_usb_details)
self.usb_size.setText("")
self.usb_size.setObjectName("usb_size")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.usb_size)
self.usb_mount = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_mount = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_mount.setObjectName("label_usb_mount")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_usb_mount)
self.usb_mount = QtWidgets.QLabel(self.group_usb_details)
self.usb_mount.setText("")
self.usb_mount.setObjectName("usb_mount")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.usb_mount)
self.gridLayout.addWidget(self.groupBox_6, 2, 0, 1, 5)
self.close = QtWidgets.QPushButton(self.tab_3)
self.close.setObjectName("close")
self.gridLayout.addWidget(self.close, 9, 6, 1, 1)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 8, 0, 1, 1)
self.browse_iso = QtWidgets.QPushButton(self.tab_3)
self.browse_iso.setCheckable(False)
self.browse_iso.setFlat(False)
self.browse_iso.setObjectName("browse_iso")
self.gridLayout.addWidget(self.browse_iso, 4, 4, 1, 1)
self.listWidget = QtWidgets.QListWidget(self.tab_3)
self.listWidget.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.listWidget.setFrameShadow(QtWidgets.QFrame.Sunken)
self.listWidget.setResizeMode(QtWidgets.QListView.Fixed)
self.listWidget.setObjectName("listWidget")
self.gridLayout.addWidget(self.listWidget, 1, 5, 8, 2)
self.label_persistence = QtWidgets.QLabel(self.tab_3)
self.label_persistence.setEnabled(False)
self.label_persistence.setMouseTracking(True)
self.label_persistence.setStyleSheet("font-weight: 600")
self.label_persistence.setObjectName("label_persistence")
self.gridLayout.addWidget(self.label_persistence, 6, 0, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.tab_3)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 4, 0, 1, 4)
self.detect_usb = QtWidgets.QPushButton(self.tab_3)
self.detect_usb.setObjectName("detect_usb")
self.gridLayout.addWidget(self.detect_usb, 1, 2, 1, 2)
self.uninstall = QtWidgets.QPushButton(self.tab_3)
self.uninstall.setObjectName("uninstall")
self.gridLayout.addWidget(self.uninstall, 0, 5, 1, 2)
self.comboBox = QtWidgets.QComboBox(self.tab_3)
self.comboBox.setObjectName("comboBox")
self.gridLayout.addWidget(self.comboBox, 1, 0, 1, 2)
self.slider_persistence = QtWidgets.QSlider(self.tab_3)
self.gridLayout_disk.addWidget(self.group_usb_details, 3, 0, 1, 4)
self.horizontalLayout.addLayout(self.gridLayout_disk)
self.gridLayout_image = QtWidgets.QGridLayout()
self.gridLayout_image.setContentsMargins(10, 10, -1, -1)
self.gridLayout_image.setObjectName("gridLayout_image")
self.image_details_group = QtWidgets.QGroupBox(self.centralwidget)
self.image_details_group.setObjectName("image_details_group")
self.formLayout_2 = QtWidgets.QFormLayout(self.image_details_group)
self.formLayout_2.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout_2.setObjectName("formLayout_2")
self.label_image_type = QtWidgets.QLabel(self.image_details_group)
self.label_image_type.setObjectName("label_image_type")
self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_image_type)
self.label_image_type_value = QtWidgets.QLabel(self.image_details_group)
self.label_image_type_value.setText("")
self.label_image_type_value.setObjectName("label_image_type_value")
self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.label_image_type_value)
self.label_image_size = QtWidgets.QLabel(self.image_details_group)
self.label_image_size.setObjectName("label_image_size")
self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_image_size)
self.label_image_size_value = QtWidgets.QLabel(self.image_details_group)
self.label_image_size_value.setText("")
self.label_image_size_value.setObjectName("label_image_size_value")
self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.label_image_size_value)
self.label_image_bootable = QtWidgets.QLabel(self.image_details_group)
self.label_image_bootable.setObjectName("label_image_bootable")
self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_image_bootable)
self.label_image_bootable_value = QtWidgets.QLabel(self.image_details_group)
self.label_image_bootable_value.setText("")
self.label_image_bootable_value.setObjectName("label_image_bootable_value")
self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.label_image_bootable_value)
self.gridLayout_image.addWidget(self.image_details_group, 2, 0, 1, 2)
self.button_browse_image = QtWidgets.QPushButton(self.centralwidget)
self.button_browse_image.setCheckable(False)
self.button_browse_image.setFlat(False)
self.button_browse_image.setObjectName("button_browse_image")
self.gridLayout_image.addWidget(self.button_browse_image, 0, 1, 1, 1)
self.label_select_image = QtWidgets.QLabel(self.centralwidget)
self.label_select_image.setObjectName("label_select_image")
self.gridLayout_image.addWidget(self.label_select_image, 0, 0, 1, 1)
self.image_path = QtWidgets.QLineEdit(self.centralwidget)
self.image_path.setObjectName("image_path")
self.gridLayout_image.addWidget(self.image_path, 1, 0, 1, 2)
self.horizontalLayout.addLayout(self.gridLayout_image)
self.verticalLayout_5.addLayout(self.horizontalLayout)
self.verticalLayout_7.addLayout(self.verticalLayout_5)
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setEnabled(True)
self.tabWidget.setAutoFillBackground(False)
self.tabWidget.setObjectName("tabWidget")
self.tab_multibootusb = QtWidgets.QWidget()
self.tab_multibootusb.setEnabled(True)
self.tab_multibootusb.setObjectName("tab_multibootusb")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tab_multibootusb)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setContentsMargins(5, 5, 5, 5)
self.gridLayout.setObjectName("gridLayout")
self.button_uninstall_distro = QtWidgets.QPushButton(self.tab_multibootusb)
self.button_uninstall_distro.setObjectName("button_uninstall_distro")
self.gridLayout.addWidget(self.button_uninstall_distro, 0, 3, 1, 1)
self.button_install_distro = QtWidgets.QPushButton(self.tab_multibootusb)
self.button_install_distro.setObjectName("button_install_distro")
self.gridLayout.addWidget(self.button_install_distro, 0, 2, 1, 1)
self.slider_persistence = QtWidgets.QSlider(self.tab_multibootusb)
self.slider_persistence.setEnabled(False)
self.slider_persistence.setAutoFillBackground(False)
self.slider_persistence.setOrientation(QtCore.Qt.Horizontal)
self.slider_persistence.setTickPosition(QtWidgets.QSlider.TicksBothSides)
self.slider_persistence.setObjectName("slider_persistence")
self.gridLayout.addWidget(self.slider_persistence, 6, 1, 1, 3)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 8, 2, 1, 2)
self.checkBox_all_drives = QtWidgets.QCheckBox(self.tab_3)
self.checkBox_all_drives.setObjectName("checkBox_all_drives")
self.gridLayout.addWidget(self.checkBox_all_drives, 1, 4, 1, 1)
self.label_persistence_value = QtWidgets.QLabel(self.tab_3)
self.gridLayout.addWidget(self.slider_persistence, 2, 0, 1, 2)
self.installed_distros = QtWidgets.QListWidget(self.tab_multibootusb)
self.installed_distros.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.installed_distros.setFrameShadow(QtWidgets.QFrame.Sunken)
self.installed_distros.setResizeMode(QtWidgets.QListView.Fixed)
self.installed_distros.setObjectName("installed_distros")
self.gridLayout.addWidget(self.installed_distros, 2, 2, 2, 2)
self.label_persistence = QtWidgets.QLabel(self.tab_multibootusb)
self.label_persistence.setEnabled(False)
self.label_persistence.setMouseTracking(True)
self.label_persistence.setStyleSheet("font-weight: 600")
self.label_persistence.setObjectName("label_persistence")
self.gridLayout.addWidget(self.label_persistence, 0, 0, 1, 1)
self.label_persistence_value = QtWidgets.QLabel(self.tab_multibootusb)
self.label_persistence_value.setEnabled(False)
self.label_persistence_value.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_persistence_value.setObjectName("label_persistence_value")
self.gridLayout.addWidget(self.label_persistence_value, 6, 4, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem2, 8, 1, 1, 1)
self.create = QtWidgets.QPushButton(self.tab_3)
self.create.setObjectName("create")
self.gridLayout.addWidget(self.create, 7, 4, 1, 1)
self.progressBar = QtWidgets.QProgressBar(self.tab_3)
self.progressBar.setProperty("value", 0)
self.progressBar.setInvertedAppearance(False)
self.progressBar.setObjectName("progressBar")
self.gridLayout.addWidget(self.progressBar, 7, 0, 1, 4)
self.status = QtWidgets.QLabel(self.tab_3)
self.status.setMinimumSize(QtCore.QSize(0, 0))
self.status.setAcceptDrops(False)
self.status.setAutoFillBackground(False)
self.status.setFrameShadow(QtWidgets.QFrame.Plain)
self.status.setTextFormat(QtCore.Qt.AutoText)
self.status.setScaledContents(False)
self.status.setObjectName("status")
self.gridLayout.addWidget(self.status, 9, 0, 1, 6)
self.labelstep1 = QtWidgets.QLabel(self.tab_3)
self.labelstep1.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep1.setObjectName("labelstep1")
self.gridLayout.addWidget(self.labelstep1, 0, 0, 1, 5)
self.labelstep2 = QtWidgets.QLabel(self.tab_3)
self.labelstep2.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep2.setObjectName("labelstep2")
self.gridLayout.addWidget(self.labelstep2, 3, 0, 1, 5)
self.labelstep3 = QtWidgets.QLabel(self.tab_3)
self.labelstep3.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep3.setObjectName("labelstep3")
self.gridLayout.addWidget(self.labelstep3, 5, 0, 1, 5)
self.gridLayout.addWidget(self.label_persistence_value, 0, 1, 1, 1)
self.horizontalLayout_2.addLayout(self.gridLayout)
self.tabWidget.addTab(self.tab_3, "")
self.imager = QtWidgets.QWidget()
self.imager.setEnabled(True)
self.imager.setObjectName("imager")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.imager)
self.tabWidget.addTab(self.tab_multibootusb, "")
self.tab_imager = QtWidgets.QWidget()
self.tab_imager.setEnabled(True)
self.tab_imager.setObjectName("tab_imager")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.tab_imager)
self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.gridLayout_9 = QtWidgets.QGridLayout()
self.gridLayout_9.setContentsMargins(5, 5, 5, 5)
self.gridLayout_9.setObjectName("gridLayout_9")
self.widget_7 = QtWidgets.QWidget(self.imager)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_9.addItem(spacerItem, 1, 2, 1, 1)
self.button_write_image_to_disk = QtWidgets.QPushButton(self.tab_imager)
self.button_write_image_to_disk.setObjectName("button_write_image_to_disk")
self.gridLayout_9.addWidget(self.button_write_image_to_disk, 1, 1, 1, 1)
self.widget_7 = QtWidgets.QWidget(self.tab_imager)
self.widget_7.setObjectName("widget_7")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.widget_7)
self.verticalLayout_6.setContentsMargins(5, 5, 5, 5)
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.gridLayout_11 = QtWidgets.QGridLayout()
self.gridLayout_11.setObjectName("gridLayout_11")
self.groupBox_10 = QtWidgets.QGroupBox(self.widget_7)
self.groupBox_10.setObjectName("groupBox_10")
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.groupBox_10)
self.verticalLayout_9.setObjectName("verticalLayout_9")
self.pushButton = QtWidgets.QPushButton(self.groupBox_10)
self.pushButton.setObjectName("pushButton")
self.verticalLayout_9.addWidget(self.pushButton)
self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_10)
self.lineEdit_3.setObjectName("lineEdit_3")
self.verticalLayout_9.addWidget(self.lineEdit_3)
self.imager_bootable = QtWidgets.QLabel(self.groupBox_10)
self.imager_bootable.setObjectName("imager_bootable")
self.verticalLayout_9.addWidget(self.imager_bootable)
self.imager_iso_size = QtWidgets.QLabel(self.groupBox_10)
self.imager_iso_size.setObjectName("imager_iso_size")
self.verticalLayout_9.addWidget(self.imager_iso_size)
self.gridLayout_9.addWidget(self.widget_7, 1, 3, 1, 2)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_9.addItem(spacerItem1, 1, 0, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_9.addItem(spacerItem2, 0, 1, 1, 1)
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_9.addItem(spacerItem3)
self.gridLayout_11.addWidget(self.groupBox_10, 0, 1, 1, 1)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_11.addItem(spacerItem4, 1, 0, 1, 1)
self.groupBox_9 = QtWidgets.QGroupBox(self.widget_7)
self.groupBox_9.setStyleSheet("")
self.groupBox_9.setObjectName("groupBox_9")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.groupBox_9)
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.comboBox_2 = QtWidgets.QComboBox(self.groupBox_9)
self.comboBox_2.setObjectName("comboBox_2")
self.verticalLayout_8.addWidget(self.comboBox_2)
self.pushbtn_imager_refreshusb = QtWidgets.QPushButton(self.groupBox_9)
self.pushbtn_imager_refreshusb.setObjectName("pushbtn_imager_refreshusb")
self.verticalLayout_8.addWidget(self.pushbtn_imager_refreshusb)
self.formLayout_3 = QtWidgets.QFormLayout()
self.formLayout_3.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout_3.setObjectName("formLayout_3")
self.label_imager_disk_label = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_disk_label.setObjectName("label_imager_disk_label")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_imager_disk_label)
self.label_imager_total_size = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_total_size.setObjectName("label_imager_total_size")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_imager_total_size)
self.label_imager_uuid = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_uuid.setObjectName("label_imager_uuid")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_imager_uuid)
self.imager_disk_label = QtWidgets.QLabel(self.groupBox_9)
self.imager_disk_label.setText("")
self.imager_disk_label.setObjectName("imager_disk_label")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.imager_disk_label)
self.imager_total_size = QtWidgets.QLabel(self.groupBox_9)
self.imager_total_size.setText("")
self.imager_total_size.setObjectName("imager_total_size")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.imager_total_size)
self.imager_uuid = QtWidgets.QLabel(self.groupBox_9)
self.imager_uuid.setText("")
self.imager_uuid.setObjectName("imager_uuid")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.imager_uuid)
self.verticalLayout_8.addLayout(self.formLayout_3)
spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_8.addItem(spacerItem5)
self.gridLayout_11.addWidget(self.groupBox_9, 0, 0, 1, 1)
self.verticalLayout_6.addLayout(self.gridLayout_11)
self.imager_label_status = QtWidgets.QLabel(self.widget_7)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.imager_label_status.sizePolicy().hasHeightForWidth())
self.imager_label_status.setSizePolicy(sizePolicy)
self.imager_label_status.setObjectName("imager_label_status")
self.verticalLayout_6.addWidget(self.imager_label_status)
self.gridLayout_12 = QtWidgets.QGridLayout()
self.gridLayout_12.setObjectName("gridLayout_12")
self.label_10 = QtWidgets.QLabel(self.widget_7)
self.label_10.setObjectName("label_10")
self.gridLayout_12.addWidget(self.label_10, 1, 0, 1, 3)
self.imager_progressbar = QtWidgets.QProgressBar(self.widget_7)
self.imager_progressbar.setProperty("value", 0)
self.imager_progressbar.setObjectName("imager_progressbar")
self.gridLayout_12.addWidget(self.imager_progressbar, 0, 0, 1, 3)
self.imager_write = QtWidgets.QPushButton(self.widget_7)
self.imager_write.setObjectName("imager_write")
self.gridLayout_12.addWidget(self.imager_write, 2, 2, 1, 1)
self.verticalLayout_6.addLayout(self.gridLayout_12)
self.gridLayout_9.addWidget(self.widget_7, 0, 0, 1, 2)
self.imager_close = QtWidgets.QPushButton(self.imager)
self.imager_close.setObjectName("imager_close")
self.gridLayout_9.addWidget(self.imager_close, 1, 1, 1, 1)
spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_9.addItem(spacerItem6, 1, 0, 1, 1)
self.gridLayout_9.addItem(spacerItem3, 2, 1, 1, 1)
self.horizontalLayout_7.addLayout(self.gridLayout_9)
self.tabWidget.addTab(self.imager, "")
self.syslinux_ab = QtWidgets.QWidget()
self.syslinux_ab.setObjectName("syslinux_ab")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.syslinux_ab)
self.tabWidget.addTab(self.tab_imager, "")
self.tab_syslinux = QtWidgets.QWidget()
self.tab_syslinux.setObjectName("tab_syslinux")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.tab_syslinux)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.gridLayout_2 = QtWidgets.QGridLayout()
self.gridLayout_2.setObjectName("gridLayout_2")
self.groupBox_2 = QtWidgets.QGroupBox(self.syslinux_ab)
self.groupBox_2 = QtWidgets.QGroupBox(self.tab_syslinux)
self.groupBox_2.setAutoFillBackground(False)
self.groupBox_2.setObjectName("groupBox_2")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.groupBox_2)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3")
self.install_sys_only = QtWidgets.QRadioButton(self.groupBox_2)
self.install_sys_only.setObjectName("install_sys_only")
self.gridLayout_3.addWidget(self.install_sys_only, 0, 0, 1, 1)
self.install_sys_all = QtWidgets.QRadioButton(self.groupBox_2)
self.install_sys_all.setObjectName("install_sys_all")
self.gridLayout_3.addWidget(self.install_sys_all, 1, 0, 1, 1)
self.install_syslinux = QtWidgets.QPushButton(self.groupBox_2)
self.install_syslinux.setObjectName("install_syslinux")
self.gridLayout_3.addWidget(self.install_syslinux, 0, 2, 2, 1)
spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_3.addItem(spacerItem7, 0, 1, 2, 1)
self.check_install_sys_only = QtWidgets.QRadioButton(self.groupBox_2)
self.check_install_sys_only.setObjectName("check_install_sys_only")
self.gridLayout_3.addWidget(self.check_install_sys_only, 0, 0, 1, 1)
self.check_install_sys_all = QtWidgets.QRadioButton(self.groupBox_2)
self.check_install_sys_all.setObjectName("check_install_sys_all")
self.gridLayout_3.addWidget(self.check_install_sys_all, 1, 0, 1, 1)
self.button_install_syslinux = QtWidgets.QPushButton(self.groupBox_2)
self.button_install_syslinux.setObjectName("button_install_syslinux")
self.gridLayout_3.addWidget(self.button_install_syslinux, 0, 2, 2, 1)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_3.addItem(spacerItem4, 0, 1, 2, 1)
self.horizontalLayout_4.addLayout(self.gridLayout_3)
self.gridLayout_2.addWidget(self.groupBox_2, 0, 0, 1, 1)
spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_2.addItem(spacerItem8, 3, 0, 1, 1)
self.groupBox_3 = QtWidgets.QGroupBox(self.syslinux_ab)
spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_2.addItem(spacerItem5, 3, 0, 1, 1)
self.groupBox_3 = QtWidgets.QGroupBox(self.tab_syslinux)
self.groupBox_3.setObjectName("groupBox_3")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.groupBox_3)
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.gridLayout_4 = QtWidgets.QGridLayout()
self.gridLayout_4.setObjectName("gridLayout_4")
self.edit_syslinux = QtWidgets.QPushButton(self.groupBox_3)
self.edit_syslinux.setObjectName("edit_syslinux")
self.gridLayout_4.addWidget(self.edit_syslinux, 0, 2, 1, 1)
self.button_edit_syslinux = QtWidgets.QPushButton(self.groupBox_3)
self.button_edit_syslinux.setObjectName("button_edit_syslinux")
self.gridLayout_4.addWidget(self.button_edit_syslinux, 0, 2, 1, 1)
self.label_2 = QtWidgets.QLabel(self.groupBox_3)
self.label_2.setObjectName("label_2")
self.gridLayout_4.addWidget(self.label_2, 0, 0, 1, 1)
spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_4.addItem(spacerItem9, 0, 1, 1, 1)
spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_4.addItem(spacerItem6, 0, 1, 1, 1)
self.horizontalLayout_5.addLayout(self.gridLayout_4)
self.gridLayout_2.addWidget(self.groupBox_3, 2, 0, 1, 1)
spacerItem10 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
self.gridLayout_2.addItem(spacerItem10, 1, 0, 1, 1)
spacerItem7 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
self.gridLayout_2.addItem(spacerItem7, 1, 0, 1, 1)
self.horizontalLayout_3.addLayout(self.gridLayout_2)
self.tabWidget.addTab(self.syslinux_ab, "")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab)
self.tabWidget.addTab(self.tab_syslinux, "")
self.tab_testboot = QtWidgets.QWidget()
self.tab_testboot.setObjectName("tab_testboot")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab_testboot)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.groupBox_5 = QtWidgets.QGroupBox(self.tab)
self.groupBox_5.setObjectName("groupBox_5")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_5)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.gridLayout_7 = QtWidgets.QGridLayout()
self.gridLayout_7.setObjectName("gridLayout_7")
spacerItem11 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_7.addItem(spacerItem11, 3, 0, 1, 1)
spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_7.addItem(spacerItem12, 1, 6, 1, 1)
self.boot_iso_qemu = QtWidgets.QPushButton(self.groupBox_5)
self.boot_iso_qemu.setObjectName("boot_iso_qemu")
self.gridLayout_7.addWidget(self.boot_iso_qemu, 3, 6, 1, 1)
self.browse_iso_qemu = QtWidgets.QPushButton(self.groupBox_5)
self.browse_iso_qemu.setObjectName("browse_iso_qemu")
self.gridLayout_7.addWidget(self.browse_iso_qemu, 0, 6, 1, 1)
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox_5)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout_7.addWidget(self.lineEdit_2, 0, 0, 1, 6)
spacerItem13 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_7.addItem(spacerItem13, 2, 6, 1, 1)
self.label_3 = QtWidgets.QLabel(self.groupBox_5)
self.label_3.setObjectName("label_3")
self.gridLayout_7.addWidget(self.label_3, 2, 0, 1, 1)
self.ram_iso_256 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_256.setObjectName("ram_iso_256")
self.gridLayout_7.addWidget(self.ram_iso_256, 2, 1, 1, 1)
self.ram_iso_512 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_512.setObjectName("ram_iso_512")
self.gridLayout_7.addWidget(self.ram_iso_512, 2, 2, 1, 1)
self.ram_iso_768 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_768.setObjectName("ram_iso_768")
self.gridLayout_7.addWidget(self.ram_iso_768, 2, 3, 1, 1)
self.ram_iso_1024 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_1024.setObjectName("ram_iso_1024")
self.gridLayout_7.addWidget(self.ram_iso_1024, 2, 4, 1, 1)
self.ram_iso_2048 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_2048.setObjectName("ram_iso_2048")
self.gridLayout_7.addWidget(self.ram_iso_2048, 2, 5, 1, 1)
self.verticalLayout_3.addLayout(self.gridLayout_7)
self.verticalLayout_2.addWidget(self.groupBox_5)
self.gridLayout_6 = QtWidgets.QGridLayout()
self.gridLayout_6.setContentsMargins(-1, 10, -1, -1)
self.gridLayout_6.setVerticalSpacing(20)
self.gridLayout_6.setObjectName("gridLayout_6")
self.groupBox_4 = QtWidgets.QGroupBox(self.tab)
self.groupBox_4 = QtWidgets.QGroupBox(self.tab_testboot)
self.groupBox_4.setStyleSheet("")
self.groupBox_4.setObjectName("groupBox_4")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_4)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.gridLayout_8 = QtWidgets.QGridLayout()
self.gridLayout_8.setObjectName("gridLayout_8")
self.ram_usb_2048 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_2048.setObjectName("ram_usb_2048")
self.gridLayout_8.addWidget(self.ram_usb_2048, 0, 5, 1, 1)
spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_8.addItem(spacerItem14, 0, 6, 1, 1)
spacerItem15 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_8.addItem(spacerItem15, 1, 0, 1, 1)
self.boot_usb_qemu = QtWidgets.QPushButton(self.groupBox_4)
self.boot_usb_qemu.setObjectName("boot_usb_qemu")
self.gridLayout_8.addWidget(self.boot_usb_qemu, 1, 6, 1, 1)
self.ram_usb_256 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_256.setObjectName("ram_usb_256")
self.gridLayout_8.addWidget(self.ram_usb_256, 0, 1, 1, 1)
self.ram_usb_768 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_768.setObjectName("ram_usb_768")
self.gridLayout_8.addWidget(self.ram_usb_768, 0, 3, 1, 1)
self.combo_usb_boot_ram = QtWidgets.QComboBox(self.groupBox_4)
self.combo_usb_boot_ram.setObjectName("combo_usb_boot_ram")
self.combo_usb_boot_ram.addItem("")
self.combo_usb_boot_ram.addItem("")
self.combo_usb_boot_ram.addItem("")
self.combo_usb_boot_ram.addItem("")
self.combo_usb_boot_ram.addItem("")
self.combo_usb_boot_ram.addItem("")
self.gridLayout_8.addWidget(self.combo_usb_boot_ram, 0, 1, 1, 1)
self.label_4 = QtWidgets.QLabel(self.groupBox_4)
self.label_4.setObjectName("label_4")
self.gridLayout_8.addWidget(self.label_4, 0, 0, 1, 1)
self.ram_usb_512 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_512.setObjectName("ram_usb_512")
self.gridLayout_8.addWidget(self.ram_usb_512, 0, 2, 1, 1)
self.ram_usb_1024 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_1024.setObjectName("ram_usb_1024")
self.gridLayout_8.addWidget(self.ram_usb_1024, 0, 4, 1, 1)
spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_8.addItem(spacerItem8, 0, 5, 1, 1)
self.boot_usb_qemu = QtWidgets.QPushButton(self.groupBox_4)
self.boot_usb_qemu.setObjectName("boot_usb_qemu")
self.gridLayout_8.addWidget(self.boot_usb_qemu, 0, 4, 1, 1)
spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_8.addItem(spacerItem9, 0, 3, 1, 1)
self.label_5 = QtWidgets.QLabel(self.groupBox_4)
self.label_5.setObjectName("label_5")
self.gridLayout_8.addWidget(self.label_5, 0, 2, 1, 1)
self.verticalLayout_4.addLayout(self.gridLayout_8)
self.gridLayout_6.addWidget(self.groupBox_4, 0, 0, 1, 1)
self.gridLayout_6.addWidget(self.groupBox_4, 1, 0, 1, 1)
self.groupBox_5 = QtWidgets.QGroupBox(self.tab_testboot)
self.groupBox_5.setObjectName("groupBox_5")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_5)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.gridLayout_7 = QtWidgets.QGridLayout()
self.gridLayout_7.setObjectName("gridLayout_7")
self.label_3 = QtWidgets.QLabel(self.groupBox_5)
self.label_3.setObjectName("label_3")
self.gridLayout_7.addWidget(self.label_3, 0, 0, 1, 1)
self.boot_iso_qemu = QtWidgets.QPushButton(self.groupBox_5)
self.boot_iso_qemu.setObjectName("boot_iso_qemu")
self.gridLayout_7.addWidget(self.boot_iso_qemu, 0, 4, 1, 1)
spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_7.addItem(spacerItem10, 0, 3, 1, 1)
self.combo_iso_boot_ram = QtWidgets.QComboBox(self.groupBox_5)
self.combo_iso_boot_ram.setObjectName("combo_iso_boot_ram")
self.combo_iso_boot_ram.addItem("")
self.combo_iso_boot_ram.addItem("")
self.combo_iso_boot_ram.addItem("")
self.combo_iso_boot_ram.addItem("")
self.combo_iso_boot_ram.addItem("")
self.combo_iso_boot_ram.addItem("")
self.gridLayout_7.addWidget(self.combo_iso_boot_ram, 0, 1, 1, 1)
spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_7.addItem(spacerItem11, 0, 5, 1, 1)
self.label = QtWidgets.QLabel(self.groupBox_5)
self.label.setObjectName("label")
self.gridLayout_7.addWidget(self.label, 0, 2, 1, 1)
self.verticalLayout_3.addLayout(self.gridLayout_7)
self.gridLayout_6.addWidget(self.groupBox_5, 0, 0, 1, 1)
self.verticalLayout_2.addLayout(self.gridLayout_6)
spacerItem16 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem16)
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.tab_2)
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.gridLayout_10 = QtWidgets.QGridLayout()
self.gridLayout_10.setObjectName("gridLayout_10")
spacerItem17 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem17, 0, 1, 1, 1)
spacerItem18 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem18, 1, 0, 1, 1)
spacerItem19 = QtWidgets.QSpacerItem(20, 30, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem19, 2, 1, 1, 1)
self.label_5 = QtWidgets.QLabel(self.tab_2)
self.label_5.setObjectName("label_5")
self.gridLayout_10.addWidget(self.label_5, 1, 1, 1, 1)
spacerItem20 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem20, 1, 2, 1, 1)
self.horizontalLayout_6.addLayout(self.gridLayout_10)
self.tabWidget.addTab(self.tab_2, "")
self.horizontalLayout.addWidget(self.tabWidget)
spacerItem12 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem12)
self.tabWidget.addTab(self.tab_testboot, "")
self.verticalLayout_7.addWidget(self.tabWidget)
self.progressbar = QtWidgets.QProgressBar(self.centralwidget)
self.progressbar.setProperty("value", 0)
self.progressbar.setInvertedAppearance(False)
self.progressbar.setObjectName("progressbar")
self.verticalLayout_7.addWidget(self.progressbar)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 629, 19))
self.menubar.setNativeMenuBar(True)
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
self.menu_Help = QtWidgets.QMenu(self.menubar)
self.menu_Help.setObjectName("menu_Help")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.action_Quit = QtWidgets.QAction(MainWindow)
self.action_Quit.setObjectName("action_Quit")
self.action_About = QtWidgets.QAction(MainWindow)
self.action_About.setObjectName("action_About")
self.menuFile.addAction(self.action_Quit)
self.menu_Help.addAction(self.action_About)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menu_Help.menuAction())
self.retranslateUi(Dialog)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(Dialog)
Dialog.setTabOrder(self.comboBox, self.detect_usb)
Dialog.setTabOrder(self.detect_usb, self.lineEdit)
Dialog.setTabOrder(self.lineEdit, self.slider_persistence)
Dialog.setTabOrder(self.slider_persistence, self.uninstall)
Dialog.setTabOrder(self.uninstall, self.listWidget)
Dialog.setTabOrder(self.listWidget, self.close)
Dialog.setTabOrder(self.close, self.comboBox_2)
Dialog.setTabOrder(self.comboBox_2, self.pushButton)
Dialog.setTabOrder(self.pushButton, self.pushbtn_imager_refreshusb)
Dialog.setTabOrder(self.pushbtn_imager_refreshusb, self.lineEdit_3)
Dialog.setTabOrder(self.lineEdit_3, self.imager_write)
Dialog.setTabOrder(self.imager_write, self.imager_close)
Dialog.setTabOrder(self.imager_close, self.install_sys_only)
Dialog.setTabOrder(self.install_sys_only, self.install_sys_all)
Dialog.setTabOrder(self.install_sys_all, self.install_syslinux)
Dialog.setTabOrder(self.install_syslinux, self.edit_syslinux)
Dialog.setTabOrder(self.edit_syslinux, self.lineEdit_2)
Dialog.setTabOrder(self.lineEdit_2, self.browse_iso_qemu)
Dialog.setTabOrder(self.browse_iso_qemu, self.ram_iso_256)
Dialog.setTabOrder(self.ram_iso_256, self.ram_iso_512)
Dialog.setTabOrder(self.ram_iso_512, self.ram_iso_768)
Dialog.setTabOrder(self.ram_iso_768, self.ram_iso_1024)
Dialog.setTabOrder(self.ram_iso_1024, self.ram_iso_2048)
Dialog.setTabOrder(self.ram_iso_2048, self.boot_iso_qemu)
Dialog.setTabOrder(self.boot_iso_qemu, self.ram_usb_256)
Dialog.setTabOrder(self.ram_usb_256, self.ram_usb_512)
Dialog.setTabOrder(self.ram_usb_512, self.ram_usb_768)
Dialog.setTabOrder(self.ram_usb_768, self.ram_usb_1024)
Dialog.setTabOrder(self.ram_usb_1024, self.ram_usb_2048)
Dialog.setTabOrder(self.ram_usb_2048, self.boot_usb_qemu)
Dialog.setTabOrder(self.boot_usb_qemu, self.tabWidget)
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(3)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, Dialog):
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "multibootusb"))
self.groupBox_6.setTitle(_translate("Dialog", "USB Details"))
self.label_usb_dev.setText(_translate("Dialog", "Drive:"))
self.label_usb_vendor.setText(_translate("Dialog", "Vendor:"))
self.label_usb_model.setText(_translate("Dialog", "Model:"))
self.label_usb_size.setText(_translate("Dialog", "Size:"))
self.label_usb_mount.setText(_translate("Dialog", "Mount:"))
self.close.setText(_translate("Dialog", "Quit"))
self.browse_iso.setText(_translate("Dialog", "Browse ISO"))
self.label_persistence.setText(_translate("Dialog", "Persistence"))
self.detect_usb.setText(_translate("Dialog", "Detect Drives"))
self.uninstall.setText(_translate("Dialog", "Uninstall Distro"))
self.slider_persistence.setToolTip(_translate("Dialog", "Choose Persistence size. Not all distros supports persistence..."))
self.checkBox_all_drives.setText(_translate("Dialog", "All Drives"))
self.label_persistence_value.setText(_translate("Dialog", "0 MB"))
self.create.setText(_translate("Dialog", "Install"))
self.status.setText(_translate("Dialog", "Status: Idle"))
self.labelstep1.setText(_translate("Dialog", "Step 1 :: Select drive"))
self.labelstep2.setText(_translate("Dialog", "Step 2 :: Select ISO"))
self.labelstep3.setText(_translate("Dialog", "Step 3 :: Install distro"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("Dialog", "MultiBootUSB"))
self.groupBox_10.setTitle(_translate("Dialog", "Select image"))
self.pushButton.setText(_translate("Dialog", "Browse image..."))
self.imager_bootable.setText(_translate("Dialog", "Bootable ISO"))
self.imager_iso_size.setText(_translate("Dialog", "Image Size"))
self.groupBox_9.setTitle(_translate("Dialog", "Select USB Drive"))
self.pushbtn_imager_refreshusb.setText(_translate("Dialog", "Refresh USB"))
self.label_imager_disk_label.setText(_translate("Dialog", "Disk Type:"))
self.label_imager_total_size.setText(_translate("Dialog", "Disk Size:"))
self.label_imager_uuid.setText(_translate("Dialog", "Disk Label:"))
self.imager_label_status.setText(_translate("Dialog", "Status: Idle"))
self.label_10.setText(_translate("Dialog", "<html><head/><body><p><span style=\" font-weight:600; color:#ff0000;\">WARNING</span> : Any bootable USB made using<span style=\" font-weight:600;\"> ISO Imager will destroy all data </span>on the selected USB disk. </p><p>Use it at your own risk. Developers are not responsile for loss of any data.</p></body></html>"))
self.imager_write.setText(_translate("Dialog", "Write Image"))
self.imager_close.setText(_translate("Dialog", "Quit"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.imager), _translate("Dialog", "Write Image to USB"))
self.groupBox_2.setTitle(_translate("Dialog", "Install Syslinux"))
self.install_sys_only.setText(_translate("Dialog", "Install only syslinu&x (existing configurations will not be altered)."))
self.install_sys_all.setText(_translate("Dialog", "Install syslinux and copy all re&quired files."))
self.install_syslinux.setText(_translate("Dialog", "Install"))
self.groupBox_3.setTitle(_translate("Dialog", "Edit syslinux.cfg"))
self.edit_syslinux.setText(_translate("Dialog", "Edit"))
self.label_2.setText(_translate("Dialog", "<html><head/><body><p align=\"justify\">Edit syslinux.cfg file directly using the default editor of your system. </p><p align=\"justify\">Be <span style=\" font-weight:600; color:#ff0000;\">CAREFUL</span> while editing syslinux.cfg!</p></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.syslinux_ab), _translate("Dialog", "Install Syslinux"))
self.groupBox_5.setTitle(_translate("Dialog", "Boot ISO :: Test bootable ISOs without reboot"))
self.boot_iso_qemu.setText(_translate("Dialog", "Boot ISO"))
self.browse_iso_qemu.setText(_translate("Dialog", "Browse ISO"))
self.label_3.setText(_translate("Dialog", "Choose RAM size:"))
self.ram_iso_256.setText(_translate("Dialog", "&256 MB"))
self.ram_iso_512.setText(_translate("Dialog", "&512 MB"))
self.ram_iso_768.setText(_translate("Dialog", "&768 MB"))
self.ram_iso_1024.setText(_translate("Dialog", "&1024 MB"))
self.ram_iso_2048.setText(_translate("Dialog", "204&8 MB"))
self.groupBox_4.setTitle(_translate("Dialog", "Boot USB :: Test bootable USB drive without reboot"))
self.ram_usb_2048.setText(_translate("Dialog", "20&48 MB"))
self.boot_usb_qemu.setText(_translate("Dialog", "Boot USB"))
self.ram_usb_256.setText(_translate("Dialog", "25&6 MB"))
self.ram_usb_768.setText(_translate("Dialog", "7&68 MB"))
self.label_4.setText(_translate("Dialog", "Choose RAM size:"))
self.ram_usb_512.setText(_translate("Dialog", "5&12 MB"))
self.ram_usb_1024.setText(_translate("Dialog", "1&024 MB"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", "Boot ISO/USB"))
self.label_5.setText(_translate("Dialog", "<html><head/><body><p align=\"center\">An advanced bootable usb creator with option to install/uninstall multiple distros.</p><p align=\"center\">This software is written in python and pyqt. </p><p align=\"center\">Copyright 2010-2016 Sundar</p><p align=\"center\"><span style=\" font-weight:600;\">Author(s)</span>: Sundar, Ian Bruce, Lee</p><p align=\"center\"><span style=\" font-weight:600;\">Licence</span>: GPL version 2 or later</p><p align=\"center\"><span style=\" font-weight:600;\">Home page</span>: <a href=\" http://multibootusb.org\"><span style=\" text-decoration: underline; color:#0000ff;\">http://multibootusb.org</span></a></p><p align=\"center\"><span style=\" font-weight:600;\">Help/Email</span>: feedback.multibootusb@gmail.com</p><p align=\"center\"><span style=\" font-weight:600;\">Source Code</span>: <a href=\"https://github.com/mbusb/multibootusb\"><span style=\" text-decoration: underline; color:#0000ff;\">https://github.com/mbusb/multibootusb</span></a></p><p><br/></p></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Dialog", "About"))
MainWindow.setWindowTitle(_translate("MainWindow", "MultiBootUSB"))
self.label_select_usb_disk.setText(_translate("MainWindow", "<b>Select USB disk</b>"))
self.button_detect_drives.setText(_translate("MainWindow", "Detect Drives"))
self.checkbox_all_drives.setText(_translate("MainWindow", "All Drives"))
self.group_usb_details.setTitle(_translate("MainWindow", "USB Details"))
self.label_usb_dev.setText(_translate("MainWindow", "Drive:"))
self.label_usb_vendor.setText(_translate("MainWindow", "Vendor:"))
self.label_usb_model.setText(_translate("MainWindow", "Model:"))
self.label_usb_size.setText(_translate("MainWindow", "Size:"))
self.label_usb_mount.setText(_translate("MainWindow", "Mount:"))
self.image_details_group.setTitle(_translate("MainWindow", "Image Details"))
self.label_image_type.setText(_translate("MainWindow", "Type:"))
self.label_image_size.setText(_translate("MainWindow", "Size:"))
self.label_image_bootable.setText(_translate("MainWindow", "Boot:"))
self.button_browse_image.setText(_translate("MainWindow", "Browse"))
self.label_select_image.setText(_translate("MainWindow", "<b>Select image</b>"))
self.button_uninstall_distro.setText(_translate("MainWindow", "Uninstall distro"))
self.button_install_distro.setText(_translate("MainWindow", "Install distro"))
self.slider_persistence.setToolTip(_translate("MainWindow", "Choose Persistence size. Not all distros supports persistence..."))
self.label_persistence.setText(_translate("MainWindow", "Persistence"))
self.label_persistence_value.setText(_translate("MainWindow", "0 MB"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_multibootusb), _translate("MainWindow", "MultiBootUSB"))
self.button_write_image_to_disk.setText(_translate("MainWindow", "Write image to USB"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_imager), _translate("MainWindow", "Write Image to disk"))
self.groupBox_2.setTitle(_translate("MainWindow", "Install Syslinux"))
self.check_install_sys_only.setText(_translate("MainWindow", "Install only syslinu&x (existing configurations will not be altered)."))
self.check_install_sys_all.setText(_translate("MainWindow", "Install syslinux and copy all re&quired files."))
self.button_install_syslinux.setText(_translate("MainWindow", "Install"))
self.groupBox_3.setTitle(_translate("MainWindow", "syslinux.cfg"))
self.button_edit_syslinux.setText(_translate("MainWindow", "Edit"))
self.label_2.setText(_translate("MainWindow", "<html><head/><body><p align=\"justify\">Edit syslinux.cfg file using the default editor. </p><p align=\"justify\">Be <span style=\" font-weight:600; color:#ff0000;\">CAREFUL</span> while editing syslinux.cfg!</p></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_syslinux), _translate("MainWindow", "Install Syslinux"))
self.groupBox_4.setTitle(_translate("MainWindow", "Boot USB :: Test bootable USB drive without reboot"))
self.combo_usb_boot_ram.setItemText(0, _translate("MainWindow", "Default"))
self.combo_usb_boot_ram.setItemText(1, _translate("MainWindow", "256"))
self.combo_usb_boot_ram.setItemText(2, _translate("MainWindow", "512"))
self.combo_usb_boot_ram.setItemText(3, _translate("MainWindow", "768"))
self.combo_usb_boot_ram.setItemText(4, _translate("MainWindow", "1024"))
self.combo_usb_boot_ram.setItemText(5, _translate("MainWindow", "2048"))
self.label_4.setText(_translate("MainWindow", "Choose RAM size:"))
self.boot_usb_qemu.setText(_translate("MainWindow", "Boot &USB"))
self.label_5.setText(_translate("MainWindow", "MB"))
self.groupBox_5.setTitle(_translate("MainWindow", "Boot ISO :: Test bootable ISOs without reboot"))
self.label_3.setText(_translate("MainWindow", "Choose RAM size:"))
self.boot_iso_qemu.setText(_translate("MainWindow", "Boot &ISO"))
self.combo_iso_boot_ram.setItemText(0, _translate("MainWindow", "Default"))
self.combo_iso_boot_ram.setItemText(1, _translate("MainWindow", "256"))
self.combo_iso_boot_ram.setItemText(2, _translate("MainWindow", "512"))
self.combo_iso_boot_ram.setItemText(3, _translate("MainWindow", "768"))
self.combo_iso_boot_ram.setItemText(4, _translate("MainWindow", "1024"))
self.combo_iso_boot_ram.setItemText(5, _translate("MainWindow", "2048"))
self.label.setText(_translate("MainWindow", "MB"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_testboot), _translate("MainWindow", "Boot ISO/USB"))
self.menuFile.setTitle(_translate("MainWindow", "&File"))
self.menu_Help.setTitle(_translate("MainWindow", "&Help"))
self.action_Quit.setText(_translate("MainWindow", "&Quit"))
self.action_About.setText(_translate("MainWindow", "&About"))

@ -15,7 +15,7 @@ import signal
from PyQt5 import QtGui
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from .gui.ui_multibootusb import Ui_Dialog
from .gui.ui_multibootusb import Ui_MainWindow
from .gen import *
from . import iso
from . import usb
@ -28,10 +28,10 @@ if platform.system() == "Windows":
def dd_linux():
import time
input = "if=" + config.imager_iso_link
in_file_size = float(os.path.getsize(config.imager_iso_link))
output = "of=" + config.imager_usb_disk
os.system("umount " + config.imager_usb_disk + "1")
input = "if=" + config.image_path
in_file_size = float(os.path.getsize(config.image_path))
output = "of=" + config.usb_disk
os.system("umount " + config.usb_disk + "1")
command = ['dd', input, output, "bs=1M", "oflag=sync"]
log("Executing ==> " + " ".join(command))
dd_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
@ -72,9 +72,9 @@ def dd_win():
windd = resource_path(os.path.join("data", "tools", "dd", "dd.exe"))
if os.path.exists(resource_path(os.path.join("data", "tools", "dd", "dd.exe"))):
log("dd exist")
input = "if=" + config.imager_iso_link
in_file_size = float(os.path.getsize(config.imager_iso_link) / 1024 / 1024)
output = "of=\\\.\\" + config.imager_usb_disk
input = "if=" + config.image_path
in_file_size = float(os.path.getsize(config.image_path) / 1024 / 1024)
output = "of=\\\.\\" + config.usb_disk
command = [windd, input, output, "bs=1M", "--progress"]
log("Executing ==> " + " ".join(command))
dd_process = subprocess.Popen(command, universal_newlines=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE,
@ -94,31 +94,31 @@ def dd_win():
return
class Imager(QtWidgets.QDialog, Ui_Dialog):
class Imager(QtWidgets.QMainWindow, Ui_MainWindow):
"""
Raw write to USB disk using dd.
"""
def __init__(self):
QtWidgets.QDialog.__init__(self)
self.ui = Ui_Dialog()
QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
def on_Imager_Browse_iso_Click(self):
"""
Browse and choose an ISO.
:return:
"""
self.ui.lineEdit_3.clear()
config.imager_iso_link = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', "", "ISO Files (*.iso)")[0]
if config.imager_iso_link:
if platform.system() == "Windows":
if "/" in config.imager_iso_link:
config.imager_iso_link = config.imager_iso_link.strip().replace("/", "\\")
self.ui.lineEdit_3.insert(str(config.imager_iso_link))
self.add_iso_gui_label_text()
else:
log("File not selected...")
# def on_Imager_Browse_iso_Click(self):
# """
# Browse and choose an ISO.
# :return:
# """
# self.ui.lineEdit_3.clear()
# config.imager_iso_link = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', "", "ISO Files (*.iso)")[0]
# if config.imager_iso_link:
# if platform.system() == "Windows":
# if "/" in config.imager_iso_link:
# config.imager_iso_link = config.imager_iso_link.strip().replace("/", "\\")
# self.ui.lineEdit_3.insert(str(config.imager_iso_link))
# self.add_iso_gui_label_text()
# else:
# log("File not selected...")
def add_iso_gui_label_text(self):
"""
@ -127,31 +127,31 @@ class Imager(QtWidgets.QDialog, Ui_Dialog):
"""
log("Testing ISO...")
self.ui.imager_bootable.setVisible(True)
if iso.is_bootable(config.imager_iso_link) is True:
if iso.is_bootable(config.image_path) is True:
self.ui.imager_bootable.setText("Bootable ISO: Yes")
log("ISO is bootable.")
else:
self.ui.imager_bootable.setText("Bootable ISO: No")
log("ISO is not bootable.")
if os.path.exists(config.imager_iso_link):
log("Path " + config.imager_iso_link + " exists...")
self.iso_size = str(round(os.path.getsize(config.imager_iso_link) / 1024 / 1024))
if os.path.exists(config.image_path):
log("Path " + config.image_path + " exists...")
self.iso_size = str(round(os.path.getsize(config.image_path) / 1024 / 1024))
self.ui.imager_iso_size.setVisible(True)
self.ui.imager_iso_size.setText("ISO Size: " + self.iso_size + " MB")
log("ISO Size is " + self.iso_size + " MB")
def onImagerComboChange(self):
config.imager_usb_disk = str(self.ui.comboBox_2.currentText())
if bool(config.imager_usb_disk):
self.ui.imager_disk_label.setText(self.imager_usb_detail(config.imager_usb_disk, partition=0).usb_type)
self.ui.imager_total_size.setText(usb.bytes2human(int(self.imager_usb_detail(config.imager_usb_disk, partition=0).total_size)))
if platform.system() == "Linux":
self.ui.label_imager_uuid.setText("Disk Model:")
self.ui.imager_uuid.setText(str(self.imager_usb_detail(config.imager_usb_disk, partition=0).model))
else:
self.ui.imager_uuid.setText(self.imager_usb_detail(config.imager_usb_disk, partition=0).model)
# def onImagerComboChange(self):
# config.imager_usb_disk = str(self.ui.comboBox_2.currentText())
# if bool(config.imager_usb_disk):
# self.ui.imager_disk_label.setText(self.imager_usb_detail(config.imager_usb_disk, partition=0).usb_type)
# self.ui.imager_total_size.setText(usb.bytes2human(int(self.imager_usb_detail(config.imager_usb_disk, partition=0).total_size)))
#
# if platform.system() == "Linux":
# self.ui.label_imager_uuid.setText("Disk Model:")
# self.ui.imager_uuid.setText(str(self.imager_usb_detail(config.imager_usb_disk, partition=0).model))
# else:
# self.ui.imager_uuid.setText(self.imager_usb_detail(config.imager_usb_disk, partition=0).model)
def imager_list_usb(self, partition=1):
"""

@ -27,8 +27,8 @@ def install_distro():
:return:
"""
usb_mount = config.usb_mount
install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(config.iso_link))
_iso_file_list = iso.iso_file_list(config.iso_link)
install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(config.image_path))
_iso_file_list = iso.iso_file_list(config.image_path)
if not os.path.exists(os.path.join(usb_mount, "multibootusb")):
log("Copying multibootusb directory to " + usb_mount)
@ -42,59 +42,59 @@ def install_distro():
with open(os.path.join(install_dir, "iso_file_list.cfg"), 'w') as f:
for file_path in _iso_file_list:
f.write(file_path + "\n")
log("Installing " + iso_name(config.iso_link) + " on " + install_dir)
log("Installing " + iso_name(config.image_path) + " on " + install_dir)
if config.distro == "opensuse":
iso.iso_extract_file(config.iso_link, install_dir, 'boot')
iso.iso_extract_file(config.image_path, install_dir, 'boot')
status_text = "Copying ISO..."
if platform.system() == "Windows":
subprocess.call(["xcopy", config.iso_link, usb_mount], shell=True) # Have to use xcopy as python file copy is dead slow.
subprocess.call(["xcopy", config.image_path, usb_mount], shell=True) # Have to use xcopy as python file copy is dead slow.
elif platform.system() == "Linux":
log("Copying " + config.iso_link + " to " + usb_mount)
shutil.copy(config.iso_link, usb_mount)
log("Copying " + config.image_path + " to " + usb_mount)
shutil.copy(config.image_path, usb_mount)
elif config.distro == "Windows" or config.distro == "alpine" or config.distro == 'pc-unlocker':
log("Extracting iso to " + usb_mount)
iso_extract_full(config.iso_link, usb_mount)
iso_extract_full(config.image_path, usb_mount)
elif config.distro == "trinity-rescue":
iso.iso_extract_file(config.iso_link, usb_mount, '*trk3')
iso.iso_extract_file(config.image_path, usb_mount, '*trk3')
elif config.distro == "ipfire":
iso.iso_extract_file(config.iso_link, usb_mount, '*.tlz')
iso.iso_extract_file(config.iso_link, usb_mount, 'distro.img')
iso.iso_extract_file(config.iso_link, install_dir, 'boot')
iso.iso_extract_file(config.image_path, usb_mount, '*.tlz')
iso.iso_extract_file(config.image_path, usb_mount, 'distro.img')
iso.iso_extract_file(config.image_path, install_dir, 'boot')
elif config.distro == "zenwalk":
config.status_text = "Copying ISO..."
iso.iso_extract_file(config.iso_link, install_dir, "kernel")
copy_iso(config.iso_link, install_dir)
iso.iso_extract_file(config.image_path, install_dir, "kernel")
copy_iso(config.image_path, install_dir)
elif config.distro == "salix-live":
# iso.iso_extract_file(config.iso_link, install_dir, "boot")
iso.iso_extract_file(config.iso_link, install_dir, '*syslinux')
iso.iso_extract_file(config.iso_link, install_dir, '*menus')
iso.iso_extract_file(config.iso_link, install_dir, '*vmlinuz')
iso.iso_extract_file(config.iso_link, install_dir, '*initrd*')
iso.iso_extract_file(config.iso_link, usb_mount, '*modules')
iso.iso_extract_file(config.iso_link, usb_mount, '*packages')
iso.iso_extract_file(config.iso_link, usb_mount, '*optional')
iso.iso_extract_file(config.iso_link, usb_mount, '*liveboot')
#iso.iso_extract_full(config.iso_link, usb_mount)
# iso.iso_extract_file(config.image_path, install_dir, "boot")
iso.iso_extract_file(config.image_path, install_dir, '*syslinux')
iso.iso_extract_file(config.image_path, install_dir, '*menus')
iso.iso_extract_file(config.image_path, install_dir, '*vmlinuz')
iso.iso_extract_file(config.image_path, install_dir, '*initrd*')
iso.iso_extract_file(config.image_path, usb_mount, '*modules')
iso.iso_extract_file(config.image_path, usb_mount, '*packages')
iso.iso_extract_file(config.image_path, usb_mount, '*optional')
iso.iso_extract_file(config.image_path, usb_mount, '*liveboot')
#iso.iso_extract_full(config.image_path, usb_mount)
config.status_text = "Copying ISO..."
copy_iso(config.iso_link, install_dir)
copy_iso(config.image_path, install_dir)
elif config.distro == 'sgrubd2':
copy_iso(config.iso_link, install_dir)
copy_iso(config.image_path, install_dir)
elif config.distro == 'alt-linux':
iso.iso_extract_file(config.iso_link, install_dir, '-xr!*rescue')
iso.iso_extract_file(config.iso_link, config.usb_mount, 'rescue')
iso.iso_extract_file(config.image_path, install_dir, '-xr!*rescue')
iso.iso_extract_file(config.image_path, config.usb_mount, 'rescue')
elif config.distro == "generic":
#with open(os.path.join(install_dir, "generic.cfg"), "w") as f:
# f.write(os.path.join(isolinux_bin_dir(config.iso_link), "generic") + ".bs")
iso_extract_full(config.iso_link, usb_mount)
# f.write(os.path.join(isolinux_bin_dir(config.image_path), "generic") + ".bs")
iso_extract_full(config.image_path, usb_mount)
elif config.distro == 'grub4dos':
iso_extract_full(config.iso_link, usb_mount)
iso_extract_full(config.image_path, usb_mount)
elif config.distro == 'ReactOS':
iso_extract_full(config.iso_link, usb_mount)
iso_extract_full(config.image_path, usb_mount)
elif config.distro == 'grub4dos_iso' or config.distro == 'raw_iso':
copy_iso(config.iso_link, install_dir)
copy_iso(config.image_path, install_dir)
else:
iso.iso_extract_full(config.iso_link, install_dir)
iso.iso_extract_full(config.image_path, install_dir)
if platform.system() == 'Linux':
log('ISO extracted successfully. Sync is in progress...')
@ -134,13 +134,14 @@ def install_progress():
thrd = threading.Thread(target=install_distro, name="install_progress")
# thrd.daemon()
# install_size = usb_size_used / 1024
install_size = iso_size(config.iso_link) / 1024
final_size = (usb_size_used + iso_size(config.iso_link)) + config.persistence
install_size = iso_size(config.image_path) / 1024
final_size = (usb_size_used + iso_size(config.image_path)) + config.persistence
thrd.start()
pbar = progressbar.ProgressBar(maxval=100).start() # bar = progressbar.ProgressBar(redirect_stdout=True)
while thrd.is_alive():
current_size = details(config.usb_disk)['size_used']
percentage = int((current_size / final_size) * 100)
# log("Install at " + str(percentage) + "%")
if percentage > 100:
percentage = 100
config.percentage = percentage
@ -157,29 +158,29 @@ def install_patch():
if platform.system() == 'Linux': # Need to syn under Linux. Otherwise, USB disk becomes random read only.
os.system('sync')
iso_cfg_ext_dir = os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir")
isolinux_path = os.path.join(iso_cfg_ext_dir, isolinux_bin_path(config.iso_link))
iso_linux_bin_dir = isolinux_bin_dir(config.iso_link)
isolinux_path = os.path.join(iso_cfg_ext_dir, isolinux_bin_path(config.image_path))
iso_linux_bin_dir = isolinux_bin_dir(config.image_path)
config.syslinux_version = isolinux_version(isolinux_path)
iso_file_list = iso.iso_file_list(config.iso_link)
os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link), isolinux_bin_dir(config.iso_link))
iso_file_list = iso.iso_file_list(config.image_path)
os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path), isolinux_bin_dir(config.image_path))
if any("makeboot.sh" in s.lower() for s in iso_file_list):
for module in os.listdir(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link),
isolinux_bin_dir(config.iso_link))):
for module in os.listdir(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path),
isolinux_bin_dir(config.image_path))):
if module.endswith(".c32"):
if os.path.exists(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link),
isolinux_bin_dir(config.iso_link), module)):
if os.path.exists(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path),
isolinux_bin_dir(config.image_path), module)):
try:
os.remove(os.path.join(config.usb_mount, "multibootusb",
iso_basename(config.iso_link), isolinux_bin_dir(config.iso_link), module))
iso_basename(config.image_path), isolinux_bin_dir(config.image_path), module))
log("Copying " + module)
log((resource_path(
os.path.join(multibootusb_host_dir(), "syslinux", "modules", config.syslinux_version, module)),
os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link),
isolinux_bin_dir(config.iso_link), module)))
os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path),
isolinux_bin_dir(config.image_path), module)))
shutil.copy(resource_path(
os.path.join(multibootusb_host_dir(), "syslinux", "modules", config.syslinux_version, module)),
os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link),
isolinux_bin_dir(config.iso_link), module))
os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path),
isolinux_bin_dir(config.image_path), module))
except Exception as err:
log(err)
log("Could not copy " + module)
@ -188,5 +189,5 @@ def install_patch():
if __name__ == '__main__':
config.iso_link = '../../../DISTROS/2016/slitaz-4.0.iso'
config.image_path = '../../../DISTROS/2016/slitaz-4.0.iso'
install_distro()

@ -158,7 +158,7 @@ def isolinux_version(isolinux_bin_path):
if re.search(r'isolinux ', strin, re.I):
for number in version:
if re.search(r'isolinux ' + number, strin, re.I):
log("\n\nFound syslinux version " + number + "\n\n")
log("\nFound syslinux version " + number + "\n")
return str(number)
@ -200,6 +200,9 @@ def iso_file_path(iso_link, file_name):
:param file_name: file name to be checked
:return: Path to file as string
"""
assert iso_link
assert file_name
file_path = False
iso_file_list = _7zip.list_iso(iso_link)
for f in iso_file_list:

@ -160,7 +160,7 @@ class ISO9660:
self.rripOffset = rripNode.offset
#gen.log ("RRIP: rrip_offset %d"%(self.rripOffset))
else:
gen.log (" This disc don't support RRIP")
gen.log ("This ISO doesn't support RRIP")
self.rootDir = root_dir
# Rrip extension

@ -43,18 +43,18 @@ def cli_install_distro():
if usb.is_block(config.usb_disk) is False:
log(config.usb_disk, 'is not a valid device partition...')
exit(1)
elif integrity(config.iso_link) is not True:
log(config.iso_link, ' failed to pass integrity check...')
elif integrity(config.image_path) is not True:
log(config.image_path, ' failed to pass integrity check...')
exit(1)
elif size_not_enough(config.iso_link, config.usb_disk) is True:
elif size_not_enough(config.image_path, config.usb_disk) is True:
log(config.usb_disk, 'does not have enough space...')
else:
prepare_mbusb_host_dir()
extract_cfg_file(config.iso_link)
_distro = distro(iso_cfg_ext_dir(), config.iso_link)
extract_cfg_file(config.image_path)
_distro = distro(iso_cfg_ext_dir(), config.image_path)
log('Detected distro type is', _distro)
if _distro is not None:
log('\nSelected ISO is :', quote(iso_name(config.iso_link)))
log('\nSelected ISO is :', quote(iso_name(config.image_path)))
log('Selected target device is:', quote(config.usb_disk), '\n')
log('Please confirm the option.')
log('Y/y/Yes/yes/YES or N/n/No/no/NO')
@ -62,11 +62,11 @@ def cli_install_distro():
config.distro = _distro
copy_mbusb_dir_usb(config.usb_disk)
install_progress()
syslinux_distro_dir(config.usb_disk, config.iso_link, _distro)
syslinux_distro_dir(config.usb_disk, config.image_path, _distro)
syslinux_default(config.usb_disk)
update_distro_cfg_files(config.iso_link, config.usb_disk, _distro)
update_distro_cfg_files(config.image_path, config.usb_disk, _distro)
else:
log('Sorry', iso_name(config.iso_link), 'is not supported at the moment\n'
log('Sorry', iso_name(config.image_path), 'is not supported at the moment\n'
'Please report tissue at https://github.com/mbusb/multibootusb/issues')

@ -13,14 +13,17 @@ import signal
from PyQt5 import QtCore, QtGui, QtWidgets
import subprocess
import time
from scripts.gui.ui_multibootusb import Ui_Dialog
from scripts.gui.ui_multibootusb import Ui_MainWindow
from scripts.gui.ui_about import Ui_About
from . import usb
from .gen import *
from .install import *
from .uninstall_distro import *
from .syslinux import *
from .distro import *
from .qemu import *
from .iso import *
#from .imager import *
from .imager import Imager, dd_linux, dd_win
from . import persistence
from . import config
@ -28,173 +31,194 @@ from . import admin
from . import qemu
from .update_cfg_file import update_distro_cfg_files
class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
class AppGui(qemu.Qemu, Imager, QtWidgets.QMainWindow, Ui_MainWindow):
"""
Main multibootusb GUI manipulation class.
"""
def __init__(self):
QtWidgets.QDialog.__init__(self)
self.ui = Ui_Dialog()
QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.tabWidget.setCurrentIndex(0)
# self.qemu = Qemu()
self.ui.label_persistence_value.setVisible(False)
self.ui.label_persistence.setVisible(False)
self.ui.slider_persistence.setVisible(False)
self.ui.label_imager_disk_label.setVisible(False)
self.ui.label_imager_total_size.setVisible(False)
self.ui.label_imager_uuid.setVisible(False)
self.ui.label_usb_dev.setVisible(False)
self.ui.label_usb_vendor.setVisible(False)
self.ui.label_usb_model.setVisible(False)
self.ui.label_usb_size.setVisible(False)
self.ui.label_usb_mount.setVisible(False)
self.ui.imager_bootable.setVisible(False)
self.ui.imager_iso_size.setVisible(False)
config.usb_disk = None
config.image_path = None
# Main Tab
self.ui.checkBox_all_drives.clicked.connect(self.add_device)
self.ui.detect_usb.clicked.connect(self.onRefereshClick)
self.ui.close.clicked.connect(self.on_close_Click)
self.ui.browse_iso.clicked.connect(self.browse_iso)
self.ui.comboBox.activated[str].connect(self.onComboChange)
# self.ui.create.clicked.connect(self.update_progress)
self.ui.create.clicked.connect(self.onCreateClick)
self.ui.checkbox_all_drives.setVisible(False)
# FIXME self.ui.checkbox_all_drives.clicked.connect(self.add_device)
self.ui.button_detect_drives.clicked.connect(self.onRefreshClick)
self.ui.action_Quit.triggered.connect(self.on_close_Click)
self.ui.action_About.triggered.connect(self.onAboutClick)
self.ui.button_browse_image.clicked.connect(self.browse_iso)
# self.ui.combo_drives.activated[str].connect(self.onComboChange)
self.ui.combo_drives.currentIndexChanged.connect(self.onComboChange)
self.ui.button_install_distro.clicked.connect(self.onCreateClick)
self.ui.button_uninstall_distro.clicked.connect(self.OnUninstallClick)
self.ui.slider_persistence.valueChanged.connect(self.update_slider_text)
self.ui.uninstall.clicked.connect(self.OnUninstallClick)
# self.ui.slider_persistence.sliderReleased.connect(self.ui_update_persistence)
# ISO Imager Tab
self.ui.pushButton.clicked.connect(self.on_Imager_Browse_iso_Click)
self.ui.comboBox_2.activated[str].connect(self.onImagerComboChange)
self.ui.pushbtn_imager_refreshusb.clicked.connect(self.onRefereshClick)
self.ui.imager_close.clicked.connect(self.on_close_Click)
self.ui.imager_write.clicked.connect(self.dd_write)
self.ui.button_write_image_to_disk.clicked.connect(self.dd_write)
# Syslinux Tab
self.ui.install_syslinux.clicked.connect(self.onInstall_syslinuxClick)
self.ui.edit_syslinux.clicked.connect(self.onedit_syslinux)
self.ui.button_install_syslinux.clicked.connect(self.onInstall_syslinuxClick)
self.ui.button_edit_syslinux.clicked.connect(self.onedit_syslinux)
# QEMU Tab
self.ui.browse_iso_qemu.clicked.connect(self.on_Qemu_Browse_iso_Click)
self.ui.boot_iso_qemu.clicked.connect(self.on_Qemu_Boot_iso_Click)
self.ui.boot_usb_qemu.clicked.connect(lambda: self.on_Qemu_Boot_usb_Click(str(self.ui.comboBox.currentText())))
# self.ui.tabWidget.removeTab(3)
self.ui.boot_usb_qemu.clicked.connect(self.on_Qemu_Boot_usb_Click)
# self.ui.combo_iso_boot_ram.activated[str].connect(self.qemu_iso_ram)
# self.ui.combo_usb_boot_ram.activated[str].connect(self.qemu_usb_ram)
# self.ui.boot_usb_qemu.clicked.connect(lambda: self.on_Qemu_Boot_usb_Click(str(self.ui.combo_drives.currentText())))
# Update progressbar and status (Main ISO install)
self.progress_thread_install = GuiInstallProgress()
self.progress_thread_install.finished.connect(self.install_syslinux)
self.progress_thread_install.update.connect(self.ui.progressBar.setValue)
self.progress_thread_install.status.connect(self.ui.status.setText)
self.progress_thread_install.update.connect(self.ui.progressbar.setValue)
self.progress_thread_install.status.connect(self.ui.statusbar.showMessage)
# Update progressbar and status (Uninstall from previous install)
self.progress_thread_uninstall = GuiUninstallProgress()
self.progress_thread_uninstall.finished.connect(self.uninstall_sys_file_update)
self.progress_thread_uninstall.update.connect(self.ui.progressBar.setValue)
self.progress_thread_uninstall.status.connect(self.ui.status.setText)
self.progress_thread_uninstall.update.connect(self.ui.progressbar.setValue)
self.progress_thread_uninstall.status.connect(self.ui.statusbar.showMessage)
# Update progressbar and status (dd ISO)
self.progress_thread_dd = DD_Progress()
self.progress_thread_dd.update.connect(self.ui.imager_progressbar.setValue)
self.progress_thread_dd.update.connect(self.ui.progressbar.setValue)
self.progress_thread_dd.finished.connect(self.dd_finished)
self.progress_thread_dd.status.connect(self.ui.imager_label_status.setText)
self.progress_thread_dd.status.connect(self.ui.statusbar.showMessage)
self.add_device()
# FIXME
# self.add_device()
prepare_mbusb_host_dir()
def add_device(self):
"""
Adds list of available USB devices to GUI combobox.
:return:
"""
self.ui.comboBox.clear()
self.ui.comboBox_2.clear()
if self.ui.checkBox_all_drives.isChecked():
detected_device = usb.list(partition=1, fixed=True)
else:
detected_device = usb.list()
if bool(detected_device):
for device in detected_device:
self.ui.comboBox.addItem(str(device))
if self.ui.comboBox.currentText():
self.onComboChange()
imager_detected_device = self.imager_list_usb(partition=0)
if bool(imager_detected_device):
for disk in imager_detected_device:
self.ui.comboBox_2.addItem(str(disk))
self.onImagerComboChange()
# def add_device(self):
# """
# Adds list of available USB devices to GUI combobox.
# :return:
# """
# self.ui.combo_drives.clear()
# if self.ui.checkbox_all_drives.isChecked():
# detected_device = usb.list_devices(partition=1, fixed=True)
# else:
# detected_device = usb.list_devices()
# if bool(detected_device):
# for device in detected_device:
# self.ui.combo_drives.addItem(str(device))
# # if self.ui.combo_drives.currentText():
# # self.onComboChange()
#
# # FIXME
# # imager_detected_device = Imager.imager_list_usb(partition=0)
# # if bool(imager_detected_device):
# # for disk in imager_detected_device:
# # self.ui.comboBox_2.addItem(str(disk))
# # self.onImagerComboChange()
def onAboutClick(self):
about = QtWidgets.QDialog()
about.ui = Ui_About()
about.ui.setupUi(about)
about.setAttribute(QtCore.Qt.WA_DeleteOnClose)
about.setWindowTitle("About MultiBootUSB - " + mbusb_version())
about.setWindowIcon(QtGui.QIcon(resource_path(os.path.join("data", "tools", "multibootusb.png"))))
about.ui.button_close.clicked.connect(about.close)
about.exec_()
def onComboChange(self):
"""
Detects and updates GUI with populated USB device details.
:return:
"""
self.ui.listWidget.clear()
config.usb_disk = str(self.ui.comboBox.currentText())
config.imager_usb_disk = str(self.ui.comboBox_2.currentText())
if bool(config.usb_disk):
self.update_gui_oncombobox(config.usb_disk)
self.ui.installed_distros.clear()
config.usb_disk = str(self.ui.combo_drives.currentText())
config.imager_usb_disk = str(self.ui.combo_drives.currentText())
if config.usb_disk:
log("Selected device " + config.usb_disk)
config.persistence_max_size = persistence.max_disk_persistence(config.usb_disk)
self.usb_details = usb.details(config.usb_disk)
config.usb_mount = self.usb_details['mount_point']
self.ui.usb_dev.setText(config.usb_disk)
# self.label.setFont(QtGui.QFont("Times",weight=QtGui.QFont.Bold))
if platform.system() == 'Windows':
self.ui.label_usb_vendor.setText("FileSystem:")
self.ui.usb_vendor.setText(self.usb_details['file_system'])
self.ui.label_usb_model.setText("Label: ")
self.ui.usb_model.setText(self.usb_details['label'])
else:
self.ui.usb_vendor.setText(self.usb_details['vendor'])
self.ui.usb_model.setText(self.usb_details['model'])
self.ui.usb_size.setText(str(usb.bytes2human(self.usb_details['size_total'])))
self.ui.usb_mount.setText(self.usb_details['mount_point'])
self.update_list_box(config.usb_disk)
self.ui_update_persistence()
else:
self.ui.usb_dev.clear()
self.ui.usb_vendor.clear()
self.ui.usb_model.clear()
self.ui.usb_size.clear()
self.ui.usb_mount.clear()
log("No USB disk found...")
def onRefereshClick(self):
def onRefreshClick(self):
"""
Calls function to detect USB devices.
:return:
"""
self.ui.comboBox.clear()
self.ui.comboBox_2.clear()
self.ui.imager_disk_label.clear()
self.ui.label_imager_disk_label.setVisible(False)
self.ui.imager_total_size.clear()
self.ui.label_imager_total_size.setVisible(False)
self.ui.imager_uuid.clear()
self.ui.label_imager_uuid.setVisible(False)
self.ui.usb_dev.clear()
self.ui.label_usb_dev.setVisible(False)
self.ui.usb_vendor.clear()
self.ui.label_usb_vendor.setVisible(False)
self.ui.usb_model.clear()
self.ui.label_usb_model.setVisible(False)
self.ui.usb_size.clear()
self.ui.label_usb_size.setVisible(False)
self.ui.usb_mount.clear()
self.ui.label_usb_mount.setVisible(False)
self.add_device()
def update_gui_oncombobox(self, usb_disk):
self.usb_details = usb.details(usb_disk)
config.usb_mount = self.usb_details['mount_point']
self.ui.usb_dev.setText(usb_disk)
self.ui.label_imager_disk_label.setVisible(True)
self.ui.label_imager_total_size.setVisible(True)
self.ui.label_imager_uuid.setVisible(True)
self.ui.label_usb_dev.setVisible(True)
self.ui.label_usb_vendor.setVisible(True)
self.ui.label_usb_model.setVisible(True)
self.ui.label_usb_size.setVisible(True)
self.ui.label_usb_mount.setVisible(True)
# self.label.setFont(QtGui.QFont("Times",weight=QtGui.QFont.Bold))
if platform.system() == 'Windows':
self.ui.label_usb_vendor.setText("FileSystem:")
self.ui.usb_vendor.setText(self.usb_details['file_system'])
self.ui.label_usb_model.setText("Label: ")
self.ui.usb_model.setText(self.usb_details['label'])
self.ui.combo_drives.clear()
# self.ui.imager_disk_label.clear()
# self.ui.label_imager_disk_label.setVisible(False)
# self.ui.imager_total_size.clear()
# self.ui.label_imager_total_size.setVisible(False)
# self.ui.imager_uuid.clear()
# self.ui.label_imager_uuid.setVisible(False)
# self.ui.usb_dev.clear()
# self.ui.label_usb_dev.setVisible(False)
# self.ui.usb_vendor.clear()
# self.ui.label_usb_vendor.setVisible(False)
# self.ui.usb_model.clear()
# self.ui.label_usb_model.setVisible(False)
# self.ui.usb_size.clear()
# self.ui.label_usb_size.setVisible(False)
# self.ui.usb_mount.clear()
# self.ui.label_usb_mount.setVisible(False)
# self.add_device()
self.ui.combo_drives.clear()
if self.ui.checkbox_all_drives.isChecked():
detected_devices = usb.list_devices(partition=1, fixed=True)
else:
self.ui.usb_vendor.setText(self.usb_details['vendor'])
self.ui.usb_model.setText(self.usb_details['model'])
self.ui.usb_size.setText(str(usb.bytes2human(self.usb_details['size_total'])))
self.ui.usb_mount.setText(self.usb_details['mount_point'])
self.update_list_box(usb_disk)
detected_devices = usb.list_devices()
if detected_devices:
for device in detected_devices:
self.ui.combo_drives.addItem(str(device["DEVNAME"]))
# if self.ui.combo_drives.currentText():
# self.onComboChange()
self.ui.combo_drives.setCurrentIndex(0)
# FIXME
# imager_detected_device = Imager.imager_list_usb(partition=0)
# if bool(imager_detected_device):
# for disk in imager_detected_device:
# self.ui.comboBox_2.addItem(str(disk))
# self.onImagerComboChange()
def update_list_box(self, usb_disk):
"""
@ -205,55 +229,77 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
distro_list = install_distro_list()
#sys_cfg_file = os.path.join(str(usb_mount), "multibootusb", "syslinux.cfg")
if distro_list is not None:
self.ui.listWidget.clear()
self.ui.installed_distros.clear()
for name in distro_list:
self.ui.listWidget.addItem(name)
self.ui.installed_distros.addItem(name)
else:
if config.usb_mount == 'No_Mount':
log("UBS disk is not mounted and can't update list widget...")
log("USB disk is not mounted and can't update list widget...")
#QtWidgets.QMessageBox.information(self, 'No Install...',
# 'syslinux.cfg does not exist for updating list widget.')
def browse_iso(self):
if str(self.ui.lineEdit.text()):
self.ui.lineEdit.clear()
config.iso_link = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', '', 'ISO Files (*.iso)')[0]
if config.iso_link:
if str(self.ui.image_path.text()):
self.ui.image_path.clear()
config.image_path = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', '', 'ISO Files (*.iso)')[0]
if config.image_path:
if platform.system() == "Windows":
if "/" in config.iso_link:
config.iso_link = config.iso_link.strip().replace("/", "\\")
self.ui.lineEdit.insert(str(config.iso_link))
if os.path.exists(config.iso_link):
if "/" in config.image_path:
config.image_path = config.image_path.strip().replace("/", "\\")
self.ui.image_path.insert(str(config.image_path))
self.ui.label_image_size_value.setText(str(bytes2human(iso_size(config.image_path))))
self.ui.label_image_size_value.setVisible(True)
self.ui.label_image_bootable_value.setText(str(is_bootable(config.image_path)))
self.ui.label_image_bootable_value.setVisible(True)
if os.path.exists(config.image_path):
clean_iso_cfg_ext_dir(os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir")) # Need to be cleaned.
extract_cfg_file(config.iso_link)
config.distro = distro(iso_cfg_ext_dir(), config.iso_link) # Detect supported distro
extract_cfg_file(config.image_path)
config.distro = distro(iso_cfg_ext_dir(), config.image_path) # Detect supported distro
self.ui.label_image_type_value.setText(str(config.distro))
self.ui.label_image_type_value.setVisible(True)
if config.distro:
per_availability = persistence.persistence_distro(config.distro, config.usb_disk, config.iso_link)[0]
per_max_size = persistence.persistence_distro(config.distro, config.usb_disk, config.iso_link)[1]
per_availability = persistence.persistence_distro(config.distro, config.image_path)
if per_availability is not None:
self.ui.label_persistence_value.setVisible(True)
self.ui.label_persistence.setVisible(True)
self.ui.slider_persistence.setVisible(True)
self.ui.label_persistence_value.setEnabled(True)
self.ui.label_persistence.setEnabled(True)
self.ui.slider_persistence.setEnabled(True)
self.ui.slider_persistence.setTickInterval(10)
self.ui.slider_persistence.setSingleStep(10)
ui_per_max_size = per_max_size / 1024 / 1024
# config.persistence = per_max_size
self.ui.slider_persistence.setMaximum(ui_per_max_size)
log('Persistence Max Size: ' + str(bytes2human(per_max_size)))
config.persistence_available = True
if config.usb_disk:
per_max_size = persistence.max_disk_persistence(config.usb_disk)
config.persistence_max_size = per_max_size
log('Persistence Max Size: ' + str(bytes2human(per_max_size)))
else:
self.ui.label_persistence_value.setEnabled(False)
self.ui.label_persistence.setEnabled(False)
self.ui.slider_persistence.setEnabled(False)
self.ui.label_persistence_value.setVisible(False)
self.ui.label_persistence.setVisible(False)
self.ui.slider_persistence.setVisible(False)
log('Persistence is not available for ' + iso_name(config.iso_link))
config.persistence_available = False
log('Persistence is not available for ' + iso_name(config.image_path))
self.ui_update_persistence()
else:
log("File not selected...")
def ui_update_persistence(self):
log("===== config.persistence_available = " + str(config.persistence_available))
log("===== config.persistence_max_size = " + str(config.persistence_max_size))
log("===== config.persistence = " + str(config.persistence))
if config.persistence_available and config.persistence_max_size:
self.ui.label_persistence_value.setVisible(True)
self.ui.label_persistence.setVisible(True)
self.ui.slider_persistence.setVisible(True)
self.ui.label_persistence_value.setEnabled(True)
self.ui.label_persistence.setEnabled(True)
self.ui.slider_persistence.setEnabled(True)
self.ui.slider_persistence.setTickInterval(10)
self.ui.slider_persistence.setSingleStep(10)
self.ui.slider_persistence.setMaximum(config.persistence_max_size / 1024 / 1024)
# log("===== getMaximum = " + self.ui.slider_persistence.getMaximum()
else:
self.ui.label_persistence_value.setEnabled(False)
self.ui.label_persistence.setEnabled(False)
self.ui.slider_persistence.setEnabled(False)
self.ui.label_persistence_value.setVisible(False)
self.ui.label_persistence.setVisible(False)
self.ui.slider_persistence.setVisible(False)
def update_slider_text(self):
slide_value = self.ui.slider_persistence.value() * 1024 * 1024
self.ui.label_persistence_value.setText(bytes2human(slide_value))
@ -264,16 +310,16 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
Function to install syslinux on distro directory and on selected USB disks.
:return:
"""
self.ui.status.setText(str("Status: Installing Syslinux..."))
syslinux_distro_dir(config.usb_disk, config.iso_link, config.distro)
self.ui.statusbar.showMessage(str("Status: Installing Syslinux..."))
syslinux_distro_dir(config.usb_disk, config.image_path, config.distro)
syslinux_default(config.usb_disk)
update_distro_cfg_files(config.iso_link, config.usb_disk, config.distro, config.persistence)
update_distro_cfg_files(config.image_path, config.usb_disk, config.distro, config.persistence)
self.update_list_box(config.usb_disk)
if sys.platform.startswith("linux"):
self.ui.status.setText("Status: Sync is in progress...")
self.ui.statusbar.showMessage("Status: Sync is in progress...")
os.system('sync')
self.ui.status.setText("Status: Idle")
QtWidgets.QMessageBox.information(self, 'Finished...', iso_name(config.iso_link) + ' has been successfully installed.')
self.ui.statusbar.showMessage("Status: Idle")
QtWidgets.QMessageBox.information(self, 'Finished...', iso_name(config.image_path) + ' has been successfully installed.')
config.process_exist = None
def onInstall_syslinuxClick(self):
@ -346,11 +392,11 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
Triggers a function to uninstall a selected distro.
:return:
"""
if self.ui.listWidget.currentItem() is None:
if self.ui.installed_distros.currentItem() is None:
log("Please select a distro from the list.")
QtWidgets.QMessageBox.information(self, 'No selection.', 'Please select a distro from the list.')
else:
config.uninstall_distro_dir_name = str(self.ui.listWidget.currentItem().text()).strip()
config.uninstall_distro_dir_name = str(self.ui.installed_distros.currentItem().text()).strip()
reply = QtWidgets.QMessageBox.question(self, "Review selection...",
"Are you sure to uninstall " + config.uninstall_distro_dir_name,
QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
@ -372,9 +418,9 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
update_sys_cfg_file()
self.update_list_box(config.usb_mount)
if sys.platform.startswith("linux"):
self.ui.status.setText("Status: Sync in progress...")
self.ui.statusbar.showMessage("Status: Sync in progress...")
os.system('sync')
self.ui.status.setText("Status: Idle")
self.ui.statusbar.showMessage("Status: Idle")
QtWidgets.QMessageBox.information(self, 'Uninstall Complete...',
config.uninstall_distro_dir_name + ' has been successfully removed.')
@ -386,50 +432,50 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
:return:
"""
if not config.usb_disk:
log("No USB device found.\n\nInsert USB and use Refresh USB button to detect USB.")
log("ERROR: No USB device found.")
QtWidgets.QMessageBox.information(self, "No Device...",
"No USB device found.\n\nInsert USB and use Refresh USB button to detect USB.")
elif not config.iso_link:
log("No ISO found.\n\nPlease use step 2 to choose an ISO.")
QtWidgets.QMessageBox.information(self, "No ISO...", "No ISO found.\n\nPlease use step 2 to choose an ISO.")
elif not config.image_path:
log("No ISO selected.")
QtWidgets.QMessageBox.information(self, "No ISO...", "No ISO found.\n\nPlease select an ISO.")
elif usb.details(config.usb_disk)['mount_point'] == 'No_Mount':
log("USB disk is not mounted.\nPlease mount USB disk and press refresh USB button.")
log("ERROR: USB disk is not mounted.")
QtWidgets.QMessageBox.information(self, "No Mount...", "USB disk is not mounted.\n"
"Please mount USB disk and press refresh USB button.")
else:
# clean_iso_cfg_ext_dir(os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir")) # Need to be cleaned.
# extract_cfg_file(config.iso_link) # Extract files from ISO
# config.distro = distro(iso_cfg_ext_dir(), config.iso_link) # Detect supported distro
# extract_cfg_file(config.image_path) # Extract files from ISO
# config.distro = distro(iso_cfg_ext_dir(), config.image_path) # Detect supported distro
usb_details = usb.details(config.usb_disk)
log("USB Disk is " + config.usb_disk)
log("USB Label is " + config.usb_label)
log("USB UUID is " + config.usb_uuid)
log("USB Mount path is " + config.usb_mount)
log("Total size of the disk is " + str(usb.bytes2human(usb_details['size_total'])))
log("Total used size is " + str(usb.bytes2human(usb_details['size_used'])))
log("Total size left on the disk is " + str(usb.bytes2human(usb_details['size_free'])))
log("FileSystem is " + usb_details['file_system'])
log("Vendor is " + usb_details['vendor'])
log("Model is " + usb_details['model'])
log("Name of the ISO file is " + iso_name(config.iso_link))
if os.path.exists(config.iso_link):
self.ui.lineEdit.clear()
log("MultiBoot Install: USB Disk is " + config.usb_disk)
log("MultiBoot Install: USB Label is " + config.usb_label)
log("MultiBoot Install: USB UUID is " + config.usb_uuid)
log("MultiBoot Install: USB Mount path is " + config.usb_mount)
log("MultiBoot Install: Total size of the disk is " + str(usb.bytes2human(usb_details['size_total'])))
log("MultiBoot Install: Total used size is " + str(usb.bytes2human(usb_details['size_used'])))
log("MultiBoot Install: Total size left on the disk is " + str(usb.bytes2human(usb_details['size_free'])))
log("MultiBoot Install: FileSystem is " + usb_details['file_system'])
log("MultiBoot Install: Vendor is " + usb_details['vendor'])
log("MultiBoot Install: Model is " + usb_details['model'])
log("MultiBoot Install: Name of the ISO file is " + iso_name(config.image_path))
if os.path.exists(config.image_path):
self.ui.image_path.clear()
if config.distro:
log("Distro type detected: " + config.distro)
log("MultiBoot Install: Distro type detected: " + config.distro)
copy_mbusb_dir_usb(config.usb_disk)
if not os.path.exists(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link))):
if not os.path.exists(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path))):
config.persistence = self.ui.slider_persistence.value() * 1024 * 1024
install_size = iso_size(config.iso_link) + config.persistence
log("Persistence chosen is " + str(config.persistence) + " MB")
log("Persistence chosen is " + str(bytes2human(config.persistence)) + " MB")
install_size = iso_size(config.image_path) + config.persistence
if install_size >= disk_usage(config.usb_mount).free:
QtWidgets.QMessageBox.information(self, "No Space.", "No space available on " +
config.usb_disk)
log("ERROR: Not enough space available on " + config.usb_disk)
QtWidgets.QMessageBox.information(self, "No Space.", "No space available on " + config.usb_disk)
else:
reply = QtWidgets.QMessageBox.question(self, 'Review selection...',
'Selected USB disk: %s\n' % config.usb_disk +
'USB mount point: %s\n' % config.usb_mount +
'Selected distro: %s\n\n' % iso_name(config.iso_link) +
'Selected distro: %s\n\n' % iso_name(config.image_path) +
'Proceed with installation?',
QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
@ -440,10 +486,10 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
else:
QtWidgets.QMessageBox.information(self, 'Already exists...',
os.path.basename(config.iso_link) + ' is already installed.')
os.path.basename(config.image_path) + ' is already installed.')
else:
QtWidgets.QMessageBox.information(self, 'No support...',
'Sorry.\n' + os.path.basename(config.iso_link) +
'Sorry.\n' + os.path.basename(config.image_path) +
' is not supported at the moment.\n'
'Please email this issue to feedback.multibootusb@gmail.com')
@ -455,14 +501,13 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
Re-enable the blocked widgets for newer use.
:return:
"""
self.ui.imager_progressbar.setValue(0)
self.ui.imager_label_status.setText("Status: Idle")
self.ui.comboBox_2.setEnabled(True)
self.ui.pushButton.setEnabled(True)
self.ui.imager_write.setEnabled(True)
self.ui.pushbtn_imager_refreshusb.setEnabled(True)
self.ui.imager_bootable.setText("Bootable ISO: ")
self.ui.imager_iso_size.setText("Image Size: ")
self.ui.progressbar.setValue(0)
self.ui.statusbar.showMessage("Status: Idle")
self.ui.combo_drives.setEnabled(True)
self.ui.button_browse_image.setEnabled(True)
# self.ui.pushbtn_imager_refreshusb.setEnabled(True)
# self.ui.imager_bootable.setText("Bootable ISO: ")
# self.ui.imager_iso_size.setText("Image Size: ")
config.process_exist = None
msgBox = QtWidgets.QMessageBox()
@ -477,40 +522,39 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
Function to block the widgets under ISO Imager tab...
:return:
"""
self.ui.imager_progressbar.setValue(0)
self.ui.imager_label_status.clear()
self.ui.lineEdit_3.clear()
self.ui.pushButton.setEnabled(False)
self.ui.comboBox_2.setEnabled(False)
self.ui.pushbtn_imager_refreshusb.setEnabled(False)
self.ui.imager_write.setEnabled(False)
status_text = ("Status: Writing <b>" + os.path.basename(config.imager_iso_link) + "</b>" + " to " + "<b>" +
config.imager_usb_disk + "</b>")
self.ui.imager_label_status.setText(status_text)
self.ui.progressbar.setValue(0)
self.ui.statusbar.showMessage("Status: Idle")
# FIXME self.ui.lineEdit_3.clear()
self.ui.button_browse_image.setEnabled(False)
self.ui.combo_drives.setEnabled(False)
# FIXME self.ui.pushbtn_imager_refreshusb.setEnabled(False)
status_text = ("Status: Writing " + os.path.basename(config.image_path) + " to " + config.usb_disk)
self.ui.statusbar.showMessage(status_text)
def dd_quit(self):
self.ui.imager_progressbar.setValue(0)
self.ui.imager_label_status.clear()
self.ui.comboBox_2.setEnabled(True)
self.ui.pushButton.setEnabled(True)
self.ui.progressbar.setValue(0)
self.ui.statusbar.showMessage("Status: Idle")
self.ui.combo_drives.setEnabled(True)
self.ui.button_browse_image.setEnabled(True)
QtWidgets.QMessageBox.information(self, 'Failed!', 'Failed writing image.')
def dd_write(self):
if not config.imager_usb_disk:
if not config.usb_disk:
QtWidgets.QMessageBox.information(self, 'No USB...', 'Please Insert USB disk and rerun multibootusb.')
elif not config.imager_iso_link:
elif not config.image_path:
QtWidgets.QMessageBox.information(self, 'No ISO...', 'Please select an ISO.')
else:
usb_disk_size = int(self.imager_usb_detail(config.imager_usb_disk, partition=0).total_size)
self.iso_size = os.path.getsize(config.imager_iso_link)
imager = Imager()
usb_disk_size = int(imager.imager_usb_detail(config.usb_disk, partition=0).total_size)
self.iso_size = os.path.getsize(config.image_path)
if self.iso_size >= usb_disk_size:
QtWidgets.QMessageBox.information(self, "No enough space on disk.", os.path.basename(config.imager_iso_link) +
" size is larger than the size of " + config.imager_usb_disk)
QtWidgets.QMessageBox.information(self, "No enough space on disk.", os.path.basename(config.image_path) +
" size is larger than the size of " + config.usb_disk)
else:
reply = QtWidgets.QMessageBox.question \
(self, 'Review selection',
'Selected disk: %s\n' % config.imager_usb_disk +
'Selected image: %s\n\n' % os.path.basename(config.imager_iso_link) +
'Selected disk: %s\n' % config.usb_disk +
'Selected image: %s\n\n' % os.path.basename(config.image_path) +
'Proceed with writing image to disk?',
QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
@ -563,9 +607,9 @@ class GuiInstallProgress(QtCore.QThread):
self.wait()
def run(self):
install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link))
install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path))
self.thread = GenericThread(install_progress)
status_text = ""
status_text = "Status: "
self.thread.start()
while self.thread.isRunning():
if config.status_text.strip():
@ -573,13 +617,13 @@ class GuiInstallProgress(QtCore.QThread):
self.update.emit(config.percentage)
self.status.emit(config.status_text)
if not self.thread.isFinished() and config.percentage == 100:
config.status_text = ""
self.status.emit("Please wait...")
config.status_text = "Status: Please wait..."
self.status.emit("Status: Please wait...")
self.update.emit(100)
self.update.emit(0)
self.status.emit("Installing boot loader...")
self.status.emit("Status: Installing boot loader...")
if self.thread.isFinished():
config.status_text = ""
@ -695,11 +739,14 @@ def show_admin_info():
def main_gui():
app = QtWidgets.QApplication(sys.argv)
# ui_about = Ui_About()
# ui = Ui_MainWindow()
window = AppGui()
ui = Ui_Dialog()
window.show()
window.setWindowTitle("MultiBootUSB - " + mbusb_version())
window.setWindowIcon(QtGui.QIcon(resource_path(os.path.join("data", "tools", "multibootusb.png"))))
if platform.system() == 'Linux':
if os.getuid() != 0:
show_admin_info()

@ -16,40 +16,42 @@ from . import iso
from . import gen
from . import config
def persistence_distro(distro, usb_disk, iso_link):
def max_disk_persistence(usb_disk):
"""
Function to detect if distro can have persistence option.
:param distro: Detected distro name.
:return: Distro name as string or None otherwise.
Detect max persistence value for filesystem on usb_disk
:param usb_disk: Disk filesystem to check
:return: Max persistence supported (bytes)
"""
iso_size = iso.iso_size(iso_link)
assert usb_disk is not None
fat_max_size = (4096 * 1024 * 1024)
usb_details = usb.details(usb_disk)
usb_sf = usb_details['file_system']
usb_free_size = usb_details['size_free']
config.usb_uuid = usb_details['uuid']
config.usb_label = usb_details['label']
if usb_sf == 'vfat' or 'FAT32':
if usb_free_size > fat_max_size:
_max_size = fat_max_size
else:
_max_size = usb_free_size
if usb_details['file_system'] in ['vfat', 'FAT32'] and usb_details['size_free'] > fat_max_size:
_max_size = fat_max_size
else:
_max_size = usb_free_size
if distro == "ubuntu":
gen.log("Persistence option is available.")
return "ubuntu", _max_size
# FIXME to get debian persistence workable...
# Able to add successfully but unable to keep persistence data.
elif distro == "debian" or distro == "debian-install":
gen.log("Persistence option is available.")
return "debian", _max_size
elif distro == "fedora":
_max_size = usb_details['size_free']
return _max_size
def persistence_distro(distro, iso_link):
"""
Function to detect if distro can have persistence option.
:param distro: Detected distro name.
:return: Distro name as string or None otherwise.
"""
assert distro is not None
assert iso_link is not None
iso_size = iso.iso_size(iso_link)
if distro in ["ubuntu", "debian", "debian-install", "fedora"]:
gen.log("Persistence option is available.")
return "fedora", _max_size
return distro
else:
return None, None
return None
def create_persistence():
@ -66,22 +68,22 @@ def create_persistence():
mkfs = 'mkfs.ext3'
dd = 'dd'
persistence_mkfs_cmd = mkfs + ' -F ' + os.path.join(config.usb_mount, 'multibootusb',
iso.iso_basename(config.iso_link),
iso.iso_basename(config.image_path),
fs_name)
elif platform.system() == 'Windows':
mkfs = gen.quote(gen.resource_path(os.path.join("data", "tools", "mkfs", "mke2fs.exe")))
dd = gen.quote(gen.resource_path(os.path.join("data", "tools", "dd", "dd.exe")))
persistence_mkfs_cmd = 'echo y|' + mkfs + ' -b 1024 -L ' + fs_name + ' ' + os.path.join(config.usb_mount, 'multibootusb',
iso.iso_basename(config.iso_link), fs_name)
iso.iso_basename(config.image_path), fs_name)
if config.distro == 'fedora':
persistence_dd_cmd = dd + ' if=/dev/zero ' \
'of=' + os.path.join(config.usb_mount, 'multibootusb',
iso.iso_basename(config.iso_link), 'LiveOS', fs_name) + \
iso.iso_basename(config.image_path), 'LiveOS', fs_name) + \
' bs=1M count=' + str(int(persistence))
else:
persistence_dd_cmd = dd + ' if=/dev/zero of=' + os.path.join(config.usb_mount, 'multibootusb',
iso.iso_basename(config.iso_link), fs_name) +\
iso.iso_basename(config.image_path), fs_name) +\
' bs=1M count=' + str(int(persistence))
gen.log('Executing ==>' + persistence_dd_cmd)

@ -13,72 +13,73 @@ import subprocess
import platform
from .admin import adminCmd
from PyQt5 import QtWidgets
from .gui.ui_multibootusb import Ui_Dialog
from .gui.ui_multibootusb import Ui_MainWindow
from .gen import *
from . import config
class Qemu(QtWidgets.QDialog, Ui_Dialog):
class Qemu(QtWidgets.QMainWindow, Ui_MainWindow):
"""
ISO and USB booting using QEMU.
"""
def on_Qemu_Browse_iso_Click(self):
"""
Browse and choose an ISO.
:return:
"""
self.ui.lineEdit_2.clear()
qemu = self.check_qemu_exist()
if not qemu is None:
qemu_iso_link = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', "", "ISO Files (*.iso)")[0]
else:
log("QEMU does not exist.\nPlease install qemu package to avail this feature.")
QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu package to avail this feature.')
qemu_iso_link = None
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
if not qemu_iso_link is None:
self.ui.lineEdit_2.insert(qemu_iso_link)
else:
log ("File not selected.")
# def on_Qemu_Browse_iso_Click(self):
# """
# Browse and choose an ISO.
# :return:
# """
# self.ui.lineEdit_2.clear()
#
# qemu = self.check_qemu_exist()
#
# if not qemu is None:
# qemu_iso_link = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', "", "ISO Files (*.iso)")[0]
# else:
# log("QEMU does not exist.\nPlease install qemu package to avail this feature.")
# QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu package to avail this feature.')
# qemu_iso_link = None
#
# if not qemu_iso_link is None:
# self.ui.lineEdit_2.insert(qemu_iso_link)
# else:
# log ("File not selected.")
def on_Qemu_Boot_iso_Click(self):
"""
Main function to boot a selected ISO.
:return:
"""
if not self.ui.lineEdit_2.text():
QtWidgets.QMessageBox.information(self, 'No ISO...', 'No ISO selected.\n\nPlease choose an iso and click Boot ISO.')
# if not self.ui.lineEdit_2.text():
if not config.image_path:
QtWidgets.QMessageBox.information(self, 'No ISO...', 'No ISO selected.\n\nPlease choose an ISO first.')
else:
qemu = self.check_qemu_exist()
qemu_iso_link = str(self.ui.lineEdit_2.text())
if qemu is None:
log("QEMU does not exist.\nPlease install qemu package to avail this feature.")
QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu to avail this feature.')
qemu_iso_link = config.image_path
if not qemu:
log("ERROR: ISO Boot: qemu not found!")
QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu to use this feature.')
else:
ram = self.qemu_iso_ram()
if not ram is None:
self.ui.lineEdit_2.clear()
if platform.system() == "Windows":
try:
log("Executing ==> " + qemu + " -cdrom " + str(qemu_iso_link) + " -boot d -m " + ram)
subprocess.Popen(qemu + " -cdrom " + str(qemu_iso_link) + " -boot d -m " + ram, shell=True)
except:
QtWidgets.QMessageBox.information(self, 'Error...', 'Unable to start QEMU.')
else:
log(qemu + ' -m ' + ram + ' -cdrom ' + str(qemu_iso_link) + ' -boot d')
try:
log("Executing ==> " + qemu + " -cdrom " + str(qemu_iso_link) + " -boot d -m " + ram)
subprocess.Popen(qemu + " -cdrom " + str(qemu_iso_link) + " -boot d -m " + ram, shell=True)
except:
QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting ISO\n'
'Unable to start QEMU.')
if ram:
ram = " -m " + ram
else:
QtWidgets.QMessageBox.information(self, 'No ram...', 'No ram selected.\n\nPlease choose any ram value and click Boot ISO.')
ram = ""
cmd = qemu + ram + ' -boot d' + ' -cdrom ' + str(qemu_iso_link)
try:
log("Executing ==> " + cmd)
subprocess.Popen(cmd, shell=True)
except:
QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting ISO\n'
'Unable to start QEMU.')
def on_Qemu_Boot_usb_Click(self, usb_disk):
def on_Qemu_Boot_usb_Click(self):
"""
Main function to boot a selected USB disk.
:param usb_disk: Path to usb disk.
@ -86,31 +87,41 @@ class Qemu(QtWidgets.QDialog, Ui_Dialog):
"""
qemu = self.check_qemu_exist()
if qemu is None:
log("QEMU does not exist.\nPlease install qemu package to avail this feature.")
QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu to avail this feature.')
if not config.usb_disk:
QtWidgets.QMessageBox.information(self, 'No disk...', 'No USB disk selected.\n\nPlease choose a disk first.')
else:
ram = self.qemu_usb_ram()
if ram is None:
QtWidgets.QMessageBox.information(self, 'No ram...', 'No ram selected.\n\nPlease choose any ram value and click Boot USB.')
qemu = self.check_qemu_exist()
qemu_usb_disk = config.usb_disk
if qemu is None:
log("ERROR: USB Boot: qemu not found!")
QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu to use this feature.')
else:
ram = self.qemu_usb_ram()
if ram:
ram = " -m " + ram
else:
ram = ""
if platform.system() == "Windows":
disk_number = self.get_physical_disk_number(usb_disk)
disk_number = self.get_physical_disk_number(qemu_usb_disk)
parent_dir = os.getcwd()
os.chdir(resource_path(os.path.join("data", "tools", "qemu")))
cmd = qemu + ' -L . -boot c' + ram + ' -hda //./PhysicalDrive ' + disk_number
try:
log("Executing ==> " + qemu + " -L . -boot c -m " + ram + " -hda //./PhysicalDrive" + disk_number)
subprocess.Popen("qemu-system-x86_64.exe -L . -boot c -m " + ram + " -hda //./PhysicalDrive" + disk_number, shell=True)
log("Executing ==> " + cmd)
subprocess.Popen(cmd, shell=True)
except:
QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting USB\n'
'Unable to start QEMU.')
QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting USB\nUnable to start QEMU.')
os.chdir(parent_dir)
elif platform.system() == "Linux":
cmd = qemu + ' -hda ' + qemu_usb_disk + ram + ' -vga std'
try:
qemu_cmd = qemu + ' -hda ' + usb_disk[:-1] + ' -m ' + ram + ' -vga std'
log('Executing ==> ' + qemu_cmd)
log('Executing ==> ' + cmd)
# adminCmd([qemu, '-hda', usb_disk[:-1], '-m', ram, '-vga std'], gui=True)
subprocess.Popen(qemu_cmd, shell=True)
subprocess.Popen(cmd, shell=True)
# adminCmd(qemu_cmd, gui=True)
except:
QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting USB\n\nUnable to start QEMU.')
@ -120,36 +131,26 @@ class Qemu(QtWidgets.QDialog, Ui_Dialog):
Choose a ram size for ISO booting.
:return: Ram size as string.
"""
if self.ui.ram_iso_256.isChecked():
return str(256)
elif self.ui.ram_iso_512.isChecked():
return str(512)
elif self.ui.ram_iso_768.isChecked():
return str(768)
elif self.ui.ram_iso_1024.isChecked():
return str(1024)
elif self.ui.ram_iso_2048.isChecked():
return str(2047)
else:
selected_ram = self.ui.combo_iso_boot_ram.currentText()
log("QEMU: ISO RAM = " + selected_ram)
if selected_ram == "Default":
return None
else:
return selected_ram
def qemu_usb_ram(self):
"""
Choose a ram size for USB booting.
:return: Ram size as string.
"""
if self.ui.ram_usb_256.isChecked():
return str(256)
if self.ui.ram_usb_512.isChecked():
return str(512)
if self.ui.ram_usb_768.isChecked():
return str(768)
if self.ui.ram_usb_1024.isChecked():
return str(1024)
if self.ui.ram_usb_2048.isChecked():
return str(2047)
else:
selected_ram = self.ui.combo_usb_boot_ram.currentText()
log("QEMU: USB RAM = " + selected_ram)
if selected_ram == "Default":
return None
else:
return selected_ram
def check_qemu_exist(self):
"""
@ -158,21 +159,22 @@ class Qemu(QtWidgets.QDialog, Ui_Dialog):
"""
if platform.system() == "Linux":
if subprocess.call('which qemu-system-x86_64', shell=True) == 0:
log("qemu-system-x86_64 exists...")
qemu = "qemu-system-x86_64"
elif subprocess.call('which qemu', shell=True) == 0:
log("qemu exists")
qemu = "qemu"
else:
qemu = None
qemu = ""
if qemu:
return qemu
else:
return None
elif platform.system() == "Windows":
log(resource_path(os.path.join("data", "tools", "qemu", "qemu-system-x86_64.exe")))
return resource_path(os.path.join("data", "tools", "qemu", "qemu-system-x86_64.exe"))
qemu = resource_path(os.path.join("data", "tools", "qemu", "qemu-system-x86_64.exe"))
log(qemu)
if qemu:
log("QEMU: using " + qemu)
else:
log("QEMU: ERROR: not found!")
return qemu
def get_physical_disk_number(self, usb_disk):
@ -194,3 +196,4 @@ class Qemu(QtWidgets.QDialog, Ui_Dialog):
"""
log("Physical Device Number is " + partition.Caption[6:-14])
return str(partition.Caption[6:-14])

@ -123,8 +123,8 @@ def syslinux_distro_dir(usb_disk, iso_link, distro):
install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(iso_link))
distro_syslinux_install_dir = os.path.join(install_dir, iso_linux_bin_dir.strip("/")).replace(usb_mount, "")
distro_sys_install_bs = os.path.join(install_dir, iso_linux_bin_dir.strip("/"), distro + '.bs')
log (distro_sys_install_bs)
#log (distro_syslinux_install_dir)
# log (distro_sys_install_bs)
# log (distro_syslinux_install_dir)
if usb_fs in syslinux_fs:
if config.syslinux_version == str(3):

@ -133,20 +133,32 @@ class UDisks2(object):
def mount(self, device_node_path):
d = self.device(device_node_path)
mount_options = ['rw', 'noexec', 'nosuid',
'nodev', 'uid=%d'%os.geteuid(), 'gid=%d'%os.getegid()]
# euid = os.environ['SUDO_UID']
# egid = os.environ['SUDO_GID']
#
# if euid and egid:
# user, group = int(euid), int(egid)
# else:
# user, group = os.getuid(), os.getgid()
#
# mount_options = ['rw', 'noexec', 'nosuid', 'nodev', 'uid=%d' % user, 'gid=%d' % group]
mount_options = ['rw', 'noexec', 'nosuid', 'nodev']
try:
return str(d.Mount(
mp = str(d.Mount(
{
'auth.no_user_interaction':True,
'options':','.join(mount_options)
},
dbus_interface=self.FILESYSTEM))
print(mp)
except:
# May be already mounted, check
mp = node_mountpoint(str(device_node_path))
if mp is None:
raise
finally:
return mp
def unmount(self, device_node_path):

@ -119,6 +119,9 @@ def uninstall_distro():
if platform.system() == 'Linux':
os.system('sync')
# remove 'immutable' from files on ext2/3/4 fs
if usb_mount:
subprocess.call("chattr -i -R %s/* 2>/dev/null" % usb_mount, shell=True)
if os.path.exists(os.path.join(usb_mount, "multibootusb", config.uninstall_distro_dir_name, "iso_file_list.cfg")):
with open(os.path.join(usb_mount, "multibootusb", config.uninstall_distro_dir_name, "iso_file_list.cfg"), "r") as f:

@ -27,7 +27,7 @@ def update_distro_cfg_files(iso_link, usb_disk, distro, persistence=0):
usb_label = usb_details['label']
patch = None
iso_cfg_ext_dir = os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir")
if isolinux_bin_exist(config.iso_link):
if isolinux_bin_exist(config.image_path):
isolinux_path = os.path.join(iso_cfg_ext_dir, isolinux_bin_path(iso_link)[1:])
config.status_text = "Updating config files..."
install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(iso_link))
@ -226,7 +226,7 @@ def update_distro_cfg_files(iso_link, usb_disk, distro, persistence=0):
# Assertain if the entry is made..
sys_cfg_file = os.path.join(config.usb_mount, "multibootusb", "syslinux.cfg")
if gen.check_text_in_file(sys_cfg_file, iso_basename(config.iso_link)):
if gen.check_text_in_file(sys_cfg_file, iso_basename(config.image_path)):
log('Updated entry in syslinux.cfg...')
else:
log('Unable to update entry in syslinux.cfg...')
@ -263,11 +263,11 @@ def update_mbusb_cfg_file(iso_link, usb_uuid, usb_mount, distro):
config_file.write(string)
config_file.close()
with open(sys_cfg_file, "a") as f:
f.write("#start " + iso_basename(config.iso_link) + "\n")
f.write("LABEL " + iso_basename(config.iso_link) + "\n")
f.write("MENU LABEL " + iso_basename(config.iso_link) + "\n")
f.write("#start " + iso_basename(config.image_path) + "\n")
f.write("LABEL " + iso_basename(config.image_path) + "\n")
f.write("MENU LABEL " + iso_basename(config.image_path) + "\n")
f.write("BOOT " + '/multibootusb/' + iso_basename(iso_link) + '/' + isolinux_bin_dir(iso_link).replace("\\", "/") + '/' + distro + '.bs' + "\n")
f.write("#end " + iso_basename(config.iso_link) + "\n")
f.write("#end " + iso_basename(config.image_path) + "\n")
elif distro == "Windows":
if os.path.exists(sys_cfg_file):
config_file = open(sys_cfg_file, "a")
@ -284,7 +284,7 @@ def update_mbusb_cfg_file(iso_link, usb_uuid, usb_mount, distro):
config_file.write("LABEL " + iso_basename(iso_link) + "\n")
config_file.write("MENU LABEL " + iso_basename(iso_link) + "\n")
config_file.write("KERNEL grub.exe" + "\n")
config_file.write('APPEND --config-file=/multibootusb/' + iso_basename(config.iso_link) + '/menu.lst' + "\n")
config_file.write('APPEND --config-file=/multibootusb/' + iso_basename(config.image_path) + '/menu.lst' + "\n")
config_file.write("#end " + iso_basename(iso_link) + "\n")
config_file.close()
elif distro == 'kaspersky':
@ -293,7 +293,7 @@ def update_mbusb_cfg_file(iso_link, usb_uuid, usb_mount, distro):
config_file.write("#start " + iso_basename(iso_link) + "\n")
config_file.write("LABEL " + iso_basename(iso_link) + "\n")
config_file.write("MENU LABEL " + iso_basename(iso_link) + "\n")
config_file.write("CONFIG " + '/multibootusb/' + iso_basename(config.iso_link) + '/kaspersky.cfg' + "\n")
config_file.write("CONFIG " + '/multibootusb/' + iso_basename(config.image_path) + '/kaspersky.cfg' + "\n")
config_file.write("#end " + iso_basename(iso_link) + "\n")
config_file.close()
elif distro == 'grub4dos':
@ -334,7 +334,7 @@ def update_mbusb_cfg_file(iso_link, usb_uuid, usb_mount, distro):
config_file.write("append initrd=../ntldr" + '\n')
else:
if isolinux_bin_exist(config.iso_link) is True:
if isolinux_bin_exist(config.image_path) is True:
if distro == "generic":
distro_syslinux_install_dir = isolinux_bin_dir(iso_link)
if not isolinux_bin_dir(iso_link) == "/":
@ -376,34 +376,34 @@ label hwinfo
def update_menu_lst():
sys_cfg_file = os.path.join(config.usb_mount, "multibootusb", "syslinux.cfg")
install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link))
menu_lst = iso_menu_lst_path(config.iso_link).replace("\\", "/")
install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path))
menu_lst = iso_menu_lst_path(config.image_path).replace("\\", "/")
with open(sys_cfg_file, "a") as f:
f.write("#start " + iso_basename(config.iso_link) + "\n")
f.write("LABEL " + iso_basename(config.iso_link) + "\n")
f.write("MENU LABEL " + iso_basename(config.iso_link) + "\n")
f.write("#start " + iso_basename(config.image_path) + "\n")
f.write("LABEL " + iso_basename(config.image_path) + "\n")
f.write("MENU LABEL " + iso_basename(config.image_path) + "\n")
f.write("KERNEL grub.exe" + "\n")
f.write('APPEND --config-file=/' + menu_lst + "\n")
f.write("#end " + iso_basename(config.iso_link) + "\n")
f.write("#end " + iso_basename(config.image_path) + "\n")
def update_grub4dos_iso_menu():
sys_cfg_file = os.path.join(config.usb_mount, "multibootusb", "syslinux.cfg")
install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link))
install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path))
menu_lst_file = os.path.join(install_dir, 'menu.lst')
with open(menu_lst_file, "w") as f:
f.write("title Boot " + iso_name(config.iso_link) + "\n")
f.write("find --set-root --ignore-floppies --ignore-cd /multibootusb/" + iso_basename(config.iso_link) + '/'
+ iso_name(config.iso_link) + "\n")
f.write("map --heads=0 --sectors-per-track=0 /multibootusb/" + iso_basename(config.iso_link)
+ '/' + iso_name(config.iso_link) + ' (hd32)' + "\n")
f.write("title Boot " + iso_name(config.image_path) + "\n")
f.write("find --set-root --ignore-floppies --ignore-cd /multibootusb/" + iso_basename(config.image_path) + '/'
+ iso_name(config.image_path) + "\n")
f.write("map --heads=0 --sectors-per-track=0 /multibootusb/" + iso_basename(config.image_path)
+ '/' + iso_name(config.image_path) + ' (hd32)' + "\n")
f.write("map --hook" + "\n")
f.write("chainloader (hd32)")
with open(sys_cfg_file, "a") as f:
f.write("#start " + iso_basename(config.iso_link) + "\n")
f.write("LABEL " + iso_basename(config.iso_link) + "\n")
f.write("MENU LABEL " + iso_basename(config.iso_link) + "\n")
f.write("#start " + iso_basename(config.image_path) + "\n")
f.write("LABEL " + iso_basename(config.image_path) + "\n")
f.write("MENU LABEL " + iso_basename(config.image_path) + "\n")
f.write("KERNEL grub.exe" + "\n")
f.write('APPEND --config-file=/multibootusb/' + iso_basename(config.iso_link) + '/' + iso_name(config.iso_link) + "\n")
f.write("#end " + iso_basename(config.iso_link) + "\n")
f.write('APPEND --config-file=/multibootusb/' + iso_basename(config.image_path) + '/' + iso_name(config.image_path) + "\n")
f.write("#end " + iso_basename(config.image_path) + "\n")

@ -85,32 +85,39 @@ def disk_usage(mount_path):
raise NotImplementedError("Platform not supported.")
def list(partition=1, fixed=None):
def list_devices(partition=1, fixed=None):
"""
List inserted USB devices.
:return: USB devices as list.
"""
devices = []
if platform.system() == "Linux":
import pyudev
import dbus
try:
# pyudev is good enough to detect USB devices on modern Linux machines.
gen.log("Using pyudev for detecting USB drives...")
import pyudev
context = pyudev.Context()
if fixed is None:
for device in context.list_devices(subsystem='block', DEVTYPE='partition',
ID_FS_USAGE="filesystem", ID_TYPE="disk",
ID_BUS="usb"):
# if device['ID_BUS'] == "usb" and device['DEVTYPE'] == "partition":
if device.get('ID_BUS') in ("usb", "scsi") and device.get('DEVTYPE') == "partition":
# gen.log(device['DEVNAME'])
devices.append(str(device['DEVNAME']))
else:
for device in context.list_devices(subsystem='block', DEVTYPE='partition'):
devices.append(str(device['DEVNAME']))
# if fixed is None:
# for device in context.list_devices(subsystem='block', DEVTYPE='partition',
# ID_FS_USAGE="filesystem", ID_TYPE="disk",
# ID_BUS="usb"):
# # if device['ID_BUS'] == "usb" and device['DEVTYPE'] == "partition":
# if device.get('ID_BUS') in ("usb", "scsi") and device.get('DEVTYPE') == "partition":
# # gen.log(device['DEVNAME'])
# devices.append(str(device['DEVNAME']))
# else:
# for device in context.list_devices(subsystem='block', DEVTYPE='partition'):
# devices.append(str(device['DEVNAME']))
for device in context.list_devices(subsystem='block',
ID_FS_USAGE="filesystem",
ID_TYPE="disk",
ID_BUS="usb"):
if device.get('ID_BUS') in ("usb", "scsi"):
gen.log("\t" + device['DEVNAME'])
# devices.append(str(device['DEVNAME']))
devices.append(device)
except:
import dbus
bus = dbus.SystemBus()
try:
# You should come here only if your system does'nt have udev installed.
@ -187,6 +194,8 @@ def details_udev(usb_disk_part):
"""
Get details of USB partition using udev
"""
assert usb_disk_part is not None
if platform.system() == "Linux":
import pyudev
"""
@ -227,8 +236,24 @@ def details_udev(usb_disk_part):
model = str(device['ID_MODEL'])
except:
model = str('No_Model')
elif device.get('ID_BUS') in ("usb", "scsi") and device.get('DEVTYPE') == "disk":
mount_point = ''
uuid = 'No_UUID'
file_system = 'No_FS'
try:
label = str(device['ID_FS_LABEL'])
except:
label = "No_Label"
try:
vendor = str(device['ID_VENDOR'])
except:
vendor = str('No_Vendor')
try:
model = str(device['ID_MODEL'])
except:
model = str('No_Model')
if not mount_point == '':
if mount_point:
size_total = shutil.disk_usage(mount_point)[0]
size_used = shutil.disk_usage(mount_point)[1]
size_free = shutil.disk_usage(mount_point)[2]
@ -370,6 +395,9 @@ def details(usb_disk_part):
vendor == > returns the name of the manufacturer.
model == > returns the model name of the USB.
"""
assert usb_disk_part is not None
if platform.system() == 'Linux':
try:
udev = details_udev(usb_disk_part)
@ -410,7 +438,7 @@ def details(usb_disk_part):
'vendor': vendor, 'model': model}
if __name__ == '__main__':
usb_devices = list()
usb_devices = list_devices()
if usb_devices is not None:
for dev in usb_devices:
gen.log(details(dev))

Loading…
Cancel
Save