diff --git a/multibootusb b/multibootusb old mode 100644 new mode 100755 diff --git a/scripts/_7zip.py b/scripts/_7zip.py index f4d2672..da550f1 100644 --- a/scripts/_7zip.py +++ b/scripts/_7zip.py @@ -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() diff --git a/scripts/grub.py b/scripts/grub.py index e8878f7..d50571f 100644 --- a/scripts/grub.py +++ b/scripts/grub.py @@ -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') diff --git a/scripts/gui/about.ui b/scripts/gui/about.ui new file mode 100644 index 0000000..8b8bbd5 --- /dev/null +++ b/scripts/gui/about.ui @@ -0,0 +1,117 @@ + + + About + + + + 0 + 0 + 640 + 380 + + + + + 0 + 0 + + + + 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-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> + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 40 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + + + + + + diff --git a/scripts/gui/multibootusb.ui b/scripts/gui/multibootusb.ui index e966dbc..276b595 100644 --- a/scripts/gui/multibootusb.ui +++ b/scripts/gui/multibootusb.ui @@ -1,1118 +1,919 @@ - Dialog - + MainWindow + 0 0 - 717 - 516 + 629 + 593 + + + 0 + 0 + + - multibootusb + MultiBootUSB - - - - - true - - - 0 - - - - true + + + + + + 5 - - MultiBootUSB - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - USB Details - - - Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing - - - false - - - false - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + 5 + + + 5 + + + 5 + + + + + + + 10 + + + + + + 0 + 0 + - - - - Drive: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - Vendor: - - - - - - - - - - - - - - Model: - - - - - - - QFrame::NoFrame - - - Size: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Mount: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Quit - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Browse ISO - - - false - - - false - - - - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - QListView::Fixed - - - - - - - false - - - true - - - font-weight: 600 - - - Persistence - - - - - - - - - - Detect Drives - - - - - - - Uninstall Distro - - - - - - - - - - false - - - Choose Persistence size. Not all distros supports persistence... - - - false - - - Qt::Horizontal - - - QSlider::TicksBothSides - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - All Drives - - - - - - - false - - - 0 MB - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Install - - - - - - - 0 - - - false - - - - - - - - 0 - 0 - - - - false - - - false - - - QFrame::Plain - - - Status: Idle - - - Qt::AutoText - - - false - - - - - - - font-weight: 600; margin-top:15 - - - Step 1 :: Select drive - - - - - - - font-weight: 600; margin-top:15 - - - Step 2 :: Select ISO - - - 0 - - - - - - - font-weight: 600; margin-top:15 - - - Step 3 :: Install distro - - - - - - - - + + + 100 + 0 + + + + <b>Select USB disk</b> + + + + + + + + + + Detect Drives + + + + + + + All Drives + + + + + + + USB Details + + + Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing + + + false + + + false + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Drive: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + Vendor: + + + + + + + + + + + + + + Model: + + + + + + + + + + + + + + QFrame::NoFrame + + + Size: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + Mount: + + + + + + + + + + + + + + + + + + + 10 + + + 10 + + + + + Image Details + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Type: + + + + + + + + + + + + + + Size: + + + + + + + + + + + + + + Boot: + + + + + + + + + + + + + + + + + Browse + + + false + + + false + + + + + + + <b>Select image</b> + + + + + + + + + + + + + + true - - Write Image to USB - - - - 0 - - - 0 - - - 0 + + false + + + 3 + + + + true - - 0 + + MultiBootUSB + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + Uninstall distro + + + + + + + Install distro + + + + + + + false + + + Choose Persistence size. Not all distros supports persistence... + + + false + + + Qt::Horizontal + + + QSlider::TicksBothSides + + + + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + QListView::Fixed + + + + + + + false + + + true + + + font-weight: 600 + + + Persistence + + + + + + + false + + + 0 MB + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + true - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 5 + + Write Image to disk + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Write image to USB + + + + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Vertical + + + + 20 + 40 + - - 5 + + + + + + + + + Install Syslinux + + + + + + + + false - - 5 + + Install Syslinux + + + + + + + + Install only syslinu&x (existing configurations will not be altered). + + + + + + + Install syslinux and copy all re&quired files. + + + + + + + Install + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + syslinux.cfg + + + + + + + + Edit + + + + + + + <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> + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + Boot ISO/USB + + + + + + 10 + + + 20 + + + + + - - 5 + + Boot USB :: Test bootable USB drive without reboot - - - - - - Select image - - + + + + + - - - Browse image... - - + + Default + - + + 256 + - - - Bootable ISO - - + + 512 + - - - Image Size - - + + 768 + - - - Qt::Vertical - - - - 20 - 40 - - - + + 1024 + - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - Select USB Drive - - - + + 2048 + + + + + + + Choose RAM size: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Boot &USB + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + MB + + + + + + + + + + + + Boot ISO :: Test bootable ISOs without reboot + + + + + + + + Choose RAM size: + + + + + + + Boot &ISO + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + - - - Refresh USB - - + + Default + - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - Disk Type: - - - - - - - Disk Size: - - - - - - - Disk Label: - - - - - - - - - - - - - - - - - - - - - - - - - + + 256 + - - - Qt::Vertical - - - - 20 - 40 - - - + + 512 + - - - - - - - - - - 0 - 0 - - - - Status: Idle - - - - - - - - - <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> - - - - - - - 0 - - - - - - - Write Image - - - - - - - - - - - - Quit - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - Install Syslinux - - - - - - - - false - - - Install Syslinux - - - - - - - - Install only syslinu&x (existing configurations will not be altered). - - - - - - - Install syslinux and copy all re&quired files. - - - - - - - Install - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Edit syslinux.cfg - - - - - - - - Edit - - - - - - - <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> - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - - - Boot ISO/USB - - - - - - Boot ISO :: Test bootable ISOs without reboot - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Boot ISO - - - - - - - Browse ISO - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Choose RAM size: - - - - - - - &256 MB - - - - - - - &512 MB - - - - - - - &768 MB - - - - - - - &1024 MB - - - - - - - 204&8 MB - - - - + + + 768 + + + + + 1024 + + + + + 2048 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + MB + + + + + + + - - - - - - - - - - - Boot USB :: Test bootable USB drive without reboot - - - - - - - - 20&48 MB - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Boot USB - - - - - - - 25&6 MB - - - - - - - 7&68 MB - - - - - - - Choose RAM size: - - - - - - - 5&12 MB - - - - - - - 1&024 MB - - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + - - - About - - - - - - - - Qt::Vertical - - - QSizePolicy::Minimum - - - - 20 - 40 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Vertical - - - QSizePolicy::Minimum - - - - 20 - 30 - - - - - - - - <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> - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - + + + + + 0 + + + false + - - - + + + + + + + 0 + 0 + 629 + 19 + + + + true + + + + &File + + + + + + &Help + + + + + + + + + + &Quit + + + + + &About + + - - comboBox - detect_usb - lineEdit - slider_persistence - uninstall - listWidget - close - comboBox_2 - pushButton - pushbtn_imager_refreshusb - lineEdit_3 - imager_write - imager_close - install_sys_only - install_sys_all - install_syslinux - edit_syslinux - lineEdit_2 - browse_iso_qemu - ram_iso_256 - ram_iso_512 - ram_iso_768 - ram_iso_1024 - ram_iso_2048 - boot_iso_qemu - ram_usb_256 - ram_usb_512 - ram_usb_768 - ram_usb_1024 - ram_usb_2048 - boot_usb_qemu - tabWidget - diff --git a/scripts/gui/old_multibootusb.ui b/scripts/gui/old_multibootusb.ui new file mode 100644 index 0000000..e966dbc --- /dev/null +++ b/scripts/gui/old_multibootusb.ui @@ -0,0 +1,1118 @@ + + + Dialog + + + + 0 + 0 + 717 + 516 + + + + multibootusb + + + + + + true + + + 0 + + + + true + + + MultiBootUSB + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + USB Details + + + Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing + + + false + + + false + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Drive: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + Vendor: + + + + + + + + + + + + + + Model: + + + + + + + QFrame::NoFrame + + + Size: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Mount: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Quit + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Browse ISO + + + false + + + false + + + + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + QListView::Fixed + + + + + + + false + + + true + + + font-weight: 600 + + + Persistence + + + + + + + + + + Detect Drives + + + + + + + Uninstall Distro + + + + + + + + + + false + + + Choose Persistence size. Not all distros supports persistence... + + + false + + + Qt::Horizontal + + + QSlider::TicksBothSides + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + All Drives + + + + + + + false + + + 0 MB + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Install + + + + + + + 0 + + + false + + + + + + + + 0 + 0 + + + + false + + + false + + + QFrame::Plain + + + Status: Idle + + + Qt::AutoText + + + false + + + + + + + font-weight: 600; margin-top:15 + + + Step 1 :: Select drive + + + + + + + font-weight: 600; margin-top:15 + + + Step 2 :: Select ISO + + + 0 + + + + + + + font-weight: 600; margin-top:15 + + + Step 3 :: Install distro + + + + + + + + + + true + + + Write Image to USB + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + + Select image + + + + + + Browse image... + + + + + + + + + + Bootable ISO + + + + + + + Image Size + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Select USB Drive + + + + + + + + + Refresh USB + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + Disk Type: + + + + + + + Disk Size: + + + + + + + Disk Label: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + 0 + 0 + + + + Status: Idle + + + + + + + + + <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> + + + + + + + 0 + + + + + + + Write Image + + + + + + + + + + + + Quit + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Install Syslinux + + + + + + + + false + + + Install Syslinux + + + + + + + + Install only syslinu&x (existing configurations will not be altered). + + + + + + + Install syslinux and copy all re&quired files. + + + + + + + Install + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Edit syslinux.cfg + + + + + + + + Edit + + + + + + + <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> + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + Boot ISO/USB + + + + + + Boot ISO :: Test bootable ISOs without reboot + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Boot ISO + + + + + + + Browse ISO + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Choose RAM size: + + + + + + + &256 MB + + + + + + + &512 MB + + + + + + + &768 MB + + + + + + + &1024 MB + + + + + + + 204&8 MB + + + + + + + + + + + + + + + + + Boot USB :: Test bootable USB drive without reboot + + + + + + + + 20&48 MB + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Boot USB + + + + + + + 25&6 MB + + + + + + + 7&68 MB + + + + + + + Choose RAM size: + + + + + + + 5&12 MB + + + + + + + 1&024 MB + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + About + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 30 + + + + + + + + <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> + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + comboBox + detect_usb + lineEdit + slider_persistence + uninstall + listWidget + close + comboBox_2 + pushButton + pushbtn_imager_refreshusb + lineEdit_3 + imager_write + imager_close + install_sys_only + install_sys_all + install_syslinux + edit_syslinux + lineEdit_2 + browse_iso_qemu + ram_iso_256 + ram_iso_512 + ram_iso_768 + ram_iso_1024 + ram_iso_2048 + boot_iso_qemu + ram_usb_256 + ram_usb_512 + ram_usb_768 + ram_usb_1024 + ram_usb_2048 + boot_usb_qemu + tabWidget + + + + diff --git a/scripts/gui/old_ui_multibootusb.py b/scripts/gui/old_ui_multibootusb.py new file mode 100644 index 0000000..2daf7ed --- /dev/null +++ b/scripts/gui/old_ui_multibootusb.py @@ -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", "

WARNING : Any bootable USB made using ISO Imager will destroy all data on the selected USB disk.

Use it at your own risk. Developers are not responsile for loss of any data.

")) + 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", "

Edit syslinux.cfg file directly using the default editor of your system.

Be CAREFUL while editing syslinux.cfg!

")) + 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", "

An advanced bootable usb creator with option to install/uninstall multiple distros.

This software is written in python and pyqt.

Copyright 2010-2016 Sundar

Author(s): Sundar, Ian Bruce, Lee

Licence: GPL version 2 or later

Home page: http://multibootusb.org

Help/Email: feedback.multibootusb@gmail.com

Source Code: https://github.com/mbusb/multibootusb


")) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Dialog", "About")) + diff --git a/scripts/gui/ui_about.py b/scripts/gui/ui_about.py new file mode 100644 index 0000000..1562d20 --- /dev/null +++ b/scripts/gui/ui_about.py @@ -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", "

An advanced bootable usb creator with option to install/uninstall multiple distros.

This software is written in Python and PyQt.

Copyright 2010-2017 Sundar

Author(s): Sundar, Ian Bruce, Lee

Licence: GPL version 2 or later

Home page: http://multibootusb.org

Help/Email: feedback.multibootusb@gmail.com

Source Code: https://github.com/mbusb/multibootusb


")) + self.button_close.setText(_translate("About", "Close")) + diff --git a/scripts/gui/ui_multibootusb.py b/scripts/gui/ui_multibootusb.py index 2daf7ed..cb31d98 100644 --- a/scripts/gui/ui_multibootusb.py +++ b/scripts/gui/ui_multibootusb.py @@ -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", "

WARNING : Any bootable USB made using ISO Imager will destroy all data on the selected USB disk.

Use it at your own risk. Developers are not responsile for loss of any data.

")) - 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", "

Edit syslinux.cfg file directly using the default editor of your system.

Be CAREFUL while editing syslinux.cfg!

")) - 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", "

An advanced bootable usb creator with option to install/uninstall multiple distros.

This software is written in python and pyqt.

Copyright 2010-2016 Sundar

Author(s): Sundar, Ian Bruce, Lee

Licence: GPL version 2 or later

Home page: http://multibootusb.org

Help/Email: feedback.multibootusb@gmail.com

Source Code: https://github.com/mbusb/multibootusb


")) - 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", "Select USB disk")) + 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", "Select image")) + 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", "

Edit syslinux.cfg file using the default editor.

Be CAREFUL while editing syslinux.cfg!

")) + 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")) diff --git a/scripts/imager.py b/scripts/imager.py index 6414db6..0c7e9ad 100644 --- a/scripts/imager.py +++ b/scripts/imager.py @@ -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): """ diff --git a/scripts/install.py b/scripts/install.py index c9c922f..631beec 100644 --- a/scripts/install.py +++ b/scripts/install.py @@ -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() diff --git a/scripts/iso.py b/scripts/iso.py index e0a0b93..124e5d8 100644 --- a/scripts/iso.py +++ b/scripts/iso.py @@ -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: diff --git a/scripts/isodump3.py b/scripts/isodump3.py index 5e572ec..d7c3d6d 100644 --- a/scripts/isodump3.py +++ b/scripts/isodump3.py @@ -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 diff --git a/scripts/mbusb_cli.py b/scripts/mbusb_cli.py index c8ef675..49d1365 100644 --- a/scripts/mbusb_cli.py +++ b/scripts/mbusb_cli.py @@ -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') diff --git a/scripts/mbusb_gui.py b/scripts/mbusb_gui.py index 6e279b9..c084a7e 100644 --- a/scripts/mbusb_gui.py +++ b/scripts/mbusb_gui.py @@ -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,192 @@ 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.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) + # self.qemu = Qemu() + +# FIXME +# self.ui.label_persistence_value.setVisible(False) +# self.ui.label_persistence.setVisible(False) +# self.ui.slider_persistence.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) # 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) + + 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) 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,31 +227,39 @@ 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.usb_disk, config.image_path)[0] + per_max_size = persistence.persistence_distro(config.distro, config.usb_disk, config.image_path)[1] if per_availability is not None: self.ui.label_persistence_value.setVisible(True) self.ui.label_persistence.setVisible(True) @@ -250,7 +280,7 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog): 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)) + log('Persistence is not available for ' + iso_name(config.image_path)) else: log("File not selected...") @@ -264,16 +294,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 +376,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 +402,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 +416,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") + 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 +470,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 +485,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 +506,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 " + os.path.basename(config.imager_iso_link) + "" + " to " + "" + - config.imager_usb_disk + "") - 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 +591,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 +601,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 +723,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() diff --git a/scripts/persistence.py b/scripts/persistence.py index 66925e8..952ecec 100644 --- a/scripts/persistence.py +++ b/scripts/persistence.py @@ -66,22 +66,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) diff --git a/scripts/qemu.py b/scripts/qemu.py index 467ba75..025c307 100644 --- a/scripts/qemu.py +++ b/scripts/qemu.py @@ -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]) + diff --git a/scripts/syslinux.py b/scripts/syslinux.py index 3e44de5..ed33d51 100644 --- a/scripts/syslinux.py +++ b/scripts/syslinux.py @@ -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): diff --git a/scripts/udisks.py b/scripts/udisks.py index 659b62d..e02ec59 100644 --- a/scripts/udisks.py +++ b/scripts/udisks.py @@ -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): diff --git a/scripts/uninstall_distro.py b/scripts/uninstall_distro.py index e825a4c..1212ad8 100644 --- a/scripts/uninstall_distro.py +++ b/scripts/uninstall_distro.py @@ -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: diff --git a/scripts/update_cfg_file.py b/scripts/update_cfg_file.py index 33a71b3..70e8d3d 100644 --- a/scripts/update_cfg_file.py +++ b/scripts/update_cfg_file.py @@ -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") diff --git a/scripts/usb.py b/scripts/usb.py index b782fd2..217c6a3 100644 --- a/scripts/usb.py +++ b/scripts/usb.py @@ -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))