diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index 401b761..0000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/README.md b/README.md
index 0b8f152..2f33d4f 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
# Nugget
-Unlock your device's full potential! Works on all versions iOS 17.0-18.1 beta 4
+Unlock your device's full potential!
-Sparserestore was patched in iOS 18.1 beta 5. It will not be supported, please stop asking.
+Sparserestore works on all versions iOS 17.0-17.7 and iOS 18.0-18.1 beta 4. There is partial support for iOS 17.7.1 and iOS 18.1 beta 5+.
This uses the sparserestore exploit to write to files outside of the intended restore location, like mobilegestalt.
-Note: I am not responsible if your device bootloops. Please back up your data before using.
+Note: I am not responsible if your device bootloops. Please back up your data before using!
## Features
- Enable Dynamic Island on any device
@@ -27,14 +27,20 @@ Note: I am not responsible if your device bootloops. Please back up your data be
- Enabling lock screen clock animation, lock screen page duplication button, and more!
- Disabling the new iOS 18 Photos UI
- EU Enabler
+- AI Enabler
- Springboard Options (from Cowabunga Lite)
- Internal Options (from Cowabunga Lite)
## Running the Program
-Requirements:
+**Requirements:**
- pymobiledevice3
- Python 3.8 or newer
+- **Windows:**
+ - Either [Apple Devices (from Microsoft Store)](https://apps.microsoft.com/detail/9np83lwlpz9k%3Fhl%3Den-US%26gl%3DUS&ved=2ahUKEwjE-svo7qyJAxWTlYkEHQpbH3oQFnoECBoQAQ&usg=AOvVaw0rZTXCFmRaHAifkEEu9tMI) app or [iTunes (from Apple website)](https://support.apple.com/en-us/106372)
+- **Linux:**
+ - [usbmuxd](https://github.com/libimobiledevice/usbmuxd) and [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice)
+
Note: It is highly recommended to use a virtual environment:
```
python3 -m venv .env # only needed once
@@ -67,4 +73,5 @@ The application itself can be compiled by running `compile.py`.
- [JJTech](https://github.com/JJTech0130) for Sparserestore/[TrollRestore](https://github.com/JJTech0130/TrollRestore)
- [pymobiledevice3](https://github.com/doronz88/pymobiledevice3)
- [disfordottie](https://x.com/disfordottie) for some global flag features
+- [sneakyf1shy](https://github.com/f1shy-dev) for [AI Enabler](https://gist.github.com/f1shy-dev/23b4a78dc283edd30ae2b2e6429129b5)
diff --git a/Sparserestore/__init__.py b/Sparserestore/__init__.py
index 0c037de..2a94512 100644
--- a/Sparserestore/__init__.py
+++ b/Sparserestore/__init__.py
@@ -9,6 +9,13 @@
from . import backup
+def reboot_device(reboot: bool = False, lockdown_client: LockdownClient = None):
+ if reboot and lockdown_client != None:
+ print("Success! Rebooting your device...")
+ with DiagnosticsService(lockdown_client) as diagnostics_service:
+ diagnostics_service.restart()
+ print("Remember to turn Find My back on!")
+
def perform_restore(backup: backup.Backup, reboot: bool = False, lockdown_client: LockdownClient = None):
try:
with TemporaryDirectory() as backup_dir:
@@ -18,6 +25,8 @@ def perform_restore(backup: backup.Backup, reboot: bool = False, lockdown_client
lockdown_client = create_using_usbmux()
with Mobilebackup2Service(lockdown_client) as mb:
mb.restore(backup_dir, system=True, reboot=False, copy=False, source=".")
+ # reboot the device
+ reboot_device(reboot, lockdown_client)
except PyMobileDevice3Exception as e:
if "Find My" in str(e):
print("Find My must be disabled in order to use this tool.")
@@ -26,8 +35,4 @@ def perform_restore(backup: backup.Backup, reboot: bool = False, lockdown_client
elif "crash_on_purpose" not in str(e):
raise e
else:
- if reboot and lockdown_client != None:
- print("Success! Rebooting your device...")
- with DiagnosticsService(lockdown_client) as diagnostics_service:
- diagnostics_service.restart()
- print("Remember to turn Find My back on!")
\ No newline at end of file
+ reboot_device(reboot, lockdown_client)
\ No newline at end of file
diff --git a/Sparserestore/restore.py b/Sparserestore/restore.py
index 78c5a39..3e3e8c7 100644
--- a/Sparserestore/restore.py
+++ b/Sparserestore/restore.py
@@ -3,12 +3,81 @@
import os
class FileToRestore:
- def __init__(self, contents: str, restore_path: str, owner: int = 501, group: int = 501):
+ def __init__(self, contents: str, restore_path: str, domain: str = None, owner: int = 501, group: int = 501):
self.contents = contents
self.restore_path = restore_path
+ self.domain = domain
self.owner = owner
self.group = group
+def concat_exploit_file(file: FileToRestore, files_list: list[FileToRestore], last_domain: str) -> str:
+ base_path = "/var/backup"
+ # set it to work in the separate volumes (prevents a bootloop)
+ if file.restore_path.startswith("/var/mobile/"):
+ # required on iOS 17.0+ since /var/mobile is on a separate partition
+ base_path = "/var/mobile/backup"
+ elif file.restore_path.startswith("/private/var/mobile/"):
+ base_path = "/private/var/mobile/backup"
+ elif file.restore_path.startswith("/private/var/"):
+ base_path = "/private/var/backup"
+ # don't append the directory if it has already been added (restore will fail)
+ path, name = os.path.split(file.restore_path)
+ domain_path = f"SysContainerDomain-../../../../../../../..{base_path}{path}/"
+ new_last_domain = last_domain
+ if last_domain != domain_path:
+ files_list.append(backup.Directory(
+ "",
+ f"{domain_path}/",
+ owner=file.owner,
+ group=file.group
+ ))
+ new_last_domain = domain_path
+ files_list.append(backup.ConcreteFile(
+ "",
+ f"{domain_path}/{name}",
+ owner=file.owner,
+ group=file.group,
+ contents=file.contents
+ ))
+ return new_last_domain
+
+def concat_regular_file(file: FileToRestore, files_list: list[FileToRestore], last_domain: str, last_path: str):
+ path, name = os.path.split(file.restore_path)
+ paths = path.split("/")
+ new_last_domain = last_domain
+ # append the domain first
+ if last_domain != file.domain:
+ files_list.append(backup.Directory(
+ "",
+ file.domain,
+ owner=file.owner,
+ group=file.group
+ ))
+ new_last_domain = file.domain
+ # append each part of the path if it is not already there
+ full_path = ""
+ for path_item in paths:
+ if full_path != "":
+ full_path += "/"
+ full_path += path_item
+ if not last_path.startswith(full_path):
+ files_list.append(backup.Directory(
+ full_path,
+ file.domain,
+ owner=file.owner,
+ group=file.group
+ ))
+ last_path = full_path
+ # finally, append the file
+ files_list.append(backup.ConcreteFile(
+ f"{full_path}/{name}",
+ file.domain,
+ owner=file.owner,
+ group=file.group,
+ contents=file.contents
+ ))
+ return new_last_domain, full_path
+
# files is a list of FileToRestore objects
def restore_files(files: list, reboot: bool = False, lockdown_client: LockdownClient = None):
# create the files to be backed up
@@ -17,35 +86,18 @@ def restore_files(files: list, reboot: bool = False, lockdown_client: LockdownCl
sorted_files = sorted(files, key=lambda x: x.restore_path, reverse=True)
# add the file paths
last_domain = ""
+ last_path = ""
+ exploit_only = True
for file in sorted_files:
- base_path = "/var/backup"
- # set it to work in the separate volumes (prevents a bootloop)
- if file.restore_path.startswith("/var/mobile/"):
- # required on iOS 17.0+ since /var/mobile is on a separate partition
- base_path = "/var/mobile/backup"
- elif file.restore_path.startswith("/private/var/mobile/"):
- base_path = "/private/var/mobile/backup"
- elif file.restore_path.startswith("/private/var/"):
- base_path = "/private/var/backup"
- # don't append the directory if it has already been added (restore will fail)
- path, name = os.path.split(file.restore_path)
- domain_path = f"SysContainerDomain-../../../../../../../..{base_path}{path}/"
- if last_domain != domain_path:
- files_list.append(backup.Directory(
- "",
- f"{domain_path}/",
- owner=file.owner,
- group=file.group
- ))
- last_domain = domain_path
- files_list.append(backup.ConcreteFile(
- "",
- f"{domain_path}/{name}",
- owner=file.owner,
- group=file.group,
- contents=file.contents
- ))
- files_list.append(backup.ConcreteFile("", "SysContainerDomain-../../../../../../../.." + "/crash_on_purpose", contents=b""))
+ if file.domain == None:
+ last_domain = concat_exploit_file(file, files_list, last_domain)
+ else:
+ last_domain, last_path = concat_regular_file(file, files_list, last_domain, last_path)
+ exploit_only = False
+
+ # crash the restore to skip the setup (only works for exploit files)
+ if exploit_only:
+ files_list.append(backup.ConcreteFile("", "SysContainerDomain-../../../../../../../.." + "/crash_on_purpose", contents=b""))
# create the backup
back = backup.Backup(files=files_list)
@@ -53,6 +105,7 @@ def restore_files(files: list, reboot: bool = False, lockdown_client: LockdownCl
perform_restore(backup=back, reboot=reboot, lockdown_client=lockdown_client)
+# DEPRICATED
def restore_file(fp: str, restore_path: str, restore_name: str, reboot: bool = False, lockdown_client: LockdownClient = None):
# open the file and read the contents
contents = open(fp, "rb").read()
diff --git a/cli_app.py b/cli_app.py
deleted file mode 100644
index c65845e..0000000
--- a/cli_app.py
+++ /dev/null
@@ -1,233 +0,0 @@
-from Sparserestore.restore import restore_files, FileToRestore, restore_file
-from tweaks.tweaks import tweaks, TweakModifyType, FeatureFlagTweak, EligibilityTweak, AITweak, BasicPlistTweak, RdarFixTweak
-from tweaks.basic_plist_locations import FileLocationsList
-from devicemanagement.constants import Device
-
-from pymobiledevice3.exceptions import PyMobileDevice3Exception
-from pymobiledevice3.services.diagnostics import DiagnosticsService
-from pymobiledevice3 import usbmux
-from pymobiledevice3.lockdown import create_using_usbmux
-
-from pathlib import Path
-import plistlib
-import traceback
-
-running = True
-passed_check = False
-num_tweaks = len(tweaks)
-
-gestalt_path = Path.joinpath(Path.cwd(), "com.apple.MobileGestalt.plist")
-flags_path = Path.joinpath(Path.cwd(), "Global.plist")
-device = None
-
-def print_option(num: int, active: bool, message: str):
- txt = str(num) + ". "
- if active:
- txt = txt + "[Y] "
- txt = txt + message
- print(txt)
-
-def get_apply_number(num: int) -> int:
- return num + 5-num%5
-
-while running:
- print("""\n\n\n\n
-
- ,--.
- ,--.'| ___
- ,--,: : | ,--.'|_
-,`--.'`| ' : ,--, | | :,'
-| : : | | ,'_ /| ,----._,. ,----._,. : : ' :
-: | \\ | : .--. | | : / / ' / / / ' / ,---. .;__,' /
-| : ' '; |,'_ /| : . || : || : | / \\ | | |
-' ' ;. ;| ' | | . .| | .\\ .| | .\\ . / / |:__,'| :
-| | | \\ || | ' | | |. ; '; |. ; '; |. ' / | ' : |__
-' : | ; .': | : ; ; |' . . |' . . |' ; /| | | '.'|
-| | '`--' ' : `--' \\`---`-'| | `---`-'| |' | / | ; : ;
-' : | : , .-./.'__/\\_: | .'__/\\_: || : | | , /
-; |.' `--`----' | : : | : : \\ \\ / ---`-'
-'---' \\ \\ / \\ \\ / `----'
- `--`-' `--`-'
- """)
- print("CLI v3.0")
- print("by LeminLimez")
- print("Thanks @disfordottie for the clock animation and @lrdsnow for EU Enabler\n")
- print("Please back up your device before using!")
-
- while device == None:
- connected_devices = usbmux.list_devices()
- # Connect via usbmuxd
- for current_device in connected_devices:
- if current_device.is_usb:
- try:
- ld = create_using_usbmux(serial=current_device.serial)
- vals = ld.all_values
- device = Device(uuid=current_device.serial, name=vals['DeviceName'], version=vals['ProductVersion'], model=vals['ProductType'], locale=ld.locale, ld=ld)
- tweaks["RdarFix"].get_rdar_mode()
- except Exception as e:
- print(traceback.format_exc())
- input("Press Enter to continue...")
-
- if device == None:
- print("Please connect your device and try again!")
- input("Press Enter to continue...")
-
- print(f"Connected to {device.name}\niOS {device.version}\n")
-
- if not passed_check and Path.exists(gestalt_path) and Path.is_file(gestalt_path):
- passed_check = True
-
- if passed_check:
- count = 0
- for key in tweaks:
- count += 1
- # do not show if the tweak is not compatible
- if tweaks[key].is_compatible(device.version):
- print_option(count, tweaks[key].enabled, tweaks[key].label)
- if tweaks[key].divider_below:
- print()
-
- # apply will still be the number of tweaks just to keep consistency
- print(f"\n{get_apply_number(num_tweaks + 1)}. Apply")
- print(f"{get_apply_number(num_tweaks + 1) + 1}. Remove All Tweaks")
- print(f"{get_apply_number(num_tweaks + 1) + 2}. Reset Mobile Gestalt")
- print("0. Exit\n")
- page = int(input("Enter a number: "))
- if page == get_apply_number(num_tweaks + 1) or page == get_apply_number(num_tweaks + 1) + 1:
- # either apply or reset tweaks
- print()
- resetting = page == (get_apply_number(num_tweaks + 1) + 1)
- # set the tweaks and apply
- # first open the file in read mode
- with open(gestalt_path, 'rb') as in_fp:
- gestalt_plist = plistlib.load(in_fp)
- # create the other plists
- flag_plist: dict = {}
- eligibility_files = None
- ai_file = None
- basic_plists: dict = {}
-
- # verify the device credentials before continuing
- if gestalt_plist["CacheExtra"]["qNNddlUK+B/YlooNoymwgA"] != device.version or gestalt_plist["CacheExtra"]["0+nc/Udy4WNG8S+Q7a/s1A"] != device.model:
- print("com.apple.mobilegestalt.plist does not match the device!")
- print("Please make sure you are using the correct file!")
- print("If you believe this is a mistake, you can override this check.")
- override = input("Do you want to overrride? (y/n) ")
- if override.lower() != 'y':
- continue # break applying and return to the main page
-
- # set the plist keys
- if not resetting:
- for tweak in tweaks.values:
- if isinstance(tweak, FeatureFlagTweak):
- flag_plist = tweak.apply_tweak(flag_plist)
- elif isinstance(tweak, EligibilityTweak):
- tweak.set_region_code(device.locale[-2:])
- eligibility_files = tweak.apply_tweak()
- elif isinstance(tweak, AITweak):
- ai_file = tweak.apply_tweak()
- elif isinstance(tweak, BasicPlistTweak) or isinstance(tweak, RdarFixTweak):
- basic_plists = tweak.apply_tweak(basic_plists)
- else:
- gestalt_plist = tweak.apply_tweak(gestalt_plist)
-
- # create the restore file list
- files_to_restore = [
- FileToRestore(
- contents=plistlib.dumps(gestalt_plist),
- restore_path="/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist",
- ),
- FileToRestore(
- contents=plistlib.dumps(flag_plist),
- restore_path="/var/preferences/FeatureFlags/Global.plist",
- )
- ]
- if eligibility_files != None:
- files_to_restore += eligibility_files
- if ai_file != None:
- files_to_restore.append(ai_file)
- for location, plist in basic_plists.items():
- files_to_restore.append(FileToRestore(
- contents=plistlib.dumps(plist),
- restore_path=location.value
- ))
- # reset basic tweaks
- if resetting:
- empty_data = plistlib.dumps({})
- for location in FileLocationsList:
- files_to_restore.append(FileToRestore(
- contents=empty_data,
- restore_path=location.value
- ))
- # restore to the device
- try:
- restore_files(files=files_to_restore, reboot=True, lockdown_client=device.ld)
- except Exception as e:
- print(traceback.format_exc())
- finally:
- input("Press Enter to exit...")
- running = False
- elif page == get_apply_number(num_tweaks + 1) + 2:
- # reset mobilegestalt
- # restore to the device
- try:
- restore_files(files=[FileToRestore(
- contents=b"",
- restore_path="/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist",
- )], reboot=True, lockdown_client=device.ld)
- except Exception as e:
- print(traceback.format_exc())
- finally:
- input("Press Enter to exit...")
- running = False
- elif page == 0:
- # exit the panel
- print("Goodbye!")
- running = False
- else:
- tweak = list(tweaks.values())[page-1]
- if page > 0 and page <= num_tweaks and tweak.is_compatible(device.version):
- if tweak.edit_type == TweakModifyType.TEXT:
- # text input
- inp_txt = ""
- print(f"\n\n{tweak.label}")
- print("Leave blank to turn off.\n")
- if tweak.label == "Set Device Model Name":
- inp_txt = "Enter Model Name: "
- elif tweak.label == "Set Lock Screen Footnote Text":
- inp_txt = "Enter Footnote: "
- new_txt = input(inp_txt)
- if new_txt == "":
- tweak.set_enabled(False)
- else:
- tweak.set_value(new_txt)
- elif tweak.edit_type == TweakModifyType.PICKER:
- # pick between values
- print("\n\nSelect a value.")
- print("If you do not know which to try, start with the first option.")
- values = tweak.value
- for option in range(len(values)):
- print_option(
- num=option+1,
- active=(tweak.enabled and tweak.get_selected_option() == option),
- message=str(values[option])
- )
- print_option(num=len(values)+1, active=(not tweak.enabled), message="Disable")
- picker_choice = int(input("Select option: "))
- if picker_choice > 0 and picker_choice <= len(values):
- tweak.set_selected_option(picker_choice-1)
- tweaks["RdarFix"].set_di_type(values[tweak.get_selected_option()])
- elif picker_choice == len(values)+1:
- tweak.set_enabled(False)
- else:
- tweak.toggle_enabled()
- else:
- print("No MobileGestalt file found!")
- print(f"Please place the file in \'{Path.cwd()}\' with the name \'com.apple.MobileGestalt.plist\'")
- print("Remember to make a backup of the file!!\n")
- print("1. Retry")
- print("2. Enter path\n")
- choice = int(input("Enter number: "))
- if choice == 2:
- new_path = input("Enter new path to file: ")
- gestalt_path = Path(new_path)
diff --git a/devicemanagement/constants.py b/devicemanagement/constants.py
index b88a4b1..cfa57b1 100644
--- a/devicemanagement/constants.py
+++ b/devicemanagement/constants.py
@@ -11,15 +11,19 @@ def __init__(self, uuid: int, name: str, version: str, build: str, model: str, l
self.locale = locale
self.ld = ld
- def supported(self) -> bool:
+ def has_exploit(self) -> bool:
parsed_ver: Version = Version(self.version)
- if (parsed_ver < Version("17.0")) or (parsed_ver > Version("18.1")):
- return False
- if (parsed_ver == Version("18.1")
- and self.build != "22B5007p" and self.build == "22B5023e"
- and self.build == "22B5034e" and self.build == "22B5045g"):
+ # make sure versions past 17.7.1 but before 18.0 aren't supported
+ if (parsed_ver >= Version("17.7.1") and parsed_ver < Version("18.0")):
return False
- return True
+ if (parsed_ver < Version("18.1")
+ or self.build == "22B5007p" or self.build == "22B5023e"
+ or self.build == "22B5034e" or self.build == "22B5045g"):
+ return True
+ return False
+
+ def supported(self) -> bool:
+ return self.has_exploit()
class Version:
def __init__(self, major: int, minor: int = 0, patch: int = 0):
diff --git a/devicemanagement/device_manager.py b/devicemanagement/device_manager.py
index 1f40bfd..3928e52 100644
--- a/devicemanagement/device_manager.py
+++ b/devicemanagement/device_manager.py
@@ -3,6 +3,7 @@
from pathlib import Path
from PySide6.QtWidgets import QMessageBox
+from PySide6.QtCore import QSettings
from pymobiledevice3 import usbmux
from pymobiledevice3.lockdown import create_using_usbmux
@@ -11,6 +12,7 @@
from devicemanagement.data_singleton import DataSingleton
from tweaks.tweaks import tweaks, FeatureFlagTweak, EligibilityTweak, AITweak, BasicPlistTweak, RdarFixTweak
+from tweaks.custom_gestalt_tweaks import CustomGestaltTweaks
from tweaks.basic_plist_locations import FileLocationsList
from Sparserestore.restore import restore_files, FileToRestore
@@ -28,31 +30,56 @@ def __init__(self):
self.devices: list[Device] = []
self.data_singleton = DataSingleton()
self.current_device_index = 0
+
+ # preferences
self.apply_over_wifi = True
+ self.skip_setup = True
+ self.auto_reboot = True
- def get_devices(self):
+ def get_devices(self, settings: QSettings):
self.devices.clear()
- connected_devices = usbmux.list_devices()
+ # handle errors when failing to get connected devices
+ try:
+ connected_devices = usbmux.list_devices()
+ except:
+ show_error_msg(
+ """
+ Failed to get device list. Click \"Show Details\" for the traceback.
+
+ If you are on Windows, make sure you have the \"Apple Devices\" app from the Microsoft Store or iTunes from Apple's website.
+ If you are on Linux, make sure you have usbmuxd and libimobiledevice installed.
+ """
+ )
# Connect via usbmuxd
for device in connected_devices:
if self.apply_over_wifi or device.is_usb:
try:
ld = create_using_usbmux(serial=device.serial)
vals = ld.all_values
+ model = vals['ProductType']
+ try:
+ product_type = settings.value(device.serial + "_model", "", type=str)
+ if product_type == "":
+ # save the new product type
+ settings.setValue(device.serial + "_model", model)
+ else:
+ model = product_type
+ except:
+ pass
dev = Device(
uuid=device.serial,
name=vals['DeviceName'],
version=vals['ProductVersion'],
build=vals['BuildVersion'],
- model=vals['ProductType'],
+ model=model,
locale=ld.locale,
ld=ld
)
- tweaks["RdarFix"].get_rdar_mode(vals['ProductType'])
+ tweaks["RdarFix"].get_rdar_mode(model)
self.devices.append(dev)
except Exception as e:
print(f"ERROR with lockdown device with UUID {device.serial}")
- show_error_msg(type(e).__name__)
+ show_error_msg(type(e).__name__ + ": " + repr(e))
if len(connected_devices) > 0:
self.set_current_device(index=0)
@@ -66,6 +93,7 @@ def set_current_device(self, index: int = None):
self.data_singleton.device_available = False
self.data_singleton.gestalt_path = None
self.current_device_index = 0
+ tweaks["SpoofModel"].value[0] = "Placeholder"
else:
self.data_singleton.current_device = self.devices[index]
if Version(self.devices[index].version) < Version("17.0"):
@@ -73,6 +101,7 @@ def set_current_device(self, index: int = None):
self.data_singleton.gestalt_path = None
else:
self.data_singleton.device_available = True
+ tweaks["SpoofModel"].value[0] = self.data_singleton.current_device.model
self.current_device_index = index
def get_current_device_name(self) -> str:
@@ -87,6 +116,12 @@ def get_current_device_version(self) -> str:
else:
return self.data_singleton.current_device.version
+ def get_current_device_build(self) -> str:
+ if self.data_singleton.current_device == None:
+ return ""
+ else:
+ return self.data_singleton.current_device.build
+
def get_current_device_uuid(self) -> str:
if self.data_singleton.current_device == None:
return ""
@@ -98,7 +133,72 @@ def get_current_device_supported(self) -> bool:
return False
else:
return self.data_singleton.current_device.supported()
+
+
+ def reset_device_pairing(self):
+ # first, unpair it
+ if self.data_singleton.current_device == None:
+ return
+ self.data_singleton.current_device.ld.unpair()
+ # next, pair it again
+ self.data_singleton.current_device.ld.pair()
+ QMessageBox.information(None, "Pairing Reset", "Your device's pairing was successfully reset. Refresh the device list before applying.")
+
+
+ def add_skip_setup(self, files_to_restore: list[FileToRestore]):
+ if self.skip_setup and not self.get_current_device_supported():
+ # add the 2 skip setup files
+ cloud_config_plist: dict = {
+ "SkipSetup": ["WiFi", "Location", "Restore", "SIMSetup", "Android", "AppleID", "IntendedUser", "TOS", "Siri", "ScreenTime", "Diagnostics", "SoftwareUpdate", "Passcode", "Biometric", "Payment", "Zoom", "DisplayTone", "MessagingActivationUsingPhoneNumber", "HomeButtonSensitivity", "CloudStorage", "ScreenSaver", "TapToSetup", "Keyboard", "PreferredLanguage", "SpokenLanguage", "WatchMigration", "OnBoarding", "TVProviderSignIn", "TVHomeScreenSync", "Privacy", "TVRoom", "iMessageAndFaceTime", "AppStore", "Safety", "Multitasking", "ActionButton", "TermsOfAddress", "AccessibilityAppearance", "Welcome", "Appearance", "RestoreCompleted", "UpdateCompleted"],
+ "CloudConfigurationUIComplete": True,
+ "IsSupervised": False
+ }
+ files_to_restore.append(FileToRestore(
+ contents=plistlib.dumps(cloud_config_plist),
+ restore_path="systemgroup.com.apple.configurationprofiles/Library/ConfigurationProfiles/CloudConfigurationDetails.plist",
+ domain="SysSharedContainerDomain-."
+ ))
+ purplebuddy_plist: dict = {
+ "SetupDone": True,
+ "SetupFinishedAllSteps": True,
+ "UserChoseLanguage": True
+ }
+ files_to_restore.append(FileToRestore(
+ contents=plistlib.dumps(purplebuddy_plist),
+ restore_path="mobile/com.apple.purplebuddy.plist",
+ domain="ManagedPreferencesDomain"
+ ))
+ def get_domain_for_path(self, path: str) -> str:
+ mappings: dict = {
+ "/var/Managed Preferences/": "ManagedPreferencesDomain",
+ "/var/root/": "RootDomain",
+ "/var/preferences/": "SystemPreferencesDomain",
+ "/var/MobileDevice/": "MobileDeviceDomain",
+ "/var/mobile/": "HomeDomain",
+ "/var/db/": "DatabaseDomain",
+ "/var/containers/Shared/SystemGroup/": "SysSharedContainerDomain-.",
+ "/var/containers/Data/SystemGroup/": "SysContainerDomain-."
+ }
+ for mapping in mappings.keys():
+ if path.startswith(mapping):
+ new_path = path.replace(mapping, "")
+ return mappings[mapping], new_path
+ return None, path
+
+ def concat_file(self, contents: str, path: str, files_to_restore: list[FileToRestore]):
+ if self.get_current_device_supported():
+ files_to_restore.append(FileToRestore(
+ contents=contents,
+ restore_path=path
+ ))
+ else:
+ domain, file_path = self.get_domain_for_path(path)
+ files_to_restore.append(FileToRestore(
+ contents=contents,
+ restore_path=file_path,
+ domain=domain
+ ))
## APPLYING OR REMOVING TWEAKS AND RESTORING
def apply_changes(self, resetting: bool = False, update_label=lambda x: None):
@@ -130,6 +230,9 @@ def apply_changes(self, resetting: bool = False, update_label=lambda x: None):
else:
if gestalt_plist != None:
gestalt_plist = tweak.apply_tweak(gestalt_plist)
+ # set the custom gestalt keys
+ if gestalt_plist != None:
+ gestalt_plist = CustomGestaltTweaks.apply_tweaks(gestalt_plist)
gestalt_data = None
if resetting:
@@ -140,40 +243,63 @@ def apply_changes(self, resetting: bool = False, update_label=lambda x: None):
# Generate backup
update_label("Generating backup...")
# create the restore file list
- files_to_restore = [
- FileToRestore(
- contents=plistlib.dumps(flag_plist),
- restore_path="/var/preferences/FeatureFlags/Global.plist",
- )
+ files_to_restore: dict[FileToRestore] = [
]
+ self.concat_file(
+ contents=plistlib.dumps(flag_plist),
+ path="/var/preferences/FeatureFlags/Global.plist",
+ files_to_restore=files_to_restore
+ )
+ self.add_skip_setup(files_to_restore)
if gestalt_data != None:
- files_to_restore.append(FileToRestore(
+ self.concat_file(
contents=gestalt_data,
- restore_path="/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist",
- ))
+ path="/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist",
+ files_to_restore=files_to_restore
+ )
if eligibility_files:
- files_to_restore += eligibility_files
+ new_eligibility_files: dict[FileToRestore] = []
+ if not self.get_current_device_supported():
+ # update the files
+ for file in eligibility_files:
+ self.concat_file(
+ contents=file.contents,
+ path=file.restore_path,
+ files_to_restore=new_eligibility_files
+ )
+ else:
+ new_eligibility_files = eligibility_files
+ files_to_restore += new_eligibility_files
if ai_file != None:
- files_to_restore.append(ai_file)
+ self.concat_file(
+ contents=ai_file.contents,
+ path=ai_file.restore_path,
+ files_to_restore=files_to_restore
+ )
for location, plist in basic_plists.items():
- files_to_restore.append(FileToRestore(
+ self.concat_file(
contents=plistlib.dumps(plist),
- restore_path=location.value
- ))
+ path=location.value,
+ files_to_restore=files_to_restore
+ )
# reset basic tweaks
if resetting:
empty_data = plistlib.dumps({})
for location in FileLocationsList:
- files_to_restore.append(FileToRestore(
+ self.concat_file(
contents=empty_data,
- restore_path=location.value
- ))
+ path=location.value,
+ files_to_restore=files_to_restore
+ )
# restore to the device
update_label("Restoring to device...")
try:
- restore_files(files=files_to_restore, reboot=True, lockdown_client=self.data_singleton.current_device.ld)
- QMessageBox.information(None, "Success!", "All done! Your device will now restart.")
+ restore_files(files=files_to_restore, reboot=self.auto_reboot, lockdown_client=self.data_singleton.current_device.ld)
+ msg = "Your device will now restart."
+ if not self.auto_reboot:
+ msg = "Please restart your device to see changes."
+ QMessageBox.information(None, "Success!", "All done! " + msg)
update_label("Success!")
except Exception as e:
if "Find My" in str(e):
@@ -186,18 +312,25 @@ def apply_changes(self, resetting: bool = False, update_label=lambda x: None):
else:
print(traceback.format_exc())
update_label("Failed to restore")
- show_error_msg(type(e).__name__)
+ show_error_msg(type(e).__name__ + ": " + repr(e))
## RESETTING MOBILE GESTALT
- def reset_mobilegestalt(self, update_label=lambda x: None):
+ def reset_mobilegestalt(self, settings: QSettings, update_label=lambda x: None):
# restore to the device
update_label("Restoring to device...")
try:
+ # remove the saved device model
+ settings.setValue(self.data_singleton.current_device.uuid + "_model", "")
+ domain, file_path = self.get_domain_for_path("/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist")
restore_files(files=[FileToRestore(
contents=b"",
- restore_path="/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist",
- )], reboot=True, lockdown_client=self.data_singleton.current_device.ld)
- QMessageBox.information(None, "Success!", "All done! Your device will now restart.")
+ restore_path=file_path,
+ domain=domain
+ )], reboot=self.auto_reboot, lockdown_client=self.data_singleton.current_device.ld)
+ msg = "Your device will now restart."
+ if not self.auto_reboot:
+ msg = "Please restart your device to see changes."
+ QMessageBox.information(None, "Success!", "All done! " + msg)
update_label("Success!")
except Exception as e:
if "Find My" in str(e):
@@ -210,4 +343,4 @@ def reset_mobilegestalt(self, update_label=lambda x: None):
else:
print(traceback.format_exc())
update_label("Failed to restore")
- show_error_msg(type(e).__name__)
+ show_error_msg(type(e).__name__ + ": " + repr(e))
diff --git a/fix-minimuxer.py b/fix-minimuxer.py
deleted file mode 100644
index bd57adc..0000000
--- a/fix-minimuxer.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from Sparserestore import backup, perform_restore
-from pymobiledevice3 import usbmux
-from pymobiledevice3.lockdown import create_using_usbmux
-from pymobiledevice3.lockdown import LockdownClient
-
-lockdown = None
-while lockdown == None:
- connected_devices = usbmux.list_devices()
- # Connect via usbmuxd
- for current_device in connected_devices:
- if current_device.is_usb:
- lockdown = create_using_usbmux(serial=current_device.serial)
-
- if lockdown == None:
- print("Please connect your device and try again!")
- input("Press Enter to continue...")
-
-restore_path = "/var/Managed Preferences/mobile/"
-restore_name = "com.apple.purplebuddy.plist"
-back = backup.Backup(files=[
- backup.Directory(
- "",
- f"SysContainerDomain-../../../../../../../../var/backup{restore_path}",
- owner=501,
- group=501
- ),
- backup.ConcreteFile(
- "",
- f"SysContainerDomain-../../../../../../../../var/backup{restore_path}{restore_name}",
- owner=501,
- group=501,
- contents=b""
- ),
- backup.ConcreteFile("", "SysContainerDomain-../../../../../../../.." + "/crash_on_purpose", contents=b""),
- ])
-
-perform_restore(backup=back, reboot=True, lockdown_client=lockdown)
diff --git a/gui/main_window.py b/gui/main_window.py
index 89572ac..6d05585 100644
--- a/gui/main_window.py
+++ b/gui/main_window.py
@@ -1,4 +1,4 @@
-from PySide6 import QtCore, QtWidgets
+from PySide6 import QtCore, QtWidgets, QtGui
from enum import Enum
import webbrowser
import plistlib
@@ -13,6 +13,7 @@
from gui.gestalt_dialog import GestaltDialog
from tweaks.tweaks import tweaks
+from tweaks.custom_gestalt_tweaks import CustomGestaltTweaks, ValueTypeStrings
class Page(Enum):
Home = 0
@@ -76,7 +77,7 @@ def __init__(self, device_manager: DeviceManager):
self.ui.enableAIChk.toggled.connect(self.on_enableAIChk_toggled)
self.ui.languageTxt.textEdited.connect(self.on_languageTxt_textEdited)
- self.ui.spoofModelChk.toggled.connect(self.on_spoofModelChk_toggled)
+ self.ui.spoofedModelDrp.activated.connect(self.on_spoofedModelDrp_activated)
## FEATURE FLAGS PAGE
self.ui.clockAnimChk.toggled.connect(self.on_clockAnimChk_toggled)
@@ -115,6 +116,13 @@ def __init__(self, device_manager: DeviceManager):
self.ui.chooseGestaltBtn.clicked.connect(self.on_chooseGestaltBtn_clicked)
self.ui.resetGestaltBtn.clicked.connect(self.on_resetGestaltBtn_clicked)
+ ## SETTINGS PAGE ACTIONS
+ self.ui.allowWifiApplyingChk.toggled.connect(self.on_allowWifiApplyingChk_toggled)
+ self.ui.skipSetupChk.toggled.connect(self.on_skipSetupChk_toggled)
+ self.ui.autoRebootChk.toggled.connect(self.on_autoRebootChk_toggled)
+
+ self.ui.resetPairBtn.clicked.connect(self.on_resetPairBtn_clicked)
+
## MOBILE GESTALT PAGE ACTIONS
self.ui.dynamicIslandDrp.activated.connect(self.on_dynamicIslandDrp_activated)
self.ui.rdarFixChk.clicked.connect(self.on_rdarFixChk_clicked)
@@ -138,7 +146,8 @@ def __init__(self, device_manager: DeviceManager):
self.ui.internalStorageChk.clicked.connect(self.on_internalStorageChk_clicked)
self.ui.collisionSOSChk.clicked.connect(self.on_collisionSOSChk_clicked)
self.ui.aodChk.clicked.connect(self.on_aodChk_clicked)
- self.ui.sleepApneaChk.clicked.connect(self.on_sleepApneaChk_clicked)
+
+ self.ui.addGestaltKeyBtn.clicked.connect(self.on_addGestaltKeyBtn_clicked)
## GENERAL INTERFACE FUNCTIONS
@@ -151,7 +160,7 @@ def updateInterfaceForNewDevice(self):
@QtCore.Slot()
def refresh_devices(self):
# get the devices
- self.device_manager.get_devices()
+ self.device_manager.get_devices(self.settings)
# clear the picker
self.ui.devicePicker.clear()
self.ui.restoreProgressBar.hide()
@@ -174,6 +183,8 @@ def refresh_devices(self):
self.ui.sidebarDiv2.hide()
self.ui.applyPageBtn.hide()
+
+ self.ui.resetPairBtn.hide()
else:
self.ui.devicePicker.setEnabled(True)
# populate the ComboBox with device names
@@ -185,8 +196,6 @@ def refresh_devices(self):
self.ui.locSimPageBtn.hide()
self.ui.sidebarDiv1.show()
self.ui.gestaltPageBtn.show()
- # self.ui.featureFlagsPageBtn.show()
- self.ui.euEnablerPageBtn.show()
self.ui.springboardOptionsPageBtn.show()
self.ui.internalOptionsPageBtn.show()
@@ -198,19 +207,27 @@ def refresh_devices(self):
self.ui.euEnablerPageContent.setDisabled(False)
self.ui.springboardOptionsPageContent.setDisabled(False)
self.ui.internalOptionsPageContent.setDisabled(False)
+
+ self.ui.resetPairBtn.show()
# update the selected device
self.ui.devicePicker.setCurrentIndex(0)
self.change_selected_device(0)
- # update the interface
- self.updateInterfaceForNewDevice()
-
def change_selected_device(self, index):
if len(self.device_manager.devices) > 0:
self.device_manager.set_current_device(index=index)
# hide options that are for newer versions
# remove the new dynamic island options
+ MinTweakVersions = {
+ "exploit": [("18.0", self.ui.featureFlagsPageBtn)],
+ "18.1": [self.ui.enableAIChk, self.ui.aiEnablerContent],
+ "18.0": [self.ui.aodChk, self.ui.iphone16SettingsChk]
+ }
+ MaxTweakVersions = {
+ "17.7": [self.ui.euEnablerContent]
+ }
+
try:
self.ui.dynamicIslandDrp.removeItem(6)
self.ui.dynamicIslandDrp.removeItem(5)
@@ -222,42 +239,62 @@ def change_selected_device(self, index):
else:
self.ui.rdarFixChk.show()
self.ui.rdarFixChk.setText(f"{rdar_title} (modifies resolution)")
- if Version(self.device_manager.data_singleton.current_device.version) >= Version("18.1"):
- self.ui.enableAIChk.show()
- self.ui.languageLbl.hide()
- self.ui.languageTxt.hide()
- self.ui.aiInfoLabel.hide()
- self.ui.spoofModelChk.hide()
- else:
- self.ui.enableAIChk.hide()
- self.ui.languageLbl.hide()
- self.ui.languageTxt.hide()
- self.ui.aiInfoLabel.hide()
- self.ui.spoofModelChk.hide()
- if Version(self.device_manager.data_singleton.current_device.version) >= Version("18.0"):
- self.ui.aodChk.show()
- self.ui.iphone16SettingsChk.show()
- self.ui.sleepApneaChk.show()
- self.ui.featureFlagsPageBtn.show()
+ device_ver = Version(self.device_manager.data_singleton.current_device.version)
+ # toggle option visibility for the minimum versions
+ for version in MinTweakVersions.keys():
+ if version == "exploit":
+ # disable if the exploit is not available
+ for pair in MinTweakVersions[version]:
+ if self.device_manager.data_singleton.current_device.has_exploit() and device_ver >= Version(pair[0]):
+ pair[1].show()
+ else:
+ pair[1].hide()
+ else:
+ # show views if the version is higher
+ parsed_ver = Version(version)
+ for view in MinTweakVersions[version]:
+ if device_ver >= parsed_ver:
+ view.show()
+ else:
+ view.hide()
+ # toggle option visibility for the max versions
+ for version in MaxTweakVersions.keys():
+ parsed_ver = Version(version)
+ for view in MaxTweakVersions[version]:
+ if device_ver <= parsed_ver:
+ view.show()
+ else:
+ view.hide()
+ if device_ver >= Version("18.0"):
# show the other dynamic island options
self.ui.dynamicIslandDrp.addItem("2622 (iPhone 16 Pro Dynamic Island)")
self.ui.dynamicIslandDrp.addItem("2868 (iPhone 16 Pro Max Dynamic Island)")
+ # eligibility page button
+ if device_ver >= Version("17.4") and (device_ver <= Version("17.7") or device_ver >= Version("18.1")):
+ self.ui.euEnablerPageBtn.show()
else:
- self.ui.aodChk.hide()
- self.ui.iphone16SettingsChk.hide()
- self.ui.sleepApneaChk.hide()
- self.ui.featureFlagsPageBtn.hide()
+ self.ui.euEnablerPageBtn.hide()
else:
self.device_manager.set_current_device(index=None)
- self.ui.featureFlagsPageBtn.hide()
+
+ # update the interface
+ self.updateInterfaceForNewDevice()
def loadSettings(self):
self.settings = QtCore.QSettings()
try:
# load the settings
apply_over_wifi = self.settings.value("apply_over_wifi", True, type=bool)
+ skip_setup = self.settings.value("skip_setup", True, type=bool)
+ auto_reboot = self.settings.value("auto_reboot", True, type=bool)
+
self.ui.allowWifiApplyingChk.setChecked(apply_over_wifi)
+ self.ui.skipSetupChk.setChecked(skip_setup)
+ self.ui.autoRebootChk.setChecked(auto_reboot)
+
self.device_manager.apply_over_wifi = apply_over_wifi
+ self.device_manager.skip_setup = skip_setup
+ self.device_manager.auto_reboot = auto_reboot
except:
pass
@@ -300,9 +337,10 @@ def updatePhoneInfo(self):
self.ui.phoneNameLbl.setText(self.device_manager.get_current_device_name())
# version label
ver = self.device_manager.get_current_device_version()
+ build = self.device_manager.get_current_device_build()
self.show_uuid = False
if ver != "":
- self.show_version_text(version=ver)
+ self.show_version_text(version=ver, build=build)
else:
self.ui.phoneVersionLbl.setText("Please connect a device.")
@@ -310,19 +348,23 @@ def toggle_version_label(self):
if self.show_uuid:
self.show_uuid = False
ver = self.device_manager.get_current_device_version()
+ build = self.device_manager.get_current_device_build()
if ver != "":
- self.show_version_text(version=ver)
+ self.show_version_text(version=ver, build=build)
else:
self.show_uuid = True
uuid = self.device_manager.get_current_device_uuid()
if uuid != "":
self.ui.phoneVersionLbl.setText(f"{uuid}")
- def show_version_text(self, version: str):
+ def show_version_text(self, version: str, build: str):
support_str: str = "Supported!"
- if not self.device_manager.get_current_device_supported():
+ if Version(version) < Version("17.0"):
support_str = "Not Supported."
- self.ui.phoneVersionLbl.setText(f"iOS {version} {support_str}")
+ elif not self.device_manager.get_current_device_supported():
+ # sparserestore partially patched
+ support_str = "Supported, YMMV."
+ self.ui.phoneVersionLbl.setText(f"iOS {version} ({build}) {support_str}")
## HOME PAGE LINKS
def on_bigMilkBtn_clicked(self):
@@ -406,8 +448,66 @@ def on_collisionSOSChk_clicked(self, checked: bool):
tweaks["CollisionSOS"].set_enabled(checked)
def on_aodChk_clicked(self, checked: bool):
tweaks["AOD"].set_enabled(checked)
- def on_sleepApneaChk_clicked(self, checked: bool):
- tweaks["SleepApnea"].set_enabled(checked)
+
+ def update_custom_gestalt_value_type(self, id, idx, valueField: QtWidgets.QLineEdit):
+ new_str = CustomGestaltTweaks.set_tweak_value_type(id, idx)
+ # update the value
+ valueField.setText(new_str)
+
+ def delete_custom_gestalt_key(self, id: int, widget: QtWidgets.QWidget):
+ CustomGestaltTweaks.deactivate_tweak(id)
+ self.ui.customKeysLayout.removeWidget(widget)
+ widget.setParent(None)
+
+ def on_addGestaltKeyBtn_clicked(self):
+ # create a blank gestalt value with default value of 1
+ key_identifier = CustomGestaltTweaks.create_tweak()
+
+ widget = QtWidgets.QWidget()
+ widget.setFixedHeight(35)
+ widget.setStyleSheet("QWidget { background: none; border: 1px solid #3b3b3b; border-radius: 8px; }")
+ hlayout = QtWidgets.QHBoxLayout(widget)
+ hlayout.setContentsMargins(9, 2, 9, 2)
+
+ # create the key field
+ keyField = QtWidgets.QLineEdit(widget)
+ # keyField.setMaximumWidth(200)
+ keyField.setPlaceholderText("Key")
+ keyField.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeft)
+ keyField.setTextMargins(5, 0, 5, 0)
+ keyField.textEdited.connect(lambda txt, id=key_identifier: CustomGestaltTweaks.set_tweak_key(id, txt))
+ hlayout.addWidget(keyField)
+
+ # create the delete button
+ delBtn = QtWidgets.QToolButton(widget)
+ delBtn.setIcon(QtGui.QIcon(":/icon/trash.svg"))
+ delBtn.setStyleSheet("QToolButton { margin-right: 8px; background: none; border: none; }\nQToolButton:pressed { background: none; color: #FFFFFF; }")
+ delBtn.clicked.connect(lambda _, id=key_identifier, w=widget: self.delete_custom_gestalt_key(id, w))
+ hlayout.addWidget(delBtn)
+
+ # create the type dropdown
+ valueTypeDrp = QtWidgets.QComboBox(widget)
+ valueTypeDrp.setStyleSheet("QComboBox {\n background-color: #3b3b3b;\n border: none;\n color: #e8e8e8;\n font-size: 14px;\n padding-left: 8px;\n border-radius: 8px;\n}\n\nQComboBox::drop-down {\n image: url(:/icon/caret-down-fill.svg);\n icon-size: 16px;\n subcontrol-position: right center;\n margin-right: 8px;\n}\n\nQComboBox QAbstractItemView {\n background-color: #3b3b3b;\n outline: none;\n margin-top: 1px;\n}\n\nQComboBox QAbstractItemView::item {\n background-color: #3b3b3b;\n color: #e8e8e8;\n padding-left: 8px;\n}\n\nQComboBox QAbstractItemView::item:hover {\n background-color: #535353;\n color: #ffffff;\n}")
+ valueTypeDrp.setFixedWidth(120)
+ valueTypeDrp.addItems(ValueTypeStrings)
+ valueTypeDrp.setCurrentIndex(0)
+
+ # create the value edit field
+ valueField = QtWidgets.QLineEdit(widget)
+ valueField.setMaximumWidth(175)
+ valueField.setPlaceholderText("Value")
+ valueField.setText("1")
+ valueField.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
+ valueField.setTextMargins(5, 0, 5, 0)
+ valueField.textEdited.connect(lambda txt, id=key_identifier: CustomGestaltTweaks.set_tweak_value(id, txt))
+
+ valueTypeDrp.activated.connect(lambda idx, id=key_identifier, vf=valueField: self.update_custom_gestalt_value_type(id, idx, vf))
+ hlayout.addWidget(valueTypeDrp)
+ hlayout.addWidget(valueField)
+
+ # add it to the main widget
+ widget.setDisabled(False)
+ self.ui.customKeysLayout.addWidget(widget)
## FEATURE FLAGS PAGE
@@ -435,19 +535,13 @@ def on_enableAIChk_toggled(self, checked: bool):
tweaks["AIGestalt"].set_enabled(checked)
# change the visibility of stuff
if checked:
- self.ui.languageLbl.show()
- self.ui.languageTxt.show()
- self.ui.aiInfoLabel.show()
- self.ui.spoofModelChk.show()
+ self.ui.aiEnablerContent.show()
else:
- self.ui.languageLbl.hide()
- self.ui.languageTxt.hide()
- self.ui.aiInfoLabel.hide()
- self.ui.spoofModelChk.hide()
+ self.ui.aiEnablerContent.hide()
def on_languageTxt_textEdited(self, text: str):
tweaks["AIEligibility"].set_language_code(text)
- def on_spoofModelChk_toggled(self, checked: bool):
- tweaks["SpoofModel"].set_enabled(checked)
+ def on_spoofedModelDrp_activated(self, index: int):
+ tweaks["SpoofModel"].set_selected_option(index)
## SPRINGBOARD OPTIONS PAGE
@@ -506,6 +600,18 @@ def on_allowWifiApplyingChk_toggled(self, checked: bool):
self.device_manager.apply_over_wifi = checked
# save the setting
self.settings.setValue("apply_over_wifi", checked)
+ def on_skipSetupChk_toggled(self, checked: bool):
+ self.device_manager.skip_setup = checked
+ # save the setting
+ self.settings.setValue("skip_setup", checked)
+ def on_autoRebootChk_toggled(self, checked: bool):
+ self.device_manager.auto_reboot = checked
+ # save the setting
+ self.settings.setValue("auto_reboot", checked)
+
+ # Device Options
+ def on_resetPairBtn_clicked(self):
+ self.device_manager.reset_device_pairing()
## APPLY PAGE
@@ -548,7 +654,7 @@ def on_removeTweaksBtn_clicked(self):
# TODO: Add safety here
self.device_manager.apply_changes(resetting=True, update_label=self.update_label)
def on_resetGestaltBtn_clicked(self):
- self.device_manager.reset_mobilegestalt(update_label=self.update_label)
+ self.device_manager.reset_mobilegestalt(self.settings, update_label=self.update_label)
@QtCore.Slot()
def on_applyTweaksBtn_clicked(self):
diff --git a/main_app.py b/main_app.py
index 0acd001..cd61c03 100644
--- a/main_app.py
+++ b/main_app.py
@@ -7,7 +7,6 @@
if __name__ == "__main__":
app = QtWidgets.QApplication([])
dm = DeviceManager()
- dm.get_devices()
widget = MainWindow(device_manager=dm)
widget.resize(800, 600)
diff --git a/mainwindow_ui.py b/mainwindow_ui.py
new file mode 100644
index 0000000..ebdfe69
--- /dev/null
+++ b/mainwindow_ui.py
@@ -0,0 +1,2822 @@
+# -*- coding: utf-8 -*-
+
+################################################################################
+## Form generated from reading UI file 'mainwindow.ui'
+##
+## Created by: Qt User Interface Compiler version 6.6.3
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
+
+from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
+ QMetaObject, QObject, QPoint, QRect,
+ QSize, QTime, QUrl, Qt)
+from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
+ QFont, QFontDatabase, QGradient, QIcon,
+ QImage, QKeySequence, QLinearGradient, QPainter,
+ QPalette, QPixmap, QRadialGradient, QTransform)
+from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QFrame,
+ QHBoxLayout, QLabel, QLineEdit, QMainWindow,
+ QProgressBar, QScrollArea, QSizePolicy, QSpacerItem,
+ QStackedWidget, QToolButton, QVBoxLayout, QWidget)
+import resources_rc
+
+class Ui_Nugget(object):
+ def setupUi(self, Nugget):
+ if not Nugget.objectName():
+ Nugget.setObjectName(u"Nugget")
+ Nugget.resize(1000, 600)
+ sizePolicy = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(Nugget.sizePolicy().hasHeightForWidth())
+ Nugget.setSizePolicy(sizePolicy)
+ Nugget.setMinimumSize(QSize(1000, 600))
+ Nugget.setMaximumSize(QSize(1000, 600))
+ Nugget.setWindowOpacity(1.000000000000000)
+ Nugget.setStyleSheet(u"QWidget {\n"
+" color: #FFFFFF;\n"
+" background-color: transparent;\n"
+" spacing: 0px;\n"
+"}\n"
+"\n"
+"QWidget:focus {\n"
+" outline: none;\n"
+"}\n"
+"\n"
+"QWidget [cls=central] {\n"
+" background-color: #1e1e1e;\n"
+" border-radius: 0px;\n"
+" border: 1px solid #4B4B4B;\n"
+"}\n"
+"\n"
+"QLabel {\n"
+" font-size: 14px;\n"
+"}\n"
+"\n"
+"QToolButton {\n"
+" background-color: #3b3b3b;\n"
+" border: none;\n"
+" color: #e8e8e8;\n"
+" font-size: 14px;\n"
+" min-height: 35px;\n"
+" icon-size: 16px;\n"
+" padding-left: 10px;\n"
+" padding-right: 10px;\n"
+" border-radius: 8px;\n"
+"}\n"
+"\n"
+"QToolButton[cls=sidebarBtn] {\n"
+" background-color: transparent;\n"
+" icon-size: 24px;\n"
+"}\n"
+"\n"
+"QToolButton:pressed {\n"
+" background-color: #535353;\n"
+" color: #FFFFFF;\n"
+"}\n"
+"\n"
+"QToolButton:checked {\n"
+" background-color: #2860ca;\n"
+" color: #FFFFFF;\n"
+"}\n"
+"\n"
+"QCheckBox {\n"
+" spacing: 8px;\n"
+" font-size: 14px;\n"
+"}\n"
+"\n"
+"QRadioButton {\n"
+" spacing: 8px;\n"
+" font-size: 14px;\n"
+"}\n"
+""
+ "\n"
+"QLineEdit {\n"
+" border: none;\n"
+" background-color: transparent;\n"
+" color: #FFFFFF;\n"
+" font-size: 14px;\n"
+"}\n"
+"\n"
+"QScrollBar:vertical {\n"
+" background: transparent;\n"
+" width: 8px;\n"
+"}\n"
+"\n"
+"QScrollBar:horizontal {\n"
+" background: transparent;\n"
+" height: 8px;\n"
+"}\n"
+"\n"
+"QScrollBar::handle {\n"
+" background: #3b3b3b;\n"
+" border-radius: 4px;\n"
+"}\n"
+"\n"
+"QScrollBar::handle:pressed {\n"
+" background: #535353;\n"
+"}\n"
+"\n"
+"QScrollBar::add-line,\n"
+"QScrollBar::sub-line {\n"
+" background: none;\n"
+"}\n"
+"\n"
+"QScrollBar::add-page,\n"
+"QScrollBar::sub-page {\n"
+" background: none;\n"
+"}\n"
+"\n"
+"QSlider::groove:horizontal {\n"
+" background-color: #3b3b3b;\n"
+" height: 4px;\n"
+" border-radius: 2px;\n"
+"}\n"
+"\n"
+"QSlider::handle:horizontal {\n"
+" background-color: #535353;\n"
+" width: 8px;\n"
+" margin: -8px 0;\n"
+" border-radius: 4px;\n"
+"}\n"
+"\n"
+"QSlider::handle:horizontal:pressed {\n"
+" background-color: #3b82f7;\n"
+"}\n"
+"\n"
+"QSl"
+ "ider::tick:horizontal {\n"
+" background-color: #535353;\n"
+" width: 1px;\n"
+"}\n"
+"")
+ self.centralwidget = QWidget(Nugget)
+ self.centralwidget.setObjectName(u"centralwidget")
+ self.centralwidget.setEnabled(True)
+ self.centralwidget.setContextMenuPolicy(Qt.NoContextMenu)
+ self.centralwidget.setLocale(QLocale(QLocale.English, QLocale.UnitedStates))
+ self.verticalLayout_11 = QVBoxLayout(self.centralwidget)
+ self.verticalLayout_11.setObjectName(u"verticalLayout_11")
+ self.deviceBar = QWidget(self.centralwidget)
+ self.deviceBar.setObjectName(u"deviceBar")
+ self.horizontalLayout_4 = QHBoxLayout(self.deviceBar)
+ self.horizontalLayout_4.setSpacing(1)
+ self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
+ self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
+ self.horizontalWidget_2 = QWidget(self.deviceBar)
+ self.horizontalWidget_2.setObjectName(u"horizontalWidget_2")
+ self.horizontalWidget_2.setMinimumSize(QSize(300, 0))
+ self.horizontalLayout_19 = QHBoxLayout(self.horizontalWidget_2)
+ self.horizontalLayout_19.setSpacing(1)
+ self.horizontalLayout_19.setObjectName(u"horizontalLayout_19")
+ self.horizontalLayout_19.setContentsMargins(0, 0, 0, 0)
+ self.horizontalWidget_3 = QWidget(self.horizontalWidget_2)
+ self.horizontalWidget_3.setObjectName(u"horizontalWidget_3")
+ sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred)
+ sizePolicy1.setHorizontalStretch(0)
+ sizePolicy1.setVerticalStretch(0)
+ sizePolicy1.setHeightForWidth(self.horizontalWidget_3.sizePolicy().hasHeightForWidth())
+ self.horizontalWidget_3.setSizePolicy(sizePolicy1)
+ self.horizontalLayout_15 = QHBoxLayout(self.horizontalWidget_3)
+ self.horizontalLayout_15.setSpacing(0)
+ self.horizontalLayout_15.setObjectName(u"horizontalLayout_15")
+ self.horizontalLayout_15.setContentsMargins(0, 0, 0, 0)
+ self.toolButton_6 = QToolButton(self.horizontalWidget_3)
+ self.toolButton_6.setObjectName(u"toolButton_6")
+ self.toolButton_6.setEnabled(False)
+ self.toolButton_6.setStyleSheet(u"QToolButton {\n"
+" border-top-right-radius: 0px;\n"
+" border-bottom-right-radius: 0px;\n"
+"}")
+ icon = QIcon()
+ icon.addFile(u":/icon/phone.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.toolButton_6.setIcon(icon)
+
+ self.horizontalLayout_15.addWidget(self.toolButton_6)
+
+ self.devicePicker = QComboBox(self.horizontalWidget_3)
+ self.devicePicker.setObjectName(u"devicePicker")
+ self.devicePicker.setStyleSheet(u"#devicePicker {\n"
+" background-color: #3b3b3b;\n"
+" border: none;\n"
+" color: #e8e8e8;\n"
+" font-size: 14px;\n"
+" min-height: 38px;\n"
+" min-width: 35px;\n"
+" padding-left: 8px;\n"
+"}\n"
+"\n"
+"#devicePicker::drop-down {\n"
+" image: url(:/icon/caret-down-fill.svg);\n"
+" icon-size: 16px;\n"
+" subcontrol-position: right center;\n"
+" margin-right: 8px;\n"
+"}\n"
+"\n"
+"#devicePicker QAbstractItemView {\n"
+" background-color: #3b3b3b;\n"
+" outline: none;\n"
+" margin-top: 1px;\n"
+"}\n"
+"\n"
+"#devicePicker QAbstractItemView::item {\n"
+" background-color: #3b3b3b;\n"
+" color: #e8e8e8;\n"
+" min-height: 38px;\n"
+" padding-left: 8px;\n"
+"}\n"
+"\n"
+"#devicePicker QAbstractItemView::item:hover {\n"
+" background-color: #535353;\n"
+" color: #ffffff;\n"
+"}")
+ self.devicePicker.setDuplicatesEnabled(True)
+
+ self.horizontalLayout_15.addWidget(self.devicePicker)
+
+
+ self.horizontalLayout_19.addWidget(self.horizontalWidget_3)
+
+ self.refreshBtn = QToolButton(self.horizontalWidget_2)
+ self.refreshBtn.setObjectName(u"refreshBtn")
+ self.refreshBtn.setStyleSheet(u"QToolButton {\n"
+" border-radius: 0px;\n"
+"}")
+ icon1 = QIcon()
+ icon1.addFile(u":/icon/arrow-clockwise.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.refreshBtn.setIcon(icon1)
+ self.refreshBtn.setCheckable(False)
+ self.refreshBtn.setToolButtonStyle(Qt.ToolButtonIconOnly)
+
+ self.horizontalLayout_19.addWidget(self.refreshBtn)
+
+
+ self.horizontalLayout_4.addWidget(self.horizontalWidget_2)
+
+ self.titleBar = QToolButton(self.deviceBar)
+ self.titleBar.setObjectName(u"titleBar")
+ self.titleBar.setEnabled(False)
+ sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
+ sizePolicy2.setHorizontalStretch(0)
+ sizePolicy2.setVerticalStretch(0)
+ sizePolicy2.setHeightForWidth(self.titleBar.sizePolicy().hasHeightForWidth())
+ self.titleBar.setSizePolicy(sizePolicy2)
+ self.titleBar.setStyleSheet(u"QToolButton {\n"
+" border-top-left-radius: 0px;\n"
+" border-bottom-left-radius: 0px;\n"
+"}")
+
+ self.horizontalLayout_4.addWidget(self.titleBar)
+
+
+ self.verticalLayout_11.addWidget(self.deviceBar)
+
+ self.body = QWidget(self.centralwidget)
+ self.body.setObjectName(u"body")
+ self.body.setMinimumSize(QSize(0, 20))
+ self.horizontalLayout_18 = QHBoxLayout(self.body)
+ self.horizontalLayout_18.setObjectName(u"horizontalLayout_18")
+ self.horizontalLayout_18.setContentsMargins(0, 0, 0, 0)
+ self.sidebar = QWidget(self.body)
+ self.sidebar.setObjectName(u"sidebar")
+ sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred)
+ sizePolicy3.setHorizontalStretch(0)
+ sizePolicy3.setVerticalStretch(0)
+ sizePolicy3.setHeightForWidth(self.sidebar.sizePolicy().hasHeightForWidth())
+ self.sidebar.setSizePolicy(sizePolicy3)
+ self.sidebar.setMinimumSize(QSize(300, 0))
+ self.sidebar.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.verticalLayout = QVBoxLayout(self.sidebar)
+ self.verticalLayout.setObjectName(u"verticalLayout")
+ self.verticalLayout.setContentsMargins(0, 9, 9, 0)
+ self.homePageBtn = QToolButton(self.sidebar)
+ self.homePageBtn.setObjectName(u"homePageBtn")
+ sizePolicy2.setHeightForWidth(self.homePageBtn.sizePolicy().hasHeightForWidth())
+ self.homePageBtn.setSizePolicy(sizePolicy2)
+ icon2 = QIcon()
+ icon2.addFile(u":/icon/house.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.homePageBtn.setIcon(icon2)
+ self.homePageBtn.setCheckable(True)
+ self.homePageBtn.setChecked(True)
+ self.homePageBtn.setAutoExclusive(True)
+ self.homePageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.verticalLayout.addWidget(self.homePageBtn)
+
+ self.explorePageBtn = QToolButton(self.sidebar)
+ self.explorePageBtn.setObjectName(u"explorePageBtn")
+ self.explorePageBtn.setEnabled(True)
+ sizePolicy2.setHeightForWidth(self.explorePageBtn.sizePolicy().hasHeightForWidth())
+ self.explorePageBtn.setSizePolicy(sizePolicy2)
+ icon3 = QIcon()
+ icon3.addFile(u":/icon/compass.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.explorePageBtn.setIcon(icon3)
+ self.explorePageBtn.setCheckable(True)
+ self.explorePageBtn.setAutoExclusive(True)
+ self.explorePageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.verticalLayout.addWidget(self.explorePageBtn)
+
+ self.locSimPageBtn = QToolButton(self.sidebar)
+ self.locSimPageBtn.setObjectName(u"locSimPageBtn")
+ sizePolicy2.setHeightForWidth(self.locSimPageBtn.sizePolicy().hasHeightForWidth())
+ self.locSimPageBtn.setSizePolicy(sizePolicy2)
+ icon4 = QIcon()
+ icon4.addFile(u":/icon/geo-alt.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.locSimPageBtn.setIcon(icon4)
+ self.locSimPageBtn.setCheckable(True)
+ self.locSimPageBtn.setAutoExclusive(True)
+ self.locSimPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.verticalLayout.addWidget(self.locSimPageBtn)
+
+ self.sidebarDiv1 = QFrame(self.sidebar)
+ self.sidebarDiv1.setObjectName(u"sidebarDiv1")
+ self.sidebarDiv1.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.sidebarDiv1.setFrameShadow(QFrame.Plain)
+ self.sidebarDiv1.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout.addWidget(self.sidebarDiv1)
+
+ self.gestaltPageBtn = QToolButton(self.sidebar)
+ self.gestaltPageBtn.setObjectName(u"gestaltPageBtn")
+ sizePolicy2.setHeightForWidth(self.gestaltPageBtn.sizePolicy().hasHeightForWidth())
+ self.gestaltPageBtn.setSizePolicy(sizePolicy2)
+ icon5 = QIcon()
+ icon5.addFile(u":/icon/iphone-island.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.gestaltPageBtn.setIcon(icon5)
+ self.gestaltPageBtn.setIconSize(QSize(24, 28))
+ self.gestaltPageBtn.setCheckable(True)
+ self.gestaltPageBtn.setAutoExclusive(True)
+ self.gestaltPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+ self.gestaltPageBtn.setArrowType(Qt.NoArrow)
+
+ self.verticalLayout.addWidget(self.gestaltPageBtn)
+
+ self.featureFlagsPageBtn = QToolButton(self.sidebar)
+ self.featureFlagsPageBtn.setObjectName(u"featureFlagsPageBtn")
+ sizePolicy2.setHeightForWidth(self.featureFlagsPageBtn.sizePolicy().hasHeightForWidth())
+ self.featureFlagsPageBtn.setSizePolicy(sizePolicy2)
+ font = QFont()
+ font.setFamilies([u".AppleSystemUIFont"])
+ self.featureFlagsPageBtn.setFont(font)
+ icon6 = QIcon()
+ icon6.addFile(u":/icon/flag.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.featureFlagsPageBtn.setIcon(icon6)
+ self.featureFlagsPageBtn.setCheckable(True)
+ self.featureFlagsPageBtn.setAutoExclusive(True)
+ self.featureFlagsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.verticalLayout.addWidget(self.featureFlagsPageBtn)
+
+ self.euEnablerPageBtn = QToolButton(self.sidebar)
+ self.euEnablerPageBtn.setObjectName(u"euEnablerPageBtn")
+ sizePolicy2.setHeightForWidth(self.euEnablerPageBtn.sizePolicy().hasHeightForWidth())
+ self.euEnablerPageBtn.setSizePolicy(sizePolicy2)
+ self.euEnablerPageBtn.setIcon(icon4)
+ self.euEnablerPageBtn.setCheckable(True)
+ self.euEnablerPageBtn.setAutoExclusive(True)
+ self.euEnablerPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.verticalLayout.addWidget(self.euEnablerPageBtn)
+
+ self.springboardOptionsPageBtn = QToolButton(self.sidebar)
+ self.springboardOptionsPageBtn.setObjectName(u"springboardOptionsPageBtn")
+ sizePolicy2.setHeightForWidth(self.springboardOptionsPageBtn.sizePolicy().hasHeightForWidth())
+ self.springboardOptionsPageBtn.setSizePolicy(sizePolicy2)
+ icon7 = QIcon()
+ icon7.addFile(u":/icon/app-indicator.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.springboardOptionsPageBtn.setIcon(icon7)
+ self.springboardOptionsPageBtn.setCheckable(True)
+ self.springboardOptionsPageBtn.setAutoExclusive(True)
+ self.springboardOptionsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.verticalLayout.addWidget(self.springboardOptionsPageBtn)
+
+ self.internalOptionsPageBtn = QToolButton(self.sidebar)
+ self.internalOptionsPageBtn.setObjectName(u"internalOptionsPageBtn")
+ sizePolicy2.setHeightForWidth(self.internalOptionsPageBtn.sizePolicy().hasHeightForWidth())
+ self.internalOptionsPageBtn.setSizePolicy(sizePolicy2)
+ icon8 = QIcon()
+ icon8.addFile(u":/icon/hdd.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.internalOptionsPageBtn.setIcon(icon8)
+ self.internalOptionsPageBtn.setCheckable(True)
+ self.internalOptionsPageBtn.setAutoExclusive(True)
+ self.internalOptionsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.verticalLayout.addWidget(self.internalOptionsPageBtn)
+
+ self.sidebarDiv2 = QFrame(self.sidebar)
+ self.sidebarDiv2.setObjectName(u"sidebarDiv2")
+ self.sidebarDiv2.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.sidebarDiv2.setFrameShadow(QFrame.Plain)
+ self.sidebarDiv2.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout.addWidget(self.sidebarDiv2)
+
+ self.applyPageBtn = QToolButton(self.sidebar)
+ self.applyPageBtn.setObjectName(u"applyPageBtn")
+ sizePolicy2.setHeightForWidth(self.applyPageBtn.sizePolicy().hasHeightForWidth())
+ self.applyPageBtn.setSizePolicy(sizePolicy2)
+ icon9 = QIcon()
+ icon9.addFile(u":/icon/check-circle.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.applyPageBtn.setIcon(icon9)
+ self.applyPageBtn.setCheckable(True)
+ self.applyPageBtn.setAutoExclusive(True)
+ self.applyPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.verticalLayout.addWidget(self.applyPageBtn)
+
+ self.settingsPageBtn = QToolButton(self.sidebar)
+ self.settingsPageBtn.setObjectName(u"settingsPageBtn")
+ sizePolicy2.setHeightForWidth(self.settingsPageBtn.sizePolicy().hasHeightForWidth())
+ self.settingsPageBtn.setSizePolicy(sizePolicy2)
+ icon10 = QIcon()
+ icon10.addFile(u":/icon/gear.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.settingsPageBtn.setIcon(icon10)
+ self.settingsPageBtn.setCheckable(True)
+ self.settingsPageBtn.setAutoExclusive(True)
+ self.settingsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.verticalLayout.addWidget(self.settingsPageBtn)
+
+ self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout.addItem(self.verticalSpacer)
+
+
+ self.horizontalLayout_18.addWidget(self.sidebar)
+
+ self.main = QWidget(self.body)
+ self.main.setObjectName(u"main")
+ sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
+ sizePolicy4.setHorizontalStretch(0)
+ sizePolicy4.setVerticalStretch(0)
+ sizePolicy4.setHeightForWidth(self.main.sizePolicy().hasHeightForWidth())
+ self.main.setSizePolicy(sizePolicy4)
+ self._3 = QVBoxLayout(self.main)
+ self._3.setSpacing(0)
+ self._3.setObjectName(u"_3")
+ self._3.setContentsMargins(9, 0, 0, 0)
+ self.pages = QStackedWidget(self.main)
+ self.pages.setObjectName(u"pages")
+ self.homePage = QWidget()
+ self.homePage.setObjectName(u"homePage")
+ self.verticalLayout_2 = QVBoxLayout(self.homePage)
+ self.verticalLayout_2.setObjectName(u"verticalLayout_2")
+ self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
+ self.horizontalWidget = QWidget(self.homePage)
+ self.horizontalWidget.setObjectName(u"horizontalWidget")
+ self.horizontalLayout = QHBoxLayout(self.horizontalWidget)
+ self.horizontalLayout.setSpacing(10)
+ self.horizontalLayout.setObjectName(u"horizontalLayout")
+ self.horizontalLayout.setContentsMargins(0, 9, 0, 9)
+ self.toolButton_9 = QToolButton(self.horizontalWidget)
+ self.toolButton_9.setObjectName(u"toolButton_9")
+ self.toolButton_9.setEnabled(False)
+ self.toolButton_9.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.toolButton_9.setIcon(icon)
+
+ self.horizontalLayout.addWidget(self.toolButton_9)
+
+ self.verticalWidget = QWidget(self.horizontalWidget)
+ self.verticalWidget.setObjectName(u"verticalWidget")
+ self.verticalLayout_3 = QVBoxLayout(self.verticalWidget)
+ self.verticalLayout_3.setSpacing(6)
+ self.verticalLayout_3.setObjectName(u"verticalLayout_3")
+ self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
+ self.phoneNameLbl = QLabel(self.verticalWidget)
+ self.phoneNameLbl.setObjectName(u"phoneNameLbl")
+ font1 = QFont()
+ font1.setBold(False)
+ self.phoneNameLbl.setFont(font1)
+
+ self.verticalLayout_3.addWidget(self.phoneNameLbl)
+
+ self.phoneVersionLbl = QLabel(self.verticalWidget)
+ self.phoneVersionLbl.setObjectName(u"phoneVersionLbl")
+ self.phoneVersionLbl.setCursor(QCursor(Qt.PointingHandCursor))
+ self.phoneVersionLbl.setTextFormat(Qt.RichText)
+ self.phoneVersionLbl.setOpenExternalLinks(False)
+
+ self.verticalLayout_3.addWidget(self.phoneVersionLbl)
+
+
+ self.horizontalLayout.addWidget(self.verticalWidget)
+
+ self.horizontalSpacer_3 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout.addItem(self.horizontalSpacer_3)
+
+
+ self.verticalLayout_2.addWidget(self.horizontalWidget)
+
+ self.line_4 = QFrame(self.homePage)
+ self.line_4.setObjectName(u"line_4")
+ self.line_4.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_4.setFrameShadow(QFrame.Plain)
+ self.line_4.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_2.addWidget(self.line_4)
+
+ self.horizontalWidget1 = QWidget(self.homePage)
+ self.horizontalWidget1.setObjectName(u"horizontalWidget1")
+ self.horizontalLayout_27 = QHBoxLayout(self.horizontalWidget1)
+ self.horizontalLayout_27.setSpacing(50)
+ self.horizontalLayout_27.setObjectName(u"horizontalLayout_27")
+ self.horizontalLayout_27.setContentsMargins(0, 0, 0, 0)
+ self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_27.addItem(self.horizontalSpacer_2)
+
+ self.bigNuggetBtn = QToolButton(self.horizontalWidget1)
+ self.bigNuggetBtn.setObjectName(u"bigNuggetBtn")
+ self.bigNuggetBtn.setStyleSheet(u"QToolButton {\n"
+" background-color: transparent;\n"
+" padding: 0px;\n"
+"}")
+ icon11 = QIcon()
+ icon11.addFile(u":/credits/big_nugget.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.bigNuggetBtn.setIcon(icon11)
+ self.bigNuggetBtn.setIconSize(QSize(150, 200))
+
+ self.horizontalLayout_27.addWidget(self.bigNuggetBtn)
+
+ self.verticalWidget1 = QWidget(self.horizontalWidget1)
+ self.verticalWidget1.setObjectName(u"verticalWidget1")
+ self.verticalLayout_26 = QVBoxLayout(self.verticalWidget1)
+ self.verticalLayout_26.setObjectName(u"verticalLayout_26")
+ self.verticalLayout_26.setContentsMargins(0, 0, 0, 0)
+ self.verticalSpacer_11 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_26.addItem(self.verticalSpacer_11)
+
+ self.label_2 = QLabel(self.verticalWidget1)
+ self.label_2.setObjectName(u"label_2")
+ font2 = QFont()
+ font2.setBold(True)
+ self.label_2.setFont(font2)
+ self.label_2.setStyleSheet(u"QLabel {\n"
+" font-size: 35px;\n"
+"}")
+ self.label_2.setAlignment(Qt.AlignCenter)
+
+ self.verticalLayout_26.addWidget(self.label_2)
+
+ self.verticalSpacer_12 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_26.addItem(self.verticalSpacer_12)
+
+ self.horizontalLayout_8 = QHBoxLayout()
+ self.horizontalLayout_8.setObjectName(u"horizontalLayout_8")
+ self.horizontalLayout_8.setContentsMargins(-1, -1, 0, 0)
+ self.discordBtn = QToolButton(self.verticalWidget1)
+ self.discordBtn.setObjectName(u"discordBtn")
+ icon12 = QIcon()
+ icon12.addFile(u":/icon/discord.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.discordBtn.setIcon(icon12)
+ self.discordBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.horizontalLayout_8.addWidget(self.discordBtn)
+
+ self.starOnGithubBtn = QToolButton(self.verticalWidget1)
+ self.starOnGithubBtn.setObjectName(u"starOnGithubBtn")
+ icon13 = QIcon()
+ icon13.addFile(u":/icon/star.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.starOnGithubBtn.setIcon(icon13)
+ self.starOnGithubBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.horizontalLayout_8.addWidget(self.starOnGithubBtn)
+
+
+ self.verticalLayout_26.addLayout(self.horizontalLayout_8)
+
+ self.verticalSpacer_4 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_26.addItem(self.verticalSpacer_4)
+
+
+ self.horizontalLayout_27.addWidget(self.verticalWidget1)
+
+ self.horizontalSpacer_12 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_27.addItem(self.horizontalSpacer_12)
+
+
+ self.verticalLayout_2.addWidget(self.horizontalWidget1)
+
+ self.verticalWidget_2 = QWidget(self.homePage)
+ self.verticalWidget_2.setObjectName(u"verticalWidget_2")
+ self.verticalLayout_25 = QVBoxLayout(self.verticalWidget_2)
+ self.verticalLayout_25.setSpacing(15)
+ self.verticalLayout_25.setObjectName(u"verticalLayout_25")
+ self.verticalLayout_25.setContentsMargins(0, 30, 0, 30)
+ self.horizontalWidget2 = QWidget(self.verticalWidget_2)
+ self.horizontalWidget2.setObjectName(u"horizontalWidget2")
+ self.horizontalWidget2.setEnabled(True)
+ self.horizontalLayout_6 = QHBoxLayout(self.horizontalWidget2)
+ self.horizontalLayout_6.setSpacing(0)
+ self.horizontalLayout_6.setObjectName(u"horizontalLayout_6")
+ self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0)
+ self.leminBtn = QToolButton(self.horizontalWidget2)
+ self.leminBtn.setObjectName(u"leminBtn")
+ self.leminBtn.setEnabled(True)
+ self.leminBtn.setMinimumSize(QSize(150, 35))
+ self.leminBtn.setStyleSheet(u"QToolButton {\n"
+" background: none;\n"
+"}")
+ icon14 = QIcon()
+ icon14.addFile(u":/credits/LeminLimez.png", QSize(), QIcon.Normal, QIcon.Off)
+ self.leminBtn.setIcon(icon14)
+ self.leminBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.horizontalLayout_6.addWidget(self.leminBtn)
+
+ self.leminTwitterBtn = QToolButton(self.horizontalWidget2)
+ self.leminTwitterBtn.setObjectName(u"leminTwitterBtn")
+ self.leminTwitterBtn.setStyleSheet(u"QToolButton {\n"
+" border-top-right-radius: 0px;\n"
+" border-bottom-right-radius: 0px;\n"
+" background: none;\n"
+" border: 1px solid #3b3b3b;\n"
+"}\n"
+"\n"
+"QToolButton:pressed {\n"
+" background-color: #535353;\n"
+" color: #FFFFFF;\n"
+"}")
+ icon15 = QIcon()
+ icon15.addFile(u":/icon/twitter.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.leminTwitterBtn.setIcon(icon15)
+
+ self.horizontalLayout_6.addWidget(self.leminTwitterBtn)
+
+ self.leminGithubBtn = QToolButton(self.horizontalWidget2)
+ self.leminGithubBtn.setObjectName(u"leminGithubBtn")
+ self.leminGithubBtn.setStyleSheet(u"QToolButton {\n"
+" border-radius: 0px;\n"
+" background: none;\n"
+" border: 1px solid #3b3b3b;\n"
+" border-left: none;\n"
+"}\n"
+"\n"
+"QToolButton:pressed {\n"
+" background-color: #535353;\n"
+" color: #FFFFFF;\n"
+"}")
+ icon16 = QIcon()
+ icon16.addFile(u":/icon/github.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.leminGithubBtn.setIcon(icon16)
+
+ self.horizontalLayout_6.addWidget(self.leminGithubBtn)
+
+ self.leminKoFiBtn = QToolButton(self.horizontalWidget2)
+ self.leminKoFiBtn.setObjectName(u"leminKoFiBtn")
+ self.leminKoFiBtn.setStyleSheet(u"QToolButton {\n"
+" border-top-left-radius: 0px;\n"
+" border-bottom-left-radius: 0px;\n"
+" background: none;\n"
+" border: 1px solid #3b3b3b;\n"
+" border-left: none;\n"
+"}\n"
+"\n"
+"QToolButton:pressed {\n"
+" background-color: #535353;\n"
+" color: #FFFFFF;\n"
+"}")
+ icon17 = QIcon()
+ icon17.addFile(u":/icon/currency-dollar.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.leminKoFiBtn.setIcon(icon17)
+
+ self.horizontalLayout_6.addWidget(self.leminKoFiBtn)
+
+ self.horizontalSpacer = QSpacerItem(10, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_6.addItem(self.horizontalSpacer)
+
+ self.toolButton_14 = QToolButton(self.horizontalWidget2)
+ self.toolButton_14.setObjectName(u"toolButton_14")
+ self.toolButton_14.setEnabled(False)
+ sizePolicy2.setHeightForWidth(self.toolButton_14.sizePolicy().hasHeightForWidth())
+ self.toolButton_14.setSizePolicy(sizePolicy2)
+ self.toolButton_14.setStyleSheet(u"QToolButton {\n"
+" background: none;\n"
+"}")
+
+ self.horizontalLayout_6.addWidget(self.toolButton_14)
+
+ self.horizontalSpacer_5 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_6.addItem(self.horizontalSpacer_5)
+
+
+ self.verticalLayout_25.addWidget(self.horizontalWidget2)
+
+ self.verticalSpacer_16 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
+
+ self.verticalLayout_25.addItem(self.verticalSpacer_16)
+
+ self.horizontalWidget_21 = QWidget(self.verticalWidget_2)
+ self.horizontalWidget_21.setObjectName(u"horizontalWidget_21")
+ self.horizontalLayout_2 = QHBoxLayout(self.horizontalWidget_21)
+ self.horizontalLayout_2.setSpacing(0)
+ self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
+ self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
+ self.helpFromBtn = QToolButton(self.horizontalWidget_21)
+ self.helpFromBtn.setObjectName(u"helpFromBtn")
+ self.helpFromBtn.setEnabled(True)
+ self.helpFromBtn.setMinimumSize(QSize(150, 35))
+ self.helpFromBtn.setStyleSheet(u"QToolButton {\n"
+" background: none;\n"
+"}")
+ self.helpFromBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.horizontalLayout_2.addWidget(self.helpFromBtn)
+
+ self.jjtechBtn = QToolButton(self.horizontalWidget_21)
+ self.jjtechBtn.setObjectName(u"jjtechBtn")
+ sizePolicy2.setHeightForWidth(self.jjtechBtn.sizePolicy().hasHeightForWidth())
+ self.jjtechBtn.setSizePolicy(sizePolicy2)
+ self.jjtechBtn.setMinimumSize(QSize(0, 37))
+ self.jjtechBtn.setStyleSheet(u"QToolButton {\n"
+" border-top-right-radius: 0px;\n"
+" border-bottom-right-radius: 0px;\n"
+" background: none;\n"
+" border: 1px solid #3b3b3b;\n"
+"}\n"
+"\n"
+"QToolButton:pressed {\n"
+" background-color: #535353;\n"
+" color: #FFFFFF;\n"
+"}")
+
+ self.horizontalLayout_2.addWidget(self.jjtechBtn)
+
+ self.disfordottieBtn = QToolButton(self.horizontalWidget_21)
+ self.disfordottieBtn.setObjectName(u"disfordottieBtn")
+ sizePolicy2.setHeightForWidth(self.disfordottieBtn.sizePolicy().hasHeightForWidth())
+ self.disfordottieBtn.setSizePolicy(sizePolicy2)
+ self.disfordottieBtn.setMinimumSize(QSize(0, 37))
+ self.disfordottieBtn.setStyleSheet(u"QToolButton {\n"
+" border-radius: 0px;\n"
+" background: none;\n"
+" border: 1px solid #3b3b3b;\n"
+" border-left: none;\n"
+"}\n"
+"\n"
+"QToolButton:pressed {\n"
+" background-color: #535353;\n"
+" color: #FFFFFF;\n"
+"}")
+
+ self.horizontalLayout_2.addWidget(self.disfordottieBtn)
+
+ self.lrdsnowBtn = QToolButton(self.horizontalWidget_21)
+ self.lrdsnowBtn.setObjectName(u"lrdsnowBtn")
+ sizePolicy2.setHeightForWidth(self.lrdsnowBtn.sizePolicy().hasHeightForWidth())
+ self.lrdsnowBtn.setSizePolicy(sizePolicy2)
+ self.lrdsnowBtn.setMinimumSize(QSize(0, 37))
+ self.lrdsnowBtn.setStyleSheet(u"QToolButton {\n"
+" border-top-left-radius: 0px;\n"
+" border-bottom-left-radius: 0px;\n"
+" background: none;\n"
+" border: 1px solid #3b3b3b;\n"
+" border-left: none;\n"
+"}\n"
+"\n"
+"QToolButton:pressed {\n"
+" background-color: #535353;\n"
+" color: #FFFFFF;\n"
+"}")
+
+ self.horizontalLayout_2.addWidget(self.lrdsnowBtn)
+
+
+ self.verticalLayout_25.addWidget(self.horizontalWidget_21)
+
+ self.horizontalWidget3 = QWidget(self.verticalWidget_2)
+ self.horizontalWidget3.setObjectName(u"horizontalWidget3")
+ self.horizontalLayout_24 = QHBoxLayout(self.horizontalWidget3)
+ self.horizontalLayout_24.setSpacing(0)
+ self.horizontalLayout_24.setObjectName(u"horizontalLayout_24")
+ self.horizontalLayout_24.setContentsMargins(0, 0, 0, 0)
+ self.toolButton_15 = QToolButton(self.horizontalWidget3)
+ self.toolButton_15.setObjectName(u"toolButton_15")
+ self.toolButton_15.setEnabled(False)
+ self.toolButton_15.setMinimumSize(QSize(150, 35))
+ self.toolButton_15.setStyleSheet(u"QToolButton {\n"
+" background: none;\n"
+"}")
+
+ self.horizontalLayout_24.addWidget(self.toolButton_15)
+
+ self.libiBtn = QToolButton(self.horizontalWidget3)
+ self.libiBtn.setObjectName(u"libiBtn")
+ sizePolicy2.setHeightForWidth(self.libiBtn.sizePolicy().hasHeightForWidth())
+ self.libiBtn.setSizePolicy(sizePolicy2)
+ self.libiBtn.setStyleSheet(u"QToolButton {\n"
+" border-top-right-radius: 0px;\n"
+" border-bottom-right-radius: 0px;\n"
+" background: none;\n"
+" border: 1px solid #3b3b3b;\n"
+"}\n"
+"\n"
+"QToolButton:pressed {\n"
+" background-color: #535353;\n"
+" color: #FFFFFF;\n"
+"}")
+
+ self.horizontalLayout_24.addWidget(self.libiBtn)
+
+ self.qtBtn = QToolButton(self.horizontalWidget3)
+ self.qtBtn.setObjectName(u"qtBtn")
+ sizePolicy2.setHeightForWidth(self.qtBtn.sizePolicy().hasHeightForWidth())
+ self.qtBtn.setSizePolicy(sizePolicy2)
+ self.qtBtn.setStyleSheet(u"QToolButton {\n"
+" border-top-left-radius: 0px;\n"
+" border-bottom-left-radius: 0px;\n"
+" background: none;\n"
+" border: 1px solid #3b3b3b;\n"
+" border-left: none;\n"
+"}\n"
+"\n"
+"QToolButton:pressed {\n"
+" background-color: #535353;\n"
+" color: #FFFFFF;\n"
+"}")
+
+ self.horizontalLayout_24.addWidget(self.qtBtn)
+
+
+ self.verticalLayout_25.addWidget(self.horizontalWidget3)
+
+
+ self.verticalLayout_2.addWidget(self.verticalWidget_2)
+
+ self.label = QLabel(self.homePage)
+ self.label.setObjectName(u"label")
+ self.label.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.verticalLayout_2.addWidget(self.label)
+
+ self.pages.addWidget(self.homePage)
+ self.gestaltPage = QWidget()
+ self.gestaltPage.setObjectName(u"gestaltPage")
+ self.verticalLayout_4 = QVBoxLayout(self.gestaltPage)
+ self.verticalLayout_4.setObjectName(u"verticalLayout_4")
+ self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
+ self.statusBarPageHeader = QWidget(self.gestaltPage)
+ self.statusBarPageHeader.setObjectName(u"statusBarPageHeader")
+ self.horizontalLayout_5 = QHBoxLayout(self.statusBarPageHeader)
+ self.horizontalLayout_5.setSpacing(10)
+ self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
+ self.horizontalLayout_5.setContentsMargins(0, -1, 0, -1)
+ self.toolButton_8 = QToolButton(self.statusBarPageHeader)
+ self.toolButton_8.setObjectName(u"toolButton_8")
+ self.toolButton_8.setEnabled(False)
+ self.toolButton_8.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.toolButton_8.setIcon(icon5)
+ self.toolButton_8.setIconSize(QSize(30, 30))
+
+ self.horizontalLayout_5.addWidget(self.toolButton_8)
+
+ self.verticalWidget_21 = QWidget(self.statusBarPageHeader)
+ self.verticalWidget_21.setObjectName(u"verticalWidget_21")
+ self.verticalLayout_5 = QVBoxLayout(self.verticalWidget_21)
+ self.verticalLayout_5.setSpacing(6)
+ self.verticalLayout_5.setObjectName(u"verticalLayout_5")
+ self.verticalLayout_5.setContentsMargins(0, 0, 0, 0)
+ self.statusBarLbl = QLabel(self.verticalWidget_21)
+ self.statusBarLbl.setObjectName(u"statusBarLbl")
+ self.statusBarLbl.setFont(font1)
+
+ self.verticalLayout_5.addWidget(self.statusBarLbl)
+
+ self.verticalSpacer_8 = QSpacerItem(20, 16, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
+
+ self.verticalLayout_5.addItem(self.verticalSpacer_8)
+
+
+ self.horizontalLayout_5.addWidget(self.verticalWidget_21)
+
+ self.horizontalSpacer_4 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_5.addItem(self.horizontalSpacer_4)
+
+
+ self.verticalLayout_4.addWidget(self.statusBarPageHeader)
+
+ self.line_8 = QFrame(self.gestaltPage)
+ self.line_8.setObjectName(u"line_8")
+ self.line_8.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_8.setFrameShadow(QFrame.Plain)
+ self.line_8.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_4.addWidget(self.line_8)
+
+ self.scrollArea = QScrollArea(self.gestaltPage)
+ self.scrollArea.setObjectName(u"scrollArea")
+ self.scrollArea.setFrameShape(QFrame.NoFrame)
+ self.scrollArea.setFrameShadow(QFrame.Plain)
+ self.scrollArea.setLineWidth(0)
+ self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+ self.scrollAreaWidgetContents = QWidget()
+ self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents")
+ self.scrollAreaWidgetContents.setGeometry(QRect(0, -420, 650, 1200))
+ self.scrollAreaWidgetContents.setMinimumSize(QSize(650, 1200))
+ self.scrollAreaWidgetContents.setMaximumSize(QSize(650, 1200))
+ self.verticalLayout_9 = QVBoxLayout(self.scrollAreaWidgetContents)
+ self.verticalLayout_9.setObjectName(u"verticalLayout_9")
+ self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
+ self.gestaltPageContent = QWidget(self.scrollAreaWidgetContents)
+ self.gestaltPageContent.setObjectName(u"gestaltPageContent")
+ self.gestaltPageContent.setEnabled(False)
+ self.verticalLayout_8 = QVBoxLayout(self.gestaltPageContent)
+ self.verticalLayout_8.setObjectName(u"verticalLayout_8")
+ self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
+ self.label_9 = QLabel(self.gestaltPageContent)
+ self.label_9.setObjectName(u"label_9")
+
+ self.verticalLayout_8.addWidget(self.label_9)
+
+ self.dynamicIslandDrp = QComboBox(self.gestaltPageContent)
+ self.dynamicIslandDrp.addItem("")
+ self.dynamicIslandDrp.addItem("")
+ self.dynamicIslandDrp.addItem("")
+ self.dynamicIslandDrp.addItem("")
+ self.dynamicIslandDrp.addItem("")
+ self.dynamicIslandDrp.addItem("")
+ self.dynamicIslandDrp.addItem("")
+ self.dynamicIslandDrp.setObjectName(u"dynamicIslandDrp")
+ self.dynamicIslandDrp.setMinimumSize(QSize(0, 0))
+ self.dynamicIslandDrp.setMaximumSize(QSize(325, 16777215))
+ self.dynamicIslandDrp.setStyleSheet(u"QComboBox {\n"
+" background-color: #3b3b3b;\n"
+" border: none;\n"
+" color: #e8e8e8;\n"
+" font-size: 14px;\n"
+" padding-left: 8px;\n"
+" border-radius: 8px;\n"
+"}\n"
+"\n"
+"QComboBox::drop-down {\n"
+" image: url(:/icon/caret-down-fill.svg);\n"
+" icon-size: 16px;\n"
+" subcontrol-position: right center;\n"
+" margin-right: 8px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView {\n"
+" background-color: #3b3b3b;\n"
+" outline: none;\n"
+" margin-top: 1px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView::item {\n"
+" background-color: #3b3b3b;\n"
+" color: #e8e8e8;\n"
+" padding-left: 8px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView::item:hover {\n"
+" background-color: #535353;\n"
+" color: #ffffff;\n"
+"}")
+ self.dynamicIslandDrp.setMaxVisibleItems(15)
+
+ self.verticalLayout_8.addWidget(self.dynamicIslandDrp)
+
+ self.rdarFixChk = QCheckBox(self.gestaltPageContent)
+ self.rdarFixChk.setObjectName(u"rdarFixChk")
+
+ self.verticalLayout_8.addWidget(self.rdarFixChk)
+
+ self.modelNameChk = QCheckBox(self.gestaltPageContent)
+ self.modelNameChk.setObjectName(u"modelNameChk")
+
+ self.verticalLayout_8.addWidget(self.modelNameChk)
+
+ self.modelNameTxt = QLineEdit(self.gestaltPageContent)
+ self.modelNameTxt.setObjectName(u"modelNameTxt")
+
+ self.verticalLayout_8.addWidget(self.modelNameTxt)
+
+ self.bootChimeChk = QCheckBox(self.gestaltPageContent)
+ self.bootChimeChk.setObjectName(u"bootChimeChk")
+
+ self.verticalLayout_8.addWidget(self.bootChimeChk)
+
+ self.chargeLimitChk = QCheckBox(self.gestaltPageContent)
+ self.chargeLimitChk.setObjectName(u"chargeLimitChk")
+
+ self.verticalLayout_8.addWidget(self.chargeLimitChk)
+
+ self.tapToWakeChk = QCheckBox(self.gestaltPageContent)
+ self.tapToWakeChk.setObjectName(u"tapToWakeChk")
+
+ self.verticalLayout_8.addWidget(self.tapToWakeChk)
+
+ self.iphone16SettingsChk = QCheckBox(self.gestaltPageContent)
+ self.iphone16SettingsChk.setObjectName(u"iphone16SettingsChk")
+
+ self.verticalLayout_8.addWidget(self.iphone16SettingsChk)
+
+ self.parallaxChk = QCheckBox(self.gestaltPageContent)
+ self.parallaxChk.setObjectName(u"parallaxChk")
+
+ self.verticalLayout_8.addWidget(self.parallaxChk)
+
+ self.horizontalWidget4 = QWidget(self.gestaltPageContent)
+ self.horizontalWidget4.setObjectName(u"horizontalWidget4")
+ self.horizontalLayout_10 = QHBoxLayout(self.horizontalWidget4)
+ self.horizontalLayout_10.setObjectName(u"horizontalLayout_10")
+ self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0)
+
+ self.verticalLayout_8.addWidget(self.horizontalWidget4)
+
+ self.line_7 = QFrame(self.gestaltPageContent)
+ self.line_7.setObjectName(u"line_7")
+ self.line_7.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_7.setFrameShadow(QFrame.Plain)
+ self.line_7.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_8.addWidget(self.line_7)
+
+ self.stageManagerChk = QCheckBox(self.gestaltPageContent)
+ self.stageManagerChk.setObjectName(u"stageManagerChk")
+
+ self.verticalLayout_8.addWidget(self.stageManagerChk)
+
+ self.enableMedusaChk = QCheckBox(self.gestaltPageContent)
+ self.enableMedusaChk.setObjectName(u"enableMedusaChk")
+
+ self.verticalLayout_8.addWidget(self.enableMedusaChk)
+
+ self.ipadAppsChk = QCheckBox(self.gestaltPageContent)
+ self.ipadAppsChk.setObjectName(u"ipadAppsChk")
+
+ self.verticalLayout_8.addWidget(self.ipadAppsChk)
+
+ self.shutterChk = QCheckBox(self.gestaltPageContent)
+ self.shutterChk.setObjectName(u"shutterChk")
+
+ self.verticalLayout_8.addWidget(self.shutterChk)
+
+ self.findMyFriendsChk = QCheckBox(self.gestaltPageContent)
+ self.findMyFriendsChk.setObjectName(u"findMyFriendsChk")
+
+ self.verticalLayout_8.addWidget(self.findMyFriendsChk)
+
+ self.pencilChk = QCheckBox(self.gestaltPageContent)
+ self.pencilChk.setObjectName(u"pencilChk")
+
+ self.verticalLayout_8.addWidget(self.pencilChk)
+
+ self.actionButtonChk = QCheckBox(self.gestaltPageContent)
+ self.actionButtonChk.setObjectName(u"actionButtonChk")
+
+ self.verticalLayout_8.addWidget(self.actionButtonChk)
+
+ self.line_9 = QFrame(self.gestaltPageContent)
+ self.line_9.setObjectName(u"line_9")
+ self.line_9.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_9.setFrameShadow(QFrame.Plain)
+ self.line_9.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_8.addWidget(self.line_9)
+
+ self.internalInstallChk = QCheckBox(self.gestaltPageContent)
+ self.internalInstallChk.setObjectName(u"internalInstallChk")
+
+ self.verticalLayout_8.addWidget(self.internalInstallChk)
+
+ self.internalStorageChk = QCheckBox(self.gestaltPageContent)
+ self.internalStorageChk.setObjectName(u"internalStorageChk")
+
+ self.verticalLayout_8.addWidget(self.internalStorageChk)
+
+ self.line_10 = QFrame(self.gestaltPageContent)
+ self.line_10.setObjectName(u"line_10")
+ self.line_10.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_10.setFrameShadow(QFrame.Plain)
+ self.line_10.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_8.addWidget(self.line_10)
+
+ self.collisionSOSChk = QCheckBox(self.gestaltPageContent)
+ self.collisionSOSChk.setObjectName(u"collisionSOSChk")
+
+ self.verticalLayout_8.addWidget(self.collisionSOSChk)
+
+ self.sleepApneaChk = QCheckBox(self.gestaltPageContent)
+ self.sleepApneaChk.setObjectName(u"sleepApneaChk")
+
+ self.verticalLayout_8.addWidget(self.sleepApneaChk)
+
+ self.aodChk = QCheckBox(self.gestaltPageContent)
+ self.aodChk.setObjectName(u"aodChk")
+
+ self.verticalLayout_8.addWidget(self.aodChk)
+
+ self.line_22 = QFrame(self.gestaltPageContent)
+ self.line_22.setObjectName(u"line_22")
+ self.line_22.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_22.setFrameShadow(QFrame.Plain)
+ self.line_22.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_8.addWidget(self.line_22)
+
+ self.horizontalLayout_11 = QHBoxLayout()
+ self.horizontalLayout_11.setObjectName(u"horizontalLayout_11")
+ self.horizontalLayout_11.setContentsMargins(-1, -1, -1, 0)
+ self.label_10 = QLabel(self.gestaltPageContent)
+ self.label_10.setObjectName(u"label_10")
+
+ self.horizontalLayout_11.addWidget(self.label_10)
+
+ self.addGestaltKeyBtn = QToolButton(self.gestaltPageContent)
+ self.addGestaltKeyBtn.setObjectName(u"addGestaltKeyBtn")
+ self.addGestaltKeyBtn.setEnabled(False)
+ icon18 = QIcon()
+ icon18.addFile(u":/icon/plus.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.addGestaltKeyBtn.setIcon(icon18)
+ self.addGestaltKeyBtn.setCheckable(False)
+ self.addGestaltKeyBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.horizontalLayout_11.addWidget(self.addGestaltKeyBtn)
+
+
+ self.verticalLayout_8.addLayout(self.horizontalLayout_11)
+
+ self.line_23 = QFrame(self.gestaltPageContent)
+ self.line_23.setObjectName(u"line_23")
+ self.line_23.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_23.setFrameShadow(QFrame.Plain)
+ self.line_23.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_8.addWidget(self.line_23)
+
+ self.customKeysCnt = QWidget(self.gestaltPageContent)
+ self.customKeysCnt.setObjectName(u"customKeysCnt")
+ self.verticalLayout_32 = QVBoxLayout(self.customKeysCnt)
+ self.verticalLayout_32.setObjectName(u"verticalLayout_32")
+
+ self.verticalLayout_8.addWidget(self.customKeysCnt)
+
+ self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_8.addItem(self.verticalSpacer_3)
+
+
+ self.verticalLayout_9.addWidget(self.gestaltPageContent)
+
+ self.scrollArea.setWidget(self.scrollAreaWidgetContents)
+
+ self.verticalLayout_4.addWidget(self.scrollArea)
+
+ self.pages.addWidget(self.gestaltPage)
+ self.featureFlagsPage = QWidget()
+ self.featureFlagsPage.setObjectName(u"featureFlagsPage")
+ self.verticalLayout_14 = QVBoxLayout(self.featureFlagsPage)
+ self.verticalLayout_14.setObjectName(u"verticalLayout_14")
+ self.verticalLayout_14.setContentsMargins(0, 0, 0, 0)
+ self.horizontalWidget_5 = QWidget(self.featureFlagsPage)
+ self.horizontalWidget_5.setObjectName(u"horizontalWidget_5")
+ self.horizontalLayout_20 = QHBoxLayout(self.horizontalWidget_5)
+ self.horizontalLayout_20.setSpacing(10)
+ self.horizontalLayout_20.setObjectName(u"horizontalLayout_20")
+ self.horizontalLayout_20.setContentsMargins(0, 9, 0, 9)
+ self.toolButton_10 = QToolButton(self.horizontalWidget_5)
+ self.toolButton_10.setObjectName(u"toolButton_10")
+ self.toolButton_10.setEnabled(False)
+ self.toolButton_10.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.toolButton_10.setIcon(icon6)
+
+ self.horizontalLayout_20.addWidget(self.toolButton_10)
+
+ self.verticalWidget_4 = QWidget(self.horizontalWidget_5)
+ self.verticalWidget_4.setObjectName(u"verticalWidget_4")
+ self.verticalLayout_12 = QVBoxLayout(self.verticalWidget_4)
+ self.verticalLayout_12.setSpacing(6)
+ self.verticalLayout_12.setObjectName(u"verticalLayout_12")
+ self.verticalLayout_12.setContentsMargins(0, 0, 0, 0)
+ self.internalOptionsLbl = QLabel(self.verticalWidget_4)
+ self.internalOptionsLbl.setObjectName(u"internalOptionsLbl")
+ self.internalOptionsLbl.setFont(font1)
+
+ self.verticalLayout_12.addWidget(self.internalOptionsLbl)
+
+ self.verticalSpacer_15 = QSpacerItem(20, 16, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
+
+ self.verticalLayout_12.addItem(self.verticalSpacer_15)
+
+
+ self.horizontalLayout_20.addWidget(self.verticalWidget_4)
+
+ self.horizontalSpacer_7 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_20.addItem(self.horizontalSpacer_7)
+
+
+ self.verticalLayout_14.addWidget(self.horizontalWidget_5)
+
+ self.line_12 = QFrame(self.featureFlagsPage)
+ self.line_12.setObjectName(u"line_12")
+ self.line_12.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_12.setFrameShadow(QFrame.Plain)
+ self.line_12.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_14.addWidget(self.line_12)
+
+ self.featureFlagsPageContent = QWidget(self.featureFlagsPage)
+ self.featureFlagsPageContent.setObjectName(u"featureFlagsPageContent")
+ self.featureFlagsPageContent.setEnabled(True)
+ self.verticalLayout_13 = QVBoxLayout(self.featureFlagsPageContent)
+ self.verticalLayout_13.setObjectName(u"verticalLayout_13")
+ self.verticalLayout_13.setContentsMargins(0, 0, 0, 0)
+ self.clockAnimChk = QCheckBox(self.featureFlagsPageContent)
+ self.clockAnimChk.setObjectName(u"clockAnimChk")
+
+ self.verticalLayout_13.addWidget(self.clockAnimChk)
+
+ self.lockscreenChk = QCheckBox(self.featureFlagsPageContent)
+ self.lockscreenChk.setObjectName(u"lockscreenChk")
+
+ self.verticalLayout_13.addWidget(self.lockscreenChk)
+
+ self.div = QFrame(self.featureFlagsPageContent)
+ self.div.setObjectName(u"div")
+ self.div.setEnabled(False)
+ self.div.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.div.setFrameShadow(QFrame.Plain)
+ self.div.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_13.addWidget(self.div)
+
+ self.photosChk = QCheckBox(self.featureFlagsPageContent)
+ self.photosChk.setObjectName(u"photosChk")
+
+ self.verticalLayout_13.addWidget(self.photosChk)
+
+ self.aiChk = QCheckBox(self.featureFlagsPageContent)
+ self.aiChk.setObjectName(u"aiChk")
+
+ self.verticalLayout_13.addWidget(self.aiChk)
+
+ self.verticalSpacer_6 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_13.addItem(self.verticalSpacer_6)
+
+
+ self.verticalLayout_14.addWidget(self.featureFlagsPageContent)
+
+ self.pages.addWidget(self.featureFlagsPage)
+ self.euEnablerPage = QWidget()
+ self.euEnablerPage.setObjectName(u"euEnablerPage")
+ self.verticalLayout_17 = QVBoxLayout(self.euEnablerPage)
+ self.verticalLayout_17.setObjectName(u"verticalLayout_17")
+ self.verticalLayout_17.setContentsMargins(0, 0, 0, 0)
+ self.horizontalWidget_6 = QWidget(self.euEnablerPage)
+ self.horizontalWidget_6.setObjectName(u"horizontalWidget_6")
+ self.horizontalLayout_21 = QHBoxLayout(self.horizontalWidget_6)
+ self.horizontalLayout_21.setSpacing(10)
+ self.horizontalLayout_21.setObjectName(u"horizontalLayout_21")
+ self.horizontalLayout_21.setContentsMargins(0, 9, 0, 9)
+ self.toolButton_11 = QToolButton(self.horizontalWidget_6)
+ self.toolButton_11.setObjectName(u"toolButton_11")
+ self.toolButton_11.setEnabled(False)
+ self.toolButton_11.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.toolButton_11.setIcon(icon4)
+
+ self.horizontalLayout_21.addWidget(self.toolButton_11)
+
+ self.verticalWidget_5 = QWidget(self.horizontalWidget_6)
+ self.verticalWidget_5.setObjectName(u"verticalWidget_5")
+ self.verticalLayout_15 = QVBoxLayout(self.verticalWidget_5)
+ self.verticalLayout_15.setSpacing(6)
+ self.verticalLayout_15.setObjectName(u"verticalLayout_15")
+ self.verticalLayout_15.setContentsMargins(0, 0, 0, 0)
+ self.eligibilityLbl = QLabel(self.verticalWidget_5)
+ self.eligibilityLbl.setObjectName(u"eligibilityLbl")
+ self.eligibilityLbl.setFont(font1)
+
+ self.verticalLayout_15.addWidget(self.eligibilityLbl)
+
+ self.verticalSpacer_20 = QSpacerItem(20, 16, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
+
+ self.verticalLayout_15.addItem(self.verticalSpacer_20)
+
+
+ self.horizontalLayout_21.addWidget(self.verticalWidget_5)
+
+ self.horizontalSpacer_8 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_21.addItem(self.horizontalSpacer_8)
+
+
+ self.verticalLayout_17.addWidget(self.horizontalWidget_6)
+
+ self.line_13 = QFrame(self.euEnablerPage)
+ self.line_13.setObjectName(u"line_13")
+ self.line_13.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_13.setFrameShadow(QFrame.Plain)
+ self.line_13.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_17.addWidget(self.line_13)
+
+ self.euEnablerEnabledChk = QCheckBox(self.euEnablerPage)
+ self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk")
+
+ self.verticalLayout_17.addWidget(self.euEnablerEnabledChk)
+
+ self.euEnablerPageContent = QWidget(self.euEnablerPage)
+ self.euEnablerPageContent.setObjectName(u"euEnablerPageContent")
+ self.euEnablerPageContent.setEnabled(False)
+ self.verticalLayout_16 = QVBoxLayout(self.euEnablerPageContent)
+ self.verticalLayout_16.setObjectName(u"verticalLayout_16")
+ self.verticalLayout_16.setContentsMargins(0, 0, 0, 0)
+ self.label_5 = QLabel(self.euEnablerPageContent)
+ self.label_5.setObjectName(u"label_5")
+
+ self.verticalLayout_16.addWidget(self.label_5)
+
+ self.methodChoiceDrp = QComboBox(self.euEnablerPageContent)
+ self.methodChoiceDrp.addItem("")
+ self.methodChoiceDrp.addItem("")
+ self.methodChoiceDrp.setObjectName(u"methodChoiceDrp")
+ self.methodChoiceDrp.setMaximumSize(QSize(150, 16777215))
+ self.methodChoiceDrp.setStyleSheet(u"QComboBox {\n"
+" background-color: #3b3b3b;\n"
+" border: none;\n"
+" color: #e8e8e8;\n"
+" font-size: 14px;\n"
+" padding-left: 8px;\n"
+" border-radius: 8px;\n"
+"}\n"
+"\n"
+"QComboBox::drop-down {\n"
+" image: url(:/icon/caret-down-fill.svg);\n"
+" icon-size: 16px;\n"
+" subcontrol-position: right center;\n"
+" margin-right: 8px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView {\n"
+" background-color: #3b3b3b;\n"
+" outline: none;\n"
+" margin-top: 1px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView::item {\n"
+" background-color: #3b3b3b;\n"
+" color: #e8e8e8;\n"
+" padding-left: 8px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView::item:hover {\n"
+" background-color: #535353;\n"
+" color: #ffffff;\n"
+"}")
+
+ self.verticalLayout_16.addWidget(self.methodChoiceDrp)
+
+ self.label_6 = QLabel(self.euEnablerPageContent)
+ self.label_6.setObjectName(u"label_6")
+
+ self.verticalLayout_16.addWidget(self.label_6)
+
+ self.regionCodeTxt = QLineEdit(self.euEnablerPageContent)
+ self.regionCodeTxt.setObjectName(u"regionCodeTxt")
+
+ self.verticalLayout_16.addWidget(self.regionCodeTxt)
+
+ self.line_16 = QFrame(self.euEnablerPageContent)
+ self.line_16.setObjectName(u"line_16")
+ self.line_16.setEnabled(False)
+ self.line_16.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_16.setFrameShadow(QFrame.Plain)
+ self.line_16.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_16.addWidget(self.line_16)
+
+ self.enableAIChk = QCheckBox(self.euEnablerPageContent)
+ self.enableAIChk.setObjectName(u"enableAIChk")
+
+ self.verticalLayout_16.addWidget(self.enableAIChk)
+
+ self.aiEnablerContent = QWidget(self.euEnablerPageContent)
+ self.aiEnablerContent.setObjectName(u"aiEnablerContent")
+ self.verticalLayout_34 = QVBoxLayout(self.aiEnablerContent)
+ self.verticalLayout_34.setObjectName(u"verticalLayout_34")
+ self.verticalLayout_34.setContentsMargins(0, 5, 0, 5)
+ self.languageLbl = QLabel(self.aiEnablerContent)
+ self.languageLbl.setObjectName(u"languageLbl")
+
+ self.verticalLayout_34.addWidget(self.languageLbl)
+
+ self.languageTxt = QLineEdit(self.aiEnablerContent)
+ self.languageTxt.setObjectName(u"languageTxt")
+
+ self.verticalLayout_34.addWidget(self.languageTxt)
+
+ self.line_21 = QFrame(self.aiEnablerContent)
+ self.line_21.setObjectName(u"line_21")
+ self.line_21.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_21.setFrameShadow(QFrame.Plain)
+ self.line_21.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_34.addWidget(self.line_21)
+
+ self.aiInfoLabel = QLabel(self.aiEnablerContent)
+ self.aiInfoLabel.setObjectName(u"aiInfoLabel")
+ sizePolicy1.setHeightForWidth(self.aiInfoLabel.sizePolicy().hasHeightForWidth())
+ self.aiInfoLabel.setSizePolicy(sizePolicy1)
+ self.aiInfoLabel.setTextFormat(Qt.AutoText)
+
+ self.verticalLayout_34.addWidget(self.aiInfoLabel)
+
+ self.label_8 = QLabel(self.aiEnablerContent)
+ self.label_8.setObjectName(u"label_8")
+
+ self.verticalLayout_34.addWidget(self.label_8)
+
+ self.spoofedModelDrp = QComboBox(self.aiEnablerContent)
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.setObjectName(u"spoofedModelDrp")
+ self.spoofedModelDrp.setMaximumSize(QSize(325, 16777215))
+ self.spoofedModelDrp.setStyleSheet(u"QComboBox {\n"
+" background-color: #3b3b3b;\n"
+" border: none;\n"
+" color: #e8e8e8;\n"
+" font-size: 14px;\n"
+" padding-left: 8px;\n"
+" border-radius: 8px;\n"
+"}\n"
+"\n"
+"QComboBox::drop-down {\n"
+" image: url(:/icon/caret-down-fill.svg);\n"
+" icon-size: 16px;\n"
+" subcontrol-position: right center;\n"
+" margin-right: 8px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView {\n"
+" background-color: #3b3b3b;\n"
+" outline: none;\n"
+" margin-top: 1px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView::item {\n"
+" background-color: #3b3b3b;\n"
+" color: #e8e8e8;\n"
+" padding-left: 8px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView::item:hover {\n"
+" background-color: #535353;\n"
+" color: #ffffff;\n"
+"}")
+
+ self.verticalLayout_34.addWidget(self.spoofedModelDrp)
+
+
+ self.verticalLayout_16.addWidget(self.aiEnablerContent)
+
+ self.verticalSpacer_7 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_16.addItem(self.verticalSpacer_7)
+
+
+ self.verticalLayout_17.addWidget(self.euEnablerPageContent)
+
+ self.pages.addWidget(self.euEnablerPage)
+ self.springboardOptionsPage = QWidget()
+ self.springboardOptionsPage.setObjectName(u"springboardOptionsPage")
+ self.verticalLayout_10 = QVBoxLayout(self.springboardOptionsPage)
+ self.verticalLayout_10.setObjectName(u"verticalLayout_10")
+ self.verticalLayout_10.setContentsMargins(0, 0, 0, 0)
+ self.horizontalWidget_4 = QWidget(self.springboardOptionsPage)
+ self.horizontalWidget_4.setObjectName(u"horizontalWidget_4")
+ self.horizontalLayout_13 = QHBoxLayout(self.horizontalWidget_4)
+ self.horizontalLayout_13.setSpacing(10)
+ self.horizontalLayout_13.setObjectName(u"horizontalLayout_13")
+ self.horizontalLayout_13.setContentsMargins(0, 9, 0, 9)
+ self.toolButton_7 = QToolButton(self.horizontalWidget_4)
+ self.toolButton_7.setObjectName(u"toolButton_7")
+ self.toolButton_7.setEnabled(False)
+ self.toolButton_7.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.toolButton_7.setIcon(icon7)
+
+ self.horizontalLayout_13.addWidget(self.toolButton_7)
+
+ self.verticalWidget_3 = QWidget(self.horizontalWidget_4)
+ self.verticalWidget_3.setObjectName(u"verticalWidget_3")
+ self.verticalLayout_7 = QVBoxLayout(self.verticalWidget_3)
+ self.verticalLayout_7.setSpacing(6)
+ self.verticalLayout_7.setObjectName(u"verticalLayout_7")
+ self.verticalLayout_7.setContentsMargins(0, 0, 0, 0)
+ self.springboardOptionsLbl = QLabel(self.verticalWidget_3)
+ self.springboardOptionsLbl.setObjectName(u"springboardOptionsLbl")
+ self.springboardOptionsLbl.setFont(font1)
+
+ self.verticalLayout_7.addWidget(self.springboardOptionsLbl)
+
+ self.verticalSpacer_19 = QSpacerItem(20, 16, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
+
+ self.verticalLayout_7.addItem(self.verticalSpacer_19)
+
+
+ self.horizontalLayout_13.addWidget(self.verticalWidget_3)
+
+ self.horizontalSpacer_6 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_13.addItem(self.horizontalSpacer_6)
+
+
+ self.verticalLayout_10.addWidget(self.horizontalWidget_4)
+
+ self.line_11 = QFrame(self.springboardOptionsPage)
+ self.line_11.setObjectName(u"line_11")
+ self.line_11.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_11.setFrameShadow(QFrame.Plain)
+ self.line_11.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_10.addWidget(self.line_11)
+
+ self.springboardOptionsPageContent = QWidget(self.springboardOptionsPage)
+ self.springboardOptionsPageContent.setObjectName(u"springboardOptionsPageContent")
+ self.springboardOptionsPageContent.setEnabled(False)
+ self.springboardOptionsPageContent.setMaximumSize(QSize(650, 16777215))
+ self._2 = QVBoxLayout(self.springboardOptionsPageContent)
+ self._2.setObjectName(u"_2")
+ self._2.setContentsMargins(0, 0, 0, 0)
+ self.label_13 = QLabel(self.springboardOptionsPageContent)
+ self.label_13.setObjectName(u"label_13")
+
+ self._2.addWidget(self.label_13)
+
+ self.footnoteTxt = QLineEdit(self.springboardOptionsPageContent)
+ self.footnoteTxt.setObjectName(u"footnoteTxt")
+
+ self._2.addWidget(self.footnoteTxt)
+
+ self.line_6 = QFrame(self.springboardOptionsPageContent)
+ self.line_6.setObjectName(u"line_6")
+ self.line_6.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_6.setFrameShadow(QFrame.Plain)
+ self.line_6.setFrameShape(QFrame.HLine)
+
+ self._2.addWidget(self.line_6)
+
+ self.disableLockRespringChk = QCheckBox(self.springboardOptionsPageContent)
+ self.disableLockRespringChk.setObjectName(u"disableLockRespringChk")
+
+ self._2.addWidget(self.disableLockRespringChk)
+
+ self.disableDimmingChk = QCheckBox(self.springboardOptionsPageContent)
+ self.disableDimmingChk.setObjectName(u"disableDimmingChk")
+
+ self._2.addWidget(self.disableDimmingChk)
+
+ self.disableBatteryAlertsChk = QCheckBox(self.springboardOptionsPageContent)
+ self.disableBatteryAlertsChk.setObjectName(u"disableBatteryAlertsChk")
+
+ self._2.addWidget(self.disableBatteryAlertsChk)
+
+ self.disableCrumbChk = QCheckBox(self.springboardOptionsPageContent)
+ self.disableCrumbChk.setObjectName(u"disableCrumbChk")
+
+ self._2.addWidget(self.disableCrumbChk)
+
+ self.enableSupervisionTextChk = QCheckBox(self.springboardOptionsPageContent)
+ self.enableSupervisionTextChk.setObjectName(u"enableSupervisionTextChk")
+
+ self._2.addWidget(self.enableSupervisionTextChk)
+
+ self.enableAirPlayChk = QCheckBox(self.springboardOptionsPageContent)
+ self.enableAirPlayChk.setObjectName(u"enableAirPlayChk")
+
+ self._2.addWidget(self.enableAirPlayChk)
+
+ self.verticalSpacer_5 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self._2.addItem(self.verticalSpacer_5)
+
+
+ self.verticalLayout_10.addWidget(self.springboardOptionsPageContent)
+
+ self.pages.addWidget(self.springboardOptionsPage)
+ self.internalOptionsPage = QWidget()
+ self.internalOptionsPage.setObjectName(u"internalOptionsPage")
+ self.verticalLayout_141 = QVBoxLayout(self.internalOptionsPage)
+ self.verticalLayout_141.setObjectName(u"verticalLayout_141")
+ self.verticalLayout_141.setContentsMargins(0, 0, 0, 0)
+ self.horizontalWidget_51 = QWidget(self.internalOptionsPage)
+ self.horizontalWidget_51.setObjectName(u"horizontalWidget_51")
+ self.horizontalLayout_201 = QHBoxLayout(self.horizontalWidget_51)
+ self.horizontalLayout_201.setSpacing(10)
+ self.horizontalLayout_201.setObjectName(u"horizontalLayout_201")
+ self.horizontalLayout_201.setContentsMargins(0, 9, 0, 9)
+ self.toolButton_101 = QToolButton(self.horizontalWidget_51)
+ self.toolButton_101.setObjectName(u"toolButton_101")
+ self.toolButton_101.setEnabled(False)
+ self.toolButton_101.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.toolButton_101.setIcon(icon8)
+
+ self.horizontalLayout_201.addWidget(self.toolButton_101)
+
+ self.verticalWidget_41 = QWidget(self.horizontalWidget_51)
+ self.verticalWidget_41.setObjectName(u"verticalWidget_41")
+ self.verticalLayout_121 = QVBoxLayout(self.verticalWidget_41)
+ self.verticalLayout_121.setSpacing(6)
+ self.verticalLayout_121.setObjectName(u"verticalLayout_121")
+ self.verticalLayout_121.setContentsMargins(0, 0, 0, 0)
+ self.internalOptionsLbl1 = QLabel(self.verticalWidget_41)
+ self.internalOptionsLbl1.setObjectName(u"internalOptionsLbl1")
+ self.internalOptionsLbl1.setFont(font1)
+
+ self.verticalLayout_121.addWidget(self.internalOptionsLbl1)
+
+ self.verticalSpacer_18 = QSpacerItem(20, 16, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
+
+ self.verticalLayout_121.addItem(self.verticalSpacer_18)
+
+
+ self.horizontalLayout_201.addWidget(self.verticalWidget_41)
+
+ self.horizontalSpacer_71 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_201.addItem(self.horizontalSpacer_71)
+
+
+ self.verticalLayout_141.addWidget(self.horizontalWidget_51)
+
+ self.line_121 = QFrame(self.internalOptionsPage)
+ self.line_121.setObjectName(u"line_121")
+ self.line_121.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_121.setFrameShadow(QFrame.Plain)
+ self.line_121.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_141.addWidget(self.line_121)
+
+ self.internalOptionsPageContent = QWidget(self.internalOptionsPage)
+ self.internalOptionsPageContent.setObjectName(u"internalOptionsPageContent")
+ self.internalOptionsPageContent.setEnabled(False)
+ self.verticalLayout_131 = QVBoxLayout(self.internalOptionsPageContent)
+ self.verticalLayout_131.setObjectName(u"verticalLayout_131")
+ self.verticalLayout_131.setContentsMargins(0, 0, 0, 0)
+ self.buildVersionChk = QCheckBox(self.internalOptionsPageContent)
+ self.buildVersionChk.setObjectName(u"buildVersionChk")
+
+ self.verticalLayout_131.addWidget(self.buildVersionChk)
+
+ self.RTLChk = QCheckBox(self.internalOptionsPageContent)
+ self.RTLChk.setObjectName(u"RTLChk")
+
+ self.verticalLayout_131.addWidget(self.RTLChk)
+
+ self.div1 = QFrame(self.internalOptionsPageContent)
+ self.div1.setObjectName(u"div1")
+ self.div1.setEnabled(False)
+ self.div1.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.div1.setFrameShadow(QFrame.Plain)
+ self.div1.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_131.addWidget(self.div1)
+
+ self.metalHUDChk = QCheckBox(self.internalOptionsPageContent)
+ self.metalHUDChk.setObjectName(u"metalHUDChk")
+
+ self.verticalLayout_131.addWidget(self.metalHUDChk)
+
+ self.accessoryChk = QCheckBox(self.internalOptionsPageContent)
+ self.accessoryChk.setObjectName(u"accessoryChk")
+
+ self.verticalLayout_131.addWidget(self.accessoryChk)
+
+ self.iMessageChk = QCheckBox(self.internalOptionsPageContent)
+ self.iMessageChk.setObjectName(u"iMessageChk")
+
+ self.verticalLayout_131.addWidget(self.iMessageChk)
+
+ self.IDSChk = QCheckBox(self.internalOptionsPageContent)
+ self.IDSChk.setObjectName(u"IDSChk")
+
+ self.verticalLayout_131.addWidget(self.IDSChk)
+
+ self.VCChk = QCheckBox(self.internalOptionsPageContent)
+ self.VCChk.setObjectName(u"VCChk")
+
+ self.verticalLayout_131.addWidget(self.VCChk)
+
+ self.line_17 = QFrame(self.internalOptionsPageContent)
+ self.line_17.setObjectName(u"line_17")
+ self.line_17.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_17.setFrameShadow(QFrame.Plain)
+ self.line_17.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_131.addWidget(self.line_17)
+
+ self.appStoreChk = QCheckBox(self.internalOptionsPageContent)
+ self.appStoreChk.setObjectName(u"appStoreChk")
+
+ self.verticalLayout_131.addWidget(self.appStoreChk)
+
+ self.notesChk = QCheckBox(self.internalOptionsPageContent)
+ self.notesChk.setObjectName(u"notesChk")
+
+ self.verticalLayout_131.addWidget(self.notesChk)
+
+ self.line_18 = QFrame(self.internalOptionsPageContent)
+ self.line_18.setObjectName(u"line_18")
+ self.line_18.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_18.setFrameShadow(QFrame.Plain)
+ self.line_18.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_131.addWidget(self.line_18)
+
+ self.showTouchesChk = QCheckBox(self.internalOptionsPageContent)
+ self.showTouchesChk.setObjectName(u"showTouchesChk")
+
+ self.verticalLayout_131.addWidget(self.showTouchesChk)
+
+ self.hideRespringChk = QCheckBox(self.internalOptionsPageContent)
+ self.hideRespringChk.setObjectName(u"hideRespringChk")
+
+ self.verticalLayout_131.addWidget(self.hideRespringChk)
+
+ self.enableWakeVibrateChk = QCheckBox(self.internalOptionsPageContent)
+ self.enableWakeVibrateChk.setObjectName(u"enableWakeVibrateChk")
+
+ self.verticalLayout_131.addWidget(self.enableWakeVibrateChk)
+
+ self.line_19 = QFrame(self.internalOptionsPageContent)
+ self.line_19.setObjectName(u"line_19")
+ self.line_19.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_19.setFrameShadow(QFrame.Plain)
+ self.line_19.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_131.addWidget(self.line_19)
+
+ self.pasteSoundChk = QCheckBox(self.internalOptionsPageContent)
+ self.pasteSoundChk.setObjectName(u"pasteSoundChk")
+
+ self.verticalLayout_131.addWidget(self.pasteSoundChk)
+
+ self.notifyPastesChk = QCheckBox(self.internalOptionsPageContent)
+ self.notifyPastesChk.setObjectName(u"notifyPastesChk")
+
+ self.verticalLayout_131.addWidget(self.notifyPastesChk)
+
+ self.verticalSpacer_61 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_131.addItem(self.verticalSpacer_61)
+
+
+ self.verticalLayout_141.addWidget(self.internalOptionsPageContent)
+
+ self.pages.addWidget(self.internalOptionsPage)
+ self.applyPage = QWidget()
+ self.applyPage.setObjectName(u"applyPage")
+ self.verticalLayout_6 = QVBoxLayout(self.applyPage)
+ self.verticalLayout_6.setObjectName(u"verticalLayout_6")
+ self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)
+ self.verticalWidget2 = QWidget(self.applyPage)
+ self.verticalWidget2.setObjectName(u"verticalWidget2")
+ self.verticalLayout_24 = QVBoxLayout(self.verticalWidget2)
+ self.verticalLayout_24.setObjectName(u"verticalLayout_24")
+ self.verticalLayout_24.setContentsMargins(0, 0, 0, 0)
+ self.locSimPageHeader_2 = QWidget(self.verticalWidget2)
+ self.locSimPageHeader_2.setObjectName(u"locSimPageHeader_2")
+ self.horizontalLayout_33 = QHBoxLayout(self.locSimPageHeader_2)
+ self.horizontalLayout_33.setSpacing(10)
+ self.horizontalLayout_33.setObjectName(u"horizontalLayout_33")
+ self.horizontalLayout_33.setContentsMargins(0, -1, 0, -1)
+ self.toolButton_18 = QToolButton(self.locSimPageHeader_2)
+ self.toolButton_18.setObjectName(u"toolButton_18")
+ self.toolButton_18.setEnabled(False)
+ self.toolButton_18.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.toolButton_18.setIcon(icon9)
+
+ self.horizontalLayout_33.addWidget(self.toolButton_18)
+
+ self.verticalWidget_11 = QWidget(self.locSimPageHeader_2)
+ self.verticalWidget_11.setObjectName(u"verticalWidget_11")
+ self.verticalLayout_33 = QVBoxLayout(self.verticalWidget_11)
+ self.verticalLayout_33.setSpacing(6)
+ self.verticalLayout_33.setObjectName(u"verticalLayout_33")
+ self.verticalLayout_33.setContentsMargins(0, 0, 0, 0)
+ self.statusBarLbl_5 = QLabel(self.verticalWidget_11)
+ self.statusBarLbl_5.setObjectName(u"statusBarLbl_5")
+ self.statusBarLbl_5.setFont(font1)
+
+ self.verticalLayout_33.addWidget(self.statusBarLbl_5)
+
+ self.label_16 = QLabel(self.verticalWidget_11)
+ self.label_16.setObjectName(u"label_16")
+
+ self.verticalLayout_33.addWidget(self.label_16)
+
+
+ self.horizontalLayout_33.addWidget(self.verticalWidget_11)
+
+ self.horizontalSpacer_15 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_33.addItem(self.horizontalSpacer_15)
+
+
+ self.verticalLayout_24.addWidget(self.locSimPageHeader_2)
+
+ self.line_5 = QFrame(self.verticalWidget2)
+ self.line_5.setObjectName(u"line_5")
+ self.line_5.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_5.setFrameShadow(QFrame.Plain)
+ self.line_5.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_24.addWidget(self.line_5)
+
+ self.verticalSpacer_10 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_24.addItem(self.verticalSpacer_10)
+
+ self.modifiedTweaksLbl = QLabel(self.verticalWidget2)
+ self.modifiedTweaksLbl.setObjectName(u"modifiedTweaksLbl")
+ self.modifiedTweaksLbl.setAlignment(Qt.AlignCenter)
+
+ self.verticalLayout_24.addWidget(self.modifiedTweaksLbl)
+
+ self.gestaltLocationLbl = QLabel(self.verticalWidget2)
+ self.gestaltLocationLbl.setObjectName(u"gestaltLocationLbl")
+ self.gestaltLocationLbl.setAlignment(Qt.AlignCenter)
+
+ self.verticalLayout_24.addWidget(self.gestaltLocationLbl)
+
+ self.horizontalLayout_7 = QHBoxLayout()
+ self.horizontalLayout_7.setObjectName(u"horizontalLayout_7")
+ self.horizontalLayout_7.setContentsMargins(-1, 10, -1, 0)
+ self.chooseGestaltBtn = QToolButton(self.verticalWidget2)
+ self.chooseGestaltBtn.setObjectName(u"chooseGestaltBtn")
+ icon19 = QIcon()
+ icon19.addFile(u":/icon/folder.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.chooseGestaltBtn.setIcon(icon19)
+ self.chooseGestaltBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.horizontalLayout_7.addWidget(self.chooseGestaltBtn)
+
+
+ self.verticalLayout_24.addLayout(self.horizontalLayout_7)
+
+ self.horizontalWidget5 = QWidget(self.verticalWidget2)
+ self.horizontalWidget5.setObjectName(u"horizontalWidget5")
+ self.horizontalLayout_17 = QHBoxLayout(self.horizontalWidget5)
+ self.horizontalLayout_17.setObjectName(u"horizontalLayout_17")
+ self.horizontalLayout_17.setContentsMargins(0, 0, 0, 0)
+ self.applyTweaksBtn = QToolButton(self.horizontalWidget5)
+ self.applyTweaksBtn.setObjectName(u"applyTweaksBtn")
+ self.applyTweaksBtn.setIcon(icon9)
+ self.applyTweaksBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.horizontalLayout_17.addWidget(self.applyTweaksBtn)
+
+
+ self.verticalLayout_24.addWidget(self.horizontalWidget5)
+
+ self.statusLbl = QLabel(self.verticalWidget2)
+ self.statusLbl.setObjectName(u"statusLbl")
+ self.statusLbl.setAlignment(Qt.AlignCenter)
+
+ self.verticalLayout_24.addWidget(self.statusLbl)
+
+ self.restoreProgressBar = QProgressBar(self.verticalWidget2)
+ self.restoreProgressBar.setObjectName(u"restoreProgressBar")
+ sizePolicy.setHeightForWidth(self.restoreProgressBar.sizePolicy().hasHeightForWidth())
+ self.restoreProgressBar.setSizePolicy(sizePolicy)
+ self.restoreProgressBar.setMinimumSize(QSize(150, 0))
+ self.restoreProgressBar.setValue(0)
+ self.restoreProgressBar.setAlignment(Qt.AlignCenter)
+
+ self.verticalLayout_24.addWidget(self.restoreProgressBar, 0, Qt.AlignHCenter)
+
+ self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_24.addItem(self.verticalSpacer_2)
+
+ self.horizontalWidget6 = QWidget(self.verticalWidget2)
+ self.horizontalWidget6.setObjectName(u"horizontalWidget6")
+ self.horizontalLayout_25 = QHBoxLayout(self.horizontalWidget6)
+ self.horizontalLayout_25.setObjectName(u"horizontalLayout_25")
+ self.horizontalLayout_25.setContentsMargins(0, 0, 0, 0)
+ self.horizontalSpacer_14 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_25.addItem(self.horizontalSpacer_14)
+
+ self.removeTweaksBtn = QToolButton(self.horizontalWidget6)
+ self.removeTweaksBtn.setObjectName(u"removeTweaksBtn")
+
+ self.horizontalLayout_25.addWidget(self.removeTweaksBtn)
+
+ self.resetGestaltBtn = QToolButton(self.horizontalWidget6)
+ self.resetGestaltBtn.setObjectName(u"resetGestaltBtn")
+
+ self.horizontalLayout_25.addWidget(self.resetGestaltBtn)
+
+ self.horizontalSpacer_16 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_25.addItem(self.horizontalSpacer_16)
+
+
+ self.verticalLayout_24.addWidget(self.horizontalWidget6)
+
+
+ self.verticalLayout_6.addWidget(self.verticalWidget2)
+
+ self.pages.addWidget(self.applyPage)
+ self.settingsPage = QWidget()
+ self.settingsPage.setObjectName(u"settingsPage")
+ self.verticalLayout_101 = QVBoxLayout(self.settingsPage)
+ self.verticalLayout_101.setObjectName(u"verticalLayout_101")
+ self.verticalLayout_101.setContentsMargins(0, 0, 0, 0)
+ self.horizontalWidget_41 = QWidget(self.settingsPage)
+ self.horizontalWidget_41.setObjectName(u"horizontalWidget_41")
+ self.horizontalLayout_131 = QHBoxLayout(self.horizontalWidget_41)
+ self.horizontalLayout_131.setSpacing(10)
+ self.horizontalLayout_131.setObjectName(u"horizontalLayout_131")
+ self.horizontalLayout_131.setContentsMargins(0, 9, 0, 9)
+ self.toolButton_71 = QToolButton(self.horizontalWidget_41)
+ self.toolButton_71.setObjectName(u"toolButton_71")
+ self.toolButton_71.setEnabled(False)
+ self.toolButton_71.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.toolButton_71.setIcon(icon10)
+
+ self.horizontalLayout_131.addWidget(self.toolButton_71)
+
+ self.verticalWidget_31 = QWidget(self.horizontalWidget_41)
+ self.verticalWidget_31.setObjectName(u"verticalWidget_31")
+ self.verticalLayout_71 = QVBoxLayout(self.verticalWidget_31)
+ self.verticalLayout_71.setSpacing(6)
+ self.verticalLayout_71.setObjectName(u"verticalLayout_71")
+ self.verticalLayout_71.setContentsMargins(0, 0, 0, 0)
+ self.springboardOptionsLbl1 = QLabel(self.verticalWidget_31)
+ self.springboardOptionsLbl1.setObjectName(u"springboardOptionsLbl1")
+ self.springboardOptionsLbl1.setFont(font1)
+
+ self.verticalLayout_71.addWidget(self.springboardOptionsLbl1)
+
+ self.verticalSpacer_17 = QSpacerItem(20, 16, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
+
+ self.verticalLayout_71.addItem(self.verticalSpacer_17)
+
+
+ self.horizontalLayout_131.addWidget(self.verticalWidget_31)
+
+ self.horizontalSpacer_61 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_131.addItem(self.horizontalSpacer_61)
+
+
+ self.verticalLayout_101.addWidget(self.horizontalWidget_41)
+
+ self.line_111 = QFrame(self.settingsPage)
+ self.line_111.setObjectName(u"line_111")
+ self.line_111.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_111.setFrameShadow(QFrame.Plain)
+ self.line_111.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_101.addWidget(self.line_111)
+
+ self.settingsPageContent = QWidget(self.settingsPage)
+ self.settingsPageContent.setObjectName(u"settingsPageContent")
+ self.settingsPageContent.setEnabled(True)
+ self.settingsPageContent.setMaximumSize(QSize(650, 16777215))
+ self._21 = QVBoxLayout(self.settingsPageContent)
+ self._21.setObjectName(u"_21")
+ self._21.setContentsMargins(0, 0, 0, 0)
+ self.allowWifiApplyingChk = QCheckBox(self.settingsPageContent)
+ self.allowWifiApplyingChk.setObjectName(u"allowWifiApplyingChk")
+ self.allowWifiApplyingChk.setChecked(True)
+
+ self._21.addWidget(self.allowWifiApplyingChk)
+
+ self.skipSetupChk = QCheckBox(self.settingsPageContent)
+ self.skipSetupChk.setObjectName(u"skipSetupChk")
+ self.skipSetupChk.setChecked(True)
+
+ self._21.addWidget(self.skipSetupChk)
+
+ self.line_20 = QFrame(self.settingsPageContent)
+ self.line_20.setObjectName(u"line_20")
+ self.line_20.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_20.setFrameShadow(QFrame.Plain)
+ self.line_20.setFrameShape(QFrame.HLine)
+
+ self._21.addWidget(self.line_20)
+
+ self.deviceSettingsBtns = QHBoxLayout()
+ self.deviceSettingsBtns.setObjectName(u"deviceSettingsBtns")
+ self.deviceSettingsBtns.setContentsMargins(-1, -1, -1, 0)
+ self.resetPairBtn = QToolButton(self.settingsPageContent)
+ self.resetPairBtn.setObjectName(u"resetPairBtn")
+
+ self.deviceSettingsBtns.addWidget(self.resetPairBtn)
+
+
+ self._21.addLayout(self.deviceSettingsBtns)
+
+ self.verticalSpacer_51 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self._21.addItem(self.verticalSpacer_51)
+
+
+ self.verticalLayout_101.addWidget(self.settingsPageContent)
+
+ self.pages.addWidget(self.settingsPage)
+ self.locSimPage = QWidget()
+ self.locSimPage.setObjectName(u"locSimPage")
+ self.verticalLayout_28 = QVBoxLayout(self.locSimPage)
+ self.verticalLayout_28.setObjectName(u"verticalLayout_28")
+ self.verticalLayout_28.setContentsMargins(0, 0, 0, 0)
+ self.locSimPageHeader = QWidget(self.locSimPage)
+ self.locSimPageHeader.setObjectName(u"locSimPageHeader")
+ self.horizontalLayout_28 = QHBoxLayout(self.locSimPageHeader)
+ self.horizontalLayout_28.setSpacing(10)
+ self.horizontalLayout_28.setObjectName(u"horizontalLayout_28")
+ self.horizontalLayout_28.setContentsMargins(0, -1, 0, -1)
+ self.toolButton_13 = QToolButton(self.locSimPageHeader)
+ self.toolButton_13.setObjectName(u"toolButton_13")
+ self.toolButton_13.setEnabled(False)
+ self.toolButton_13.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.toolButton_13.setIcon(icon4)
+
+ self.horizontalLayout_28.addWidget(self.toolButton_13)
+
+ self.verticalWidget_8 = QWidget(self.locSimPageHeader)
+ self.verticalWidget_8.setObjectName(u"verticalWidget_8")
+ self.verticalLayout_27 = QVBoxLayout(self.verticalWidget_8)
+ self.verticalLayout_27.setSpacing(6)
+ self.verticalLayout_27.setObjectName(u"verticalLayout_27")
+ self.verticalLayout_27.setContentsMargins(0, 0, 0, 0)
+ self.statusBarLbl_2 = QLabel(self.verticalWidget_8)
+ self.statusBarLbl_2.setObjectName(u"statusBarLbl_2")
+ self.statusBarLbl_2.setFont(font1)
+
+ self.verticalLayout_27.addWidget(self.statusBarLbl_2)
+
+ self.label_4 = QLabel(self.verticalWidget_8)
+ self.label_4.setObjectName(u"label_4")
+
+ self.verticalLayout_27.addWidget(self.label_4)
+
+
+ self.horizontalLayout_28.addWidget(self.verticalWidget_8)
+
+ self.horizontalSpacer_11 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_28.addItem(self.horizontalSpacer_11)
+
+ self.loadLocSimBtn = QToolButton(self.locSimPageHeader)
+ self.loadLocSimBtn.setObjectName(u"loadLocSimBtn")
+
+ self.horizontalLayout_28.addWidget(self.loadLocSimBtn)
+
+
+ self.verticalLayout_28.addWidget(self.locSimPageHeader)
+
+ self.line_2 = QFrame(self.locSimPage)
+ self.line_2.setObjectName(u"line_2")
+ self.line_2.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_2.setFrameShadow(QFrame.Plain)
+ self.line_2.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_28.addWidget(self.line_2)
+
+ self.verticalSpacer_14 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_28.addItem(self.verticalSpacer_14)
+
+ self.locSimCnt = QWidget(self.locSimPage)
+ self.locSimCnt.setObjectName(u"locSimCnt")
+ self.locSimPageContent = QVBoxLayout(self.locSimCnt)
+ self.locSimPageContent.setObjectName(u"locSimPageContent")
+ self.locSimPageContent.setContentsMargins(0, 0, 0, 0)
+ self.verticalWidget3 = QWidget(self.locSimCnt)
+ self.verticalWidget3.setObjectName(u"verticalWidget3")
+ self.verticalLayout_29 = QVBoxLayout(self.verticalWidget3)
+ self.verticalLayout_29.setObjectName(u"verticalLayout_29")
+ self.verticalLayout_29.setContentsMargins(0, 0, 0, 0)
+ self.label_7 = QLabel(self.verticalWidget3)
+ self.label_7.setObjectName(u"label_7")
+ self.label_7.setAlignment(Qt.AlignCenter)
+
+ self.verticalLayout_29.addWidget(self.label_7)
+
+ self.latitudeTxt = QLineEdit(self.verticalWidget3)
+ self.latitudeTxt.setObjectName(u"latitudeTxt")
+ self.latitudeTxt.setAlignment(Qt.AlignCenter)
+
+ self.verticalLayout_29.addWidget(self.latitudeTxt)
+
+ self.label_11 = QLabel(self.verticalWidget3)
+ self.label_11.setObjectName(u"label_11")
+ self.label_11.setAlignment(Qt.AlignCenter)
+
+ self.verticalLayout_29.addWidget(self.label_11)
+
+ self.longitudeTxt = QLineEdit(self.verticalWidget3)
+ self.longitudeTxt.setObjectName(u"longitudeTxt")
+ self.longitudeTxt.setAlignment(Qt.AlignCenter)
+
+ self.verticalLayout_29.addWidget(self.longitudeTxt)
+
+ self.horizontalWidget7 = QWidget(self.verticalWidget3)
+ self.horizontalWidget7.setObjectName(u"horizontalWidget7")
+ self.horizontalLayout_3 = QHBoxLayout(self.horizontalWidget7)
+ self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
+ self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
+ self.setLocationBtn = QToolButton(self.horizontalWidget7)
+ self.setLocationBtn.setObjectName(u"setLocationBtn")
+
+ self.horizontalLayout_3.addWidget(self.setLocationBtn)
+
+
+ self.verticalLayout_29.addWidget(self.horizontalWidget7)
+
+ self.horizontalWidget_22 = QWidget(self.verticalWidget3)
+ self.horizontalWidget_22.setObjectName(u"horizontalWidget_22")
+ self.horizontalLayout_29 = QHBoxLayout(self.horizontalWidget_22)
+ self.horizontalLayout_29.setObjectName(u"horizontalLayout_29")
+ self.horizontalLayout_29.setContentsMargins(0, 0, 0, 0)
+ self.resetLocationBtn = QToolButton(self.horizontalWidget_22)
+ self.resetLocationBtn.setObjectName(u"resetLocationBtn")
+
+ self.horizontalLayout_29.addWidget(self.resetLocationBtn)
+
+
+ self.verticalLayout_29.addWidget(self.horizontalWidget_22)
+
+
+ self.locSimPageContent.addWidget(self.verticalWidget3)
+
+
+ self.verticalLayout_28.addWidget(self.locSimCnt)
+
+ self.verticalSpacer_13 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_28.addItem(self.verticalSpacer_13)
+
+ self.pages.addWidget(self.locSimPage)
+ self.customOperationsPage = QWidget()
+ self.customOperationsPage.setObjectName(u"customOperationsPage")
+ self.verticalLayout_20 = QVBoxLayout(self.customOperationsPage)
+ self.verticalLayout_20.setObjectName(u"verticalLayout_20")
+ self.verticalLayout_20.setContentsMargins(0, 0, 0, 0)
+ self.horizontalWidget_7 = QWidget(self.customOperationsPage)
+ self.horizontalWidget_7.setObjectName(u"horizontalWidget_7")
+ self.horizontalLayout_22 = QHBoxLayout(self.horizontalWidget_7)
+ self.horizontalLayout_22.setSpacing(10)
+ self.horizontalLayout_22.setObjectName(u"horizontalLayout_22")
+ self.horizontalLayout_22.setContentsMargins(0, 9, 0, 9)
+ self.toolButton_12 = QToolButton(self.horizontalWidget_7)
+ self.toolButton_12.setObjectName(u"toolButton_12")
+ self.toolButton_12.setEnabled(False)
+ self.toolButton_12.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ icon20 = QIcon()
+ icon20.addFile(u":/icon/pencil.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.toolButton_12.setIcon(icon20)
+ self.toolButton_12.setIconSize(QSize(25, 25))
+
+ self.horizontalLayout_22.addWidget(self.toolButton_12)
+
+ self.verticalWidget_6 = QWidget(self.horizontalWidget_7)
+ self.verticalWidget_6.setObjectName(u"verticalWidget_6")
+ self.verticalLayout_18 = QVBoxLayout(self.verticalWidget_6)
+ self.verticalLayout_18.setSpacing(6)
+ self.verticalLayout_18.setObjectName(u"verticalLayout_18")
+ self.verticalLayout_18.setContentsMargins(0, 0, 0, 0)
+ self.customOperationsLbl = QLabel(self.verticalWidget_6)
+ self.customOperationsLbl.setObjectName(u"customOperationsLbl")
+ self.customOperationsLbl.setFont(font1)
+
+ self.verticalLayout_18.addWidget(self.customOperationsLbl)
+
+ self.label_14 = QLabel(self.verticalWidget_6)
+ self.label_14.setObjectName(u"label_14")
+
+ self.verticalLayout_18.addWidget(self.label_14)
+
+
+ self.horizontalLayout_22.addWidget(self.verticalWidget_6)
+
+ self.horizontalSpacer_9 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_22.addItem(self.horizontalSpacer_9)
+
+
+ self.verticalLayout_20.addWidget(self.horizontalWidget_7)
+
+ self.line_14 = QFrame(self.customOperationsPage)
+ self.line_14.setObjectName(u"line_14")
+ self.line_14.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_14.setFrameShadow(QFrame.Plain)
+ self.line_14.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_20.addWidget(self.line_14)
+
+ self.customOperationsPageContent = QWidget(self.customOperationsPage)
+ self.customOperationsPageContent.setObjectName(u"customOperationsPageContent")
+ self.customOperationsPageContent.setEnabled(True)
+ self.verticalLayout_19 = QVBoxLayout(self.customOperationsPageContent)
+ self.verticalLayout_19.setObjectName(u"verticalLayout_19")
+ self.verticalLayout_19.setContentsMargins(0, 0, 0, 0)
+ self.customOpsTopBtns = QHBoxLayout()
+#ifndef Q_OS_MAC
+ self.customOpsTopBtns.setSpacing(-1)
+#endif
+ self.customOpsTopBtns.setObjectName(u"customOpsTopBtns")
+ self.customOpsTopBtns.setContentsMargins(-1, -1, -1, 0)
+ self.horizontalSpacer_17 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.customOpsTopBtns.addItem(self.horizontalSpacer_17)
+
+ self.importOperationBtn = QToolButton(self.customOperationsPageContent)
+ self.importOperationBtn.setObjectName(u"importOperationBtn")
+ self.importOperationBtn.setEnabled(True)
+ icon21 = QIcon()
+ icon21.addFile(u":/icon/import.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.importOperationBtn.setIcon(icon21)
+ self.importOperationBtn.setIconSize(QSize(20, 20))
+ self.importOperationBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.customOpsTopBtns.addWidget(self.importOperationBtn, 0, Qt.AlignLeft)
+
+ self.newOperationBtn = QToolButton(self.customOperationsPageContent)
+ self.newOperationBtn.setObjectName(u"newOperationBtn")
+ self.newOperationBtn.setEnabled(True)
+ sizePolicy2.setHeightForWidth(self.newOperationBtn.sizePolicy().hasHeightForWidth())
+ self.newOperationBtn.setSizePolicy(sizePolicy2)
+ self.newOperationBtn.setMinimumSize(QSize(0, 35))
+ self.newOperationBtn.setIcon(icon18)
+ self.newOperationBtn.setIconSize(QSize(16, 16))
+ self.newOperationBtn.setCheckable(False)
+ self.newOperationBtn.setAutoExclusive(True)
+ self.newOperationBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.customOpsTopBtns.addWidget(self.newOperationBtn, 0, Qt.AlignLeft)
+
+
+ self.verticalLayout_19.addLayout(self.customOpsTopBtns)
+
+ self.operationsCnt = QWidget(self.customOperationsPageContent)
+ self.operationsCnt.setObjectName(u"operationsCnt")
+ self.operationsCnt.setEnabled(True)
+ sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
+ sizePolicy5.setHorizontalStretch(0)
+ sizePolicy5.setVerticalStretch(0)
+ sizePolicy5.setHeightForWidth(self.operationsCnt.sizePolicy().hasHeightForWidth())
+ self.operationsCnt.setSizePolicy(sizePolicy5)
+
+ self.verticalLayout_19.addWidget(self.operationsCnt)
+
+
+ self.verticalLayout_20.addWidget(self.customOperationsPageContent)
+
+ self.pages.addWidget(self.customOperationsPage)
+ self.explorePage = QWidget()
+ self.explorePage.setObjectName(u"explorePage")
+ self.verticalLayout_31 = QVBoxLayout(self.explorePage)
+ self.verticalLayout_31.setObjectName(u"verticalLayout_31")
+ self.verticalLayout_31.setContentsMargins(0, 0, 0, 0)
+ self.explorePageHeader = QWidget(self.explorePage)
+ self.explorePageHeader.setObjectName(u"explorePageHeader")
+ self.horizontalLayout_31 = QHBoxLayout(self.explorePageHeader)
+ self.horizontalLayout_31.setSpacing(10)
+ self.horizontalLayout_31.setObjectName(u"horizontalLayout_31")
+ self.horizontalLayout_31.setContentsMargins(0, -1, 0, -1)
+ self.toolButton_16 = QToolButton(self.explorePageHeader)
+ self.toolButton_16.setObjectName(u"toolButton_16")
+ self.toolButton_16.setEnabled(False)
+ self.toolButton_16.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.toolButton_16.setIcon(icon3)
+
+ self.horizontalLayout_31.addWidget(self.toolButton_16)
+
+ self.verticalWidget_9 = QWidget(self.explorePageHeader)
+ self.verticalWidget_9.setObjectName(u"verticalWidget_9")
+ self.verticalLayout_30 = QVBoxLayout(self.verticalWidget_9)
+ self.verticalLayout_30.setSpacing(6)
+ self.verticalLayout_30.setObjectName(u"verticalLayout_30")
+ self.verticalLayout_30.setContentsMargins(0, 0, 0, 0)
+ self.exploreLbl = QLabel(self.verticalWidget_9)
+ self.exploreLbl.setObjectName(u"exploreLbl")
+ self.exploreLbl.setFont(font1)
+
+ self.verticalLayout_30.addWidget(self.exploreLbl)
+
+ self.exploreSubLbl = QLabel(self.verticalWidget_9)
+ self.exploreSubLbl.setObjectName(u"exploreSubLbl")
+
+ self.verticalLayout_30.addWidget(self.exploreSubLbl)
+
+
+ self.horizontalLayout_31.addWidget(self.verticalWidget_9)
+
+ self.horizontalSpacer_13 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_31.addItem(self.horizontalSpacer_13)
+
+
+ self.verticalLayout_31.addWidget(self.explorePageHeader)
+
+ self.line_3 = QFrame(self.explorePage)
+ self.line_3.setObjectName(u"line_3")
+ self.line_3.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_3.setFrameShadow(QFrame.Plain)
+ self.line_3.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_31.addWidget(self.line_3)
+
+ self.exploreThemesCnt = QWidget(self.explorePage)
+ self.exploreThemesCnt.setObjectName(u"exploreThemesCnt")
+ sizePolicy5.setHeightForWidth(self.exploreThemesCnt.sizePolicy().hasHeightForWidth())
+ self.exploreThemesCnt.setSizePolicy(sizePolicy5)
+
+ self.verticalLayout_31.addWidget(self.exploreThemesCnt)
+
+ self.pages.addWidget(self.explorePage)
+ self.themingPage = QWidget()
+ self.themingPage.setObjectName(u"themingPage")
+ self.verticalLayout_23 = QVBoxLayout(self.themingPage)
+ self.verticalLayout_23.setObjectName(u"verticalLayout_23")
+ self.verticalLayout_23.setContentsMargins(0, 0, 0, 0)
+ self.horizontalWidget_8 = QWidget(self.themingPage)
+ self.horizontalWidget_8.setObjectName(u"horizontalWidget_8")
+ self.horizontalLayout_23 = QHBoxLayout(self.horizontalWidget_8)
+ self.horizontalLayout_23.setSpacing(10)
+ self.horizontalLayout_23.setObjectName(u"horizontalLayout_23")
+ self.horizontalLayout_23.setContentsMargins(0, 9, 0, 9)
+ self.themesBtn = QToolButton(self.horizontalWidget_8)
+ self.themesBtn.setObjectName(u"themesBtn")
+ self.themesBtn.setEnabled(True)
+ self.themesBtn.setStyleSheet(u"QToolButton {\n"
+" icon-size: 24px;\n"
+" background-color: transparent;\n"
+" padding-left: 0px;\n"
+" padding-right: 5px;\n"
+" border-radius: 0px;\n"
+"}")
+ self.themesBtn.setIcon(icon5)
+ self.themesBtn.setIconSize(QSize(30, 30))
+
+ self.horizontalLayout_23.addWidget(self.themesBtn)
+
+ self.verticalWidget_7 = QWidget(self.horizontalWidget_8)
+ self.verticalWidget_7.setObjectName(u"verticalWidget_7")
+ self.verticalLayout_21 = QVBoxLayout(self.verticalWidget_7)
+ self.verticalLayout_21.setSpacing(6)
+ self.verticalLayout_21.setObjectName(u"verticalLayout_21")
+ self.verticalLayout_21.setContentsMargins(0, 0, 0, 0)
+ self.themesLbl = QLabel(self.verticalWidget_7)
+ self.themesLbl.setObjectName(u"themesLbl")
+ self.themesLbl.setFont(font1)
+
+ self.verticalLayout_21.addWidget(self.themesLbl)
+
+
+ self.horizontalLayout_23.addWidget(self.verticalWidget_7)
+
+ self.horizontalSpacer_10 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+
+ self.horizontalLayout_23.addItem(self.horizontalSpacer_10)
+
+ self.horizontalWidget8 = QWidget(self.horizontalWidget_8)
+ self.horizontalWidget8.setObjectName(u"horizontalWidget8")
+ self.horizontalLayout_26 = QHBoxLayout(self.horizontalWidget8)
+ self.horizontalLayout_26.setObjectName(u"horizontalLayout_26")
+ self.horizontalLayout_26.setContentsMargins(0, 0, 0, 0)
+ self.importThemeBtn = QToolButton(self.horizontalWidget8)
+ self.importThemeBtn.setObjectName(u"importThemeBtn")
+ self.importThemeBtn.setEnabled(False)
+ self.importThemeBtn.setStyleSheet(u"QToolButton {\n"
+" background: none;\n"
+"}")
+
+ self.horizontalLayout_26.addWidget(self.importThemeBtn)
+
+ self.importThemeFolderBtn = QToolButton(self.horizontalWidget8)
+ self.importThemeFolderBtn.setObjectName(u"importThemeFolderBtn")
+ self.importThemeFolderBtn.setIcon(icon19)
+
+ self.horizontalLayout_26.addWidget(self.importThemeFolderBtn)
+
+ self.importThemeZipBtn = QToolButton(self.horizontalWidget8)
+ self.importThemeZipBtn.setObjectName(u"importThemeZipBtn")
+ icon22 = QIcon()
+ icon22.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.importThemeZipBtn.setIcon(icon22)
+
+ self.horizontalLayout_26.addWidget(self.importThemeZipBtn)
+
+
+ self.horizontalLayout_23.addWidget(self.horizontalWidget8)
+
+
+ self.verticalLayout_23.addWidget(self.horizontalWidget_8)
+
+ self.line_15 = QFrame(self.themingPage)
+ self.line_15.setObjectName(u"line_15")
+ self.line_15.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_15.setFrameShadow(QFrame.Plain)
+ self.line_15.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_23.addWidget(self.line_15)
+
+ self.themesPageContent = QWidget(self.themingPage)
+ self.themesPageContent.setObjectName(u"themesPageContent")
+ self.themesPageContent.setEnabled(False)
+ self.verticalLayout_22 = QVBoxLayout(self.themesPageContent)
+ self.verticalLayout_22.setObjectName(u"verticalLayout_22")
+ self.verticalLayout_22.setContentsMargins(0, 0, 0, 0)
+ self.themesCnt = QWidget(self.themesPageContent)
+ self.themesCnt.setObjectName(u"themesCnt")
+
+ self.verticalLayout_22.addWidget(self.themesCnt)
+
+ self.line = QFrame(self.themesPageContent)
+ self.line.setObjectName(u"line")
+ self.line.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line.setFrameShadow(QFrame.Plain)
+ self.line.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_22.addWidget(self.line)
+
+ self.label_3 = QLabel(self.themesPageContent)
+ self.label_3.setObjectName(u"label_3")
+
+ self.verticalLayout_22.addWidget(self.label_3)
+
+ self.iconsCnt = QWidget(self.themesPageContent)
+ self.iconsCnt.setObjectName(u"iconsCnt")
+
+ self.verticalLayout_22.addWidget(self.iconsCnt)
+
+ self.verticalSpacer_9 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
+
+ self.verticalLayout_22.addItem(self.verticalSpacer_9)
+
+ self.horizontalWidget9 = QWidget(self.themesPageContent)
+ self.horizontalWidget9.setObjectName(u"horizontalWidget9")
+ self.horizontalLayout_16 = QHBoxLayout(self.horizontalWidget9)
+ self.horizontalLayout_16.setObjectName(u"horizontalLayout_16")
+ self.horizontalLayout_16.setContentsMargins(0, 0, 0, 0)
+ self.hideNamesBtn = QToolButton(self.horizontalWidget9)
+ self.hideNamesBtn.setObjectName(u"hideNamesBtn")
+ sizePolicy2.setHeightForWidth(self.hideNamesBtn.sizePolicy().hasHeightForWidth())
+ self.hideNamesBtn.setSizePolicy(sizePolicy2)
+
+ self.horizontalLayout_16.addWidget(self.hideNamesBtn)
+
+ self.borderAllBtn = QToolButton(self.horizontalWidget9)
+ self.borderAllBtn.setObjectName(u"borderAllBtn")
+ sizePolicy2.setHeightForWidth(self.borderAllBtn.sizePolicy().hasHeightForWidth())
+ self.borderAllBtn.setSizePolicy(sizePolicy2)
+
+ self.horizontalLayout_16.addWidget(self.borderAllBtn)
+
+ self.addAllBtn = QToolButton(self.horizontalWidget9)
+ self.addAllBtn.setObjectName(u"addAllBtn")
+ sizePolicy2.setHeightForWidth(self.addAllBtn.sizePolicy().hasHeightForWidth())
+ self.addAllBtn.setSizePolicy(sizePolicy2)
+
+ self.horizontalLayout_16.addWidget(self.addAllBtn)
+
+
+ self.verticalLayout_22.addWidget(self.horizontalWidget9)
+
+
+ self.verticalLayout_23.addWidget(self.themesPageContent)
+
+ self.pages.addWidget(self.themingPage)
+
+ self._3.addWidget(self.pages)
+
+
+ self.horizontalLayout_18.addWidget(self.main)
+
+
+ self.verticalLayout_11.addWidget(self.body)
+
+ Nugget.setCentralWidget(self.centralwidget)
+
+ self.retranslateUi(Nugget)
+
+ self.devicePicker.setCurrentIndex(-1)
+ self.pages.setCurrentIndex(0)
+ self.dynamicIslandDrp.setCurrentIndex(0)
+ self.spoofedModelDrp.setCurrentIndex(0)
+
+
+ QMetaObject.connectSlotsByName(Nugget)
+ # setupUi
+
+ def retranslateUi(self, Nugget):
+ Nugget.setWindowTitle(QCoreApplication.translate("Nugget", u"Nugget", None))
+ self.centralwidget.setProperty("cls", QCoreApplication.translate("Nugget", u"central", None))
+ self.devicePicker.setPlaceholderText(QCoreApplication.translate("Nugget", u"None", None))
+ self.refreshBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"btn", None))
+ self.titleBar.setText(QCoreApplication.translate("Nugget", u"Nugget", None))
+ self.homePageBtn.setText(QCoreApplication.translate("Nugget", u" Home", None))
+ self.homePageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
+ self.explorePageBtn.setText(QCoreApplication.translate("Nugget", u" Explore", None))
+ self.explorePageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
+ self.locSimPageBtn.setText(QCoreApplication.translate("Nugget", u" Location Simulation", None))
+ self.locSimPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
+ self.gestaltPageBtn.setText(QCoreApplication.translate("Nugget", u" Mobile Gestalt", None))
+ self.gestaltPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
+ self.featureFlagsPageBtn.setText(QCoreApplication.translate("Nugget", u" Feature Flags", None))
+ self.featureFlagsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
+ self.euEnablerPageBtn.setText(QCoreApplication.translate("Nugget", u" Eligibility", None))
+ self.euEnablerPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
+ self.springboardOptionsPageBtn.setText(QCoreApplication.translate("Nugget", u" Springboard Options", None))
+ self.springboardOptionsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
+ self.internalOptionsPageBtn.setText(QCoreApplication.translate("Nugget", u" Internal Options", None))
+ self.internalOptionsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
+ self.applyPageBtn.setText(QCoreApplication.translate("Nugget", u" Apply", None))
+ self.applyPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
+ self.settingsPageBtn.setText(QCoreApplication.translate("Nugget", u" Settings", None))
+ self.settingsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None))
+ self.phoneNameLbl.setText(QCoreApplication.translate("Nugget", u"Phone", None))
+ self.phoneVersionLbl.setText(QCoreApplication.translate("Nugget", u"Version", None))
+ self.bigNuggetBtn.setText(QCoreApplication.translate("Nugget", u"...", None))
+ self.label_2.setText(QCoreApplication.translate("Nugget", u"Nugget", None))
+ self.discordBtn.setText(QCoreApplication.translate("Nugget", u" Join the Discord", None))
+ self.starOnGithubBtn.setText(QCoreApplication.translate("Nugget", u"Star on Github", None))
+ self.leminBtn.setText(QCoreApplication.translate("Nugget", u" LeminLimez", None))
+ self.leminTwitterBtn.setText(QCoreApplication.translate("Nugget", u"...", None))
+ self.leminGithubBtn.setText(QCoreApplication.translate("Nugget", u"...", None))
+ self.leminKoFiBtn.setText(QCoreApplication.translate("Nugget", u"...", None))
+ self.toolButton_14.setText(QCoreApplication.translate("Nugget", u"Main Developer", None))
+ self.helpFromBtn.setText(QCoreApplication.translate("Nugget", u"With Help From", None))
+ self.jjtechBtn.setText(QCoreApplication.translate("Nugget", u"JJTech\n"
+"Sparserestore", None))
+ self.disfordottieBtn.setText(QCoreApplication.translate("Nugget", u"disfordottie\n"
+"Clock Anim, Photos UI", None))
+ self.lrdsnowBtn.setText(QCoreApplication.translate("Nugget", u"lrdsnow\n"
+"EU Enabler", None))
+ self.toolButton_15.setText(QCoreApplication.translate("Nugget", u"Additional Thanks", None))
+ self.libiBtn.setText(QCoreApplication.translate("Nugget", u"pymobiledevice3", None))
+ self.qtBtn.setText(QCoreApplication.translate("Nugget", u"Qt Creator", None))
+ self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.1 (beta 2)", None))
+ self.statusBarLbl.setText(QCoreApplication.translate("Nugget", u"Mobile Gestalt", None))
+ self.label_9.setText(QCoreApplication.translate("Nugget", u"Device Subtype Preset", None))
+ self.dynamicIslandDrp.setItemText(0, QCoreApplication.translate("Nugget", u"None", None))
+ self.dynamicIslandDrp.setItemText(1, QCoreApplication.translate("Nugget", u"2436 (iPhone X Gestures for SE phones)", None))
+ self.dynamicIslandDrp.setItemText(2, QCoreApplication.translate("Nugget", u"2556 (iPhone 14 Pro Dynamic Island)", None))
+ self.dynamicIslandDrp.setItemText(3, QCoreApplication.translate("Nugget", u"2796 (iPhone 14 Pro Max Dynamic Island)", None))
+ self.dynamicIslandDrp.setItemText(4, QCoreApplication.translate("Nugget", u"2976 (iPhone 15 Pro Max Dynamic Island)", None))
+ self.dynamicIslandDrp.setItemText(5, QCoreApplication.translate("Nugget", u"2622 (iPhone 16 Pro Dynamic Island)", None))
+ self.dynamicIslandDrp.setItemText(6, QCoreApplication.translate("Nugget", u"2868 (iPhone 16 Pro Max Dynamic Island)", None))
+
+ self.dynamicIslandDrp.setCurrentText(QCoreApplication.translate("Nugget", u"None", None))
+ self.rdarFixChk.setText(QCoreApplication.translate("Nugget", u"Fix RDAR (modifies resolution)", None))
+ self.modelNameChk.setText(QCoreApplication.translate("Nugget", u"Change Device Model Name", None))
+ self.modelNameTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Model Name", None))
+ self.bootChimeChk.setText(QCoreApplication.translate("Nugget", u"Enable Boot Chime", None))
+ self.chargeLimitChk.setText(QCoreApplication.translate("Nugget", u"Enable Charge Limit", None))
+ self.tapToWakeChk.setText(QCoreApplication.translate("Nugget", u"Enable Tap to Wake (for iPhone SEs)", None))
+ self.iphone16SettingsChk.setText(QCoreApplication.translate("Nugget", u"Enable iPhone 16 Settings", None))
+ self.parallaxChk.setText(QCoreApplication.translate("Nugget", u"Disable Wallpaper Parallax", None))
+ self.stageManagerChk.setText(QCoreApplication.translate("Nugget", u"Enable Stage Manager Supported (WARNING: risky on some devices, mainly phones)", None))
+ self.enableMedusaChk.setText(QCoreApplication.translate("Nugget", u"Enable Medusa (iPad Multitasking) (WARNING: may be risky on some phones)", None))
+ self.ipadAppsChk.setText(QCoreApplication.translate("Nugget", u"Allow iPad Apps on iPhone", None))
+ self.shutterChk.setText(QCoreApplication.translate("Nugget", u"Disable Region Restrictions (ie. Shutter Sound)", None))
+ self.findMyFriendsChk.setText(QCoreApplication.translate("Nugget", u"Enable Find My Friends", None))
+ self.pencilChk.setText(QCoreApplication.translate("Nugget", u"Enable Apple Pencil Settings Tab", None))
+ self.actionButtonChk.setText(QCoreApplication.translate("Nugget", u"Enable Action Button Settings Tab", None))
+ self.internalInstallChk.setText(QCoreApplication.translate("Nugget", u"Set as Apple Internal Install (ie Metal HUD in any app)", None))
+ self.internalStorageChk.setText(QCoreApplication.translate("Nugget", u"Enable Internal Storage (WARNING: risky for some devices, mainly iPads)", None))
+ self.collisionSOSChk.setText(QCoreApplication.translate("Nugget", u"Enable Collision SOS", None))
+ self.sleepApneaChk.setText(QCoreApplication.translate("Nugget", u"Enable Sleep Apnea (real) [for Apple Watches]", None))
+ self.aodChk.setText(QCoreApplication.translate("Nugget", u"Enable Always On Display", None))
+ self.label_10.setText(QCoreApplication.translate("Nugget", u"Custom Gestalt Keys", None))
+ self.addGestaltKeyBtn.setText(QCoreApplication.translate("Nugget", u" Add Key", None))
+ self.internalOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Feature Flags", None))
+ self.clockAnimChk.setText(QCoreApplication.translate("Nugget", u"Enable Lockscreen Clock Animation", None))
+ self.lockscreenChk.setText(QCoreApplication.translate("Nugget", u"Enable Duplicate Lockscreen Button and Lockscreen Quickswitch", None))
+ self.photosChk.setText(QCoreApplication.translate("Nugget", u"Enable Old Photo UI", None))
+ self.aiChk.setText(QCoreApplication.translate("Nugget", u"Enable Apple Intelligence", None))
+ self.eligibilityLbl.setText(QCoreApplication.translate("Nugget", u"Eligibility Tweaks", None))
+ self.euEnablerEnabledChk.setText(QCoreApplication.translate("Nugget", u"Enable EU Enabler", None))
+ self.label_5.setText(QCoreApplication.translate("Nugget", u"Method Type", None))
+ self.methodChoiceDrp.setItemText(0, QCoreApplication.translate("Nugget", u"Method 1", None))
+ self.methodChoiceDrp.setItemText(1, QCoreApplication.translate("Nugget", u"Method 2", None))
+
+ self.label_6.setText(QCoreApplication.translate("Nugget", u"Region Code (Should be 2 letters)", None))
+ self.regionCodeTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Region Code (Default: US)", None))
+ self.enableAIChk.setText(QCoreApplication.translate("Nugget", u"Enable Apple Intelligence (for Unsupported Devices)", None))
+ self.languageLbl.setText(QCoreApplication.translate("Nugget", u"Language Code (not needed for English)", None))
+ self.languageTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Language Code (i.e. en)", None))
+ self.aiInfoLabel.setText(QCoreApplication.translate("Nugget", u"In order to download the AI model, you must spoof the device model. This will break Face ID until\n"
+"you revert.\n"
+"\n"
+"Once the model has downloaded, set \"Spoofed Device Model\" to \"None\" and click the \"Apply Tweaks\"\n"
+"button on the \"Apply\" page again to fix Face ID.", None))
+ self.label_8.setText(QCoreApplication.translate("Nugget", u"Spoofed Device Model", None))
+ self.spoofedModelDrp.setItemText(0, QCoreApplication.translate("Nugget", u"None", None))
+ self.spoofedModelDrp.setItemText(1, QCoreApplication.translate("Nugget", u"iPhone16,2 (iPhone 15 Pro)", None))
+ self.spoofedModelDrp.setItemText(2, QCoreApplication.translate("Nugget", u"iPhone17,3 (iPhone 16 Pro)", None))
+ self.spoofedModelDrp.setItemText(3, QCoreApplication.translate("Nugget", u"iPhone17,4 (iPhone 16 Pro Max)", None))
+ self.spoofedModelDrp.setItemText(4, QCoreApplication.translate("Nugget", u"iPad16,3 (iPad Pro M4)", None))
+
+ self.spoofedModelDrp.setCurrentText(QCoreApplication.translate("Nugget", u"None", None))
+ self.springboardOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Springboard Options", None))
+ self.label_13.setText(QCoreApplication.translate("Nugget", u"Lock Screen Footnote Text", None))
+ self.footnoteTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Footnote Text", None))
+ self.disableLockRespringChk.setText(QCoreApplication.translate("Nugget", u"Disable Lock After Respring", None))
+ self.disableDimmingChk.setText(QCoreApplication.translate("Nugget", u"Disable Screen Dimming While Charging", None))
+ self.disableBatteryAlertsChk.setText(QCoreApplication.translate("Nugget", u"Disable Low Battery Alerts", None))
+ self.disableCrumbChk.setText(QCoreApplication.translate("Nugget", u"Disable Breadcrumbs", None))
+ self.enableSupervisionTextChk.setText(QCoreApplication.translate("Nugget", u"Show Supervision Text on Lock Screen", None))
+ self.enableAirPlayChk.setText(QCoreApplication.translate("Nugget", u"Enable AirPlay support for Stage Manager", None))
+ self.internalOptionsLbl1.setText(QCoreApplication.translate("Nugget", u"Internal Options", None))
+ self.buildVersionChk.setText(QCoreApplication.translate("Nugget", u"Show Build Version in Status Bar", None))
+ self.RTLChk.setText(QCoreApplication.translate("Nugget", u"Force Right-to-Left Layout", None))
+ self.metalHUDChk.setText(QCoreApplication.translate("Nugget", u"Enable Metal HUD Debug", None))
+ self.accessoryChk.setText(QCoreApplication.translate("Nugget", u"Enable Accessory Developer", None))
+ self.iMessageChk.setText(QCoreApplication.translate("Nugget", u"Enable iMessage Debugging", None))
+ self.IDSChk.setText(QCoreApplication.translate("Nugget", u"Enable Continuity Debugging", None))
+ self.VCChk.setText(QCoreApplication.translate("Nugget", u"Enable FaceTime Debugging", None))
+ self.appStoreChk.setText(QCoreApplication.translate("Nugget", u"Enable App Store Debug Gesture", None))
+ self.notesChk.setText(QCoreApplication.translate("Nugget", u"Enable Notes Debug Mode", None))
+ self.showTouchesChk.setText(QCoreApplication.translate("Nugget", u"Show Touches With Debug Info", None))
+ self.hideRespringChk.setText(QCoreApplication.translate("Nugget", u"Hide Respring Icon", None))
+ self.enableWakeVibrateChk.setText(QCoreApplication.translate("Nugget", u"Vibrate on Raise-to-Wake", None))
+ self.pasteSoundChk.setText(QCoreApplication.translate("Nugget", u"Play Sound on Paste", None))
+ self.notifyPastesChk.setText(QCoreApplication.translate("Nugget", u"Show Notifications for System Pastes", None))
+ self.statusBarLbl_5.setText(QCoreApplication.translate("Nugget", u"Apply", None))
+ self.label_16.setText("")
+ self.modifiedTweaksLbl.setText(QCoreApplication.translate("Nugget", u"Current gestalt file location:", None))
+ self.gestaltLocationLbl.setText(QCoreApplication.translate("Nugget", u"None", None))
+ self.chooseGestaltBtn.setText(QCoreApplication.translate("Nugget", u" Choose Gestalt File", None))
+ self.applyTweaksBtn.setText(QCoreApplication.translate("Nugget", u" Apply Changes", None))
+ self.statusLbl.setText(QCoreApplication.translate("Nugget", u"Ready!", None))
+ self.removeTweaksBtn.setText(QCoreApplication.translate("Nugget", u"Remove All Tweaks", None))
+ self.resetGestaltBtn.setText(QCoreApplication.translate("Nugget", u"Reset Mobile Gestalt", None))
+ self.springboardOptionsLbl1.setText(QCoreApplication.translate("Nugget", u"Nugget Settings", None))
+ self.allowWifiApplyingChk.setText(QCoreApplication.translate("Nugget", u"Allow Applying Over WiFi", None))
+ self.skipSetupChk.setText(QCoreApplication.translate("Nugget", u"Skip Setup (non-exploit files only)", None))
+ self.resetPairBtn.setText(QCoreApplication.translate("Nugget", u"Reset Device Pairing", None))
+ self.statusBarLbl_2.setText(QCoreApplication.translate("Nugget", u"Location Simulation", None))
+ self.label_4.setText("")
+ self.loadLocSimBtn.setText(QCoreApplication.translate("Nugget", u"Start Location Simulation", None))
+ self.label_7.setText(QCoreApplication.translate("Nugget", u"Latitude", None))
+ self.latitudeTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"XXX.XXXXX", None))
+ self.label_11.setText(QCoreApplication.translate("Nugget", u"Longitude", None))
+ self.longitudeTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"XXX.XXXXX", None))
+ self.setLocationBtn.setText(QCoreApplication.translate("Nugget", u"Set Location", None))
+ self.resetLocationBtn.setText(QCoreApplication.translate("Nugget", u"Reset Location", None))
+ self.customOperationsLbl.setText(QCoreApplication.translate("Nugget", u"Custom Operations", None))
+ self.label_14.setText("")
+ self.importOperationBtn.setText(QCoreApplication.translate("Nugget", u" Import .cowperation", None))
+ self.newOperationBtn.setText(QCoreApplication.translate("Nugget", u" New Operation", None))
+ self.exploreLbl.setText(QCoreApplication.translate("Nugget", u"Explore", None))
+ self.exploreSubLbl.setText("")
+ self.themesLbl.setText(QCoreApplication.translate("Nugget", u"Mobile Gestalt Modifications", None))
+ self.importThemeBtn.setText(QCoreApplication.translate("Nugget", u"Import Theme:", None))
+ self.importThemeFolderBtn.setText(QCoreApplication.translate("Nugget", u"...", None))
+ self.importThemeZipBtn.setText(QCoreApplication.translate("Nugget", u"...", None))
+ self.label_3.setText(QCoreApplication.translate("Nugget", u"Customize Individual Apps", None))
+ self.hideNamesBtn.setText(QCoreApplication.translate("Nugget", u"Hide/Show All App Names", None))
+ self.borderAllBtn.setText(QCoreApplication.translate("Nugget", u"Toggle All \"Border\"", None))
+ self.addAllBtn.setText(QCoreApplication.translate("Nugget", u"Toggle All \"Add to Device\"", None))
+ # retranslateUi
+
diff --git a/qt/mainwindow.ui b/qt/mainwindow.ui
index e9fc454..a52bcc3 100644
--- a/qt/mainwindow.ui
+++ b/qt/mainwindow.ui
@@ -1566,7 +1566,7 @@ QToolButton:pressed {
-
- Nugget GUI - Version 3.0
+ Nugget GUI - Version 4.0
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
@@ -1759,7 +1759,7 @@ QToolButton:pressed {
-
- false
+ true
@@ -1931,24 +1931,6 @@ QComboBox QAbstractItemView::item:hover {
- -
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
@@ -2065,19 +2047,99 @@ QComboBox QAbstractItemView::item:hover {
-
-
+
- Enable Sleep Apnea (real) [for Apple Watches]
+ Enable Always On Display
-
-
+
+
+ QFrame {
+ color: #414141;
+}
+
+
+ QFrame::Plain
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ 0
+
+
-
+
+
+ true
+
+
+ Custom Gestalt Keys
+
+
+
+ -
+
+
+ true
+
+
+ Add Key
+
+
+
+ :/icon/plus.svg:/icon/plus.svg
+
+
+ false
+
+
+ Qt::ToolButtonTextBesideIcon
+
+
+
+
+
+ -
+
- Enable Always On Display
+ Warning: Using this feature incorrectly can lead to bootloops and data loss. Only use if you know
+what you are doing.
+ -
+
+
+ QFrame {
+ color: #414141;
+}
+
+
+ QFrame::Plain
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ true
+
+
+
-
+
+
+
+
+
-
@@ -2448,13 +2510,6 @@ QComboBox QAbstractItemView::item:hover {
- -
-
-
- Enable EU Enabler
-
-
-
-
@@ -2474,22 +2529,44 @@ QComboBox QAbstractItemView::item:hover {
0
-
-
-
- Method Type
-
-
-
- -
-
-
-
- 150
- 16777215
-
-
-
- QComboBox {
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ Enable EU Enabler
+
+
+
+ -
+
+
+ Method Type
+
+
+
+ -
+
+
+
+ 150
+ 16777215
+
+
+
+ QComboBox {
background-color: #3b3b3b;
border: none;
color: #e8e8e8;
@@ -2521,49 +2598,52 @@ QComboBox QAbstractItemView::item:hover {
background-color: #535353;
color: #ffffff;
}
-
-
-
-
- Method 1
-
-
- -
-
- Method 2
-
-
-
-
- -
-
-
- Region Code (Should be 2 letters)
-
-
-
- -
-
-
- Region Code (Default: US)
-
-
-
- -
-
-
- false
-
-
- QFrame {
+
+
-
+
+ Method 1
+
+
+ -
+
+ Method 2
+
+
+
+
+ -
+
+
+ Region Code (Should be 2 letters)
+
+
+
+ -
+
+
+ Region Code (Default: US)
+
+
+
+ -
+
+
+ false
+
+
+ QFrame {
color: #414141;
}
-
-
- QFrame::Plain
-
-
- Qt::Horizontal
-
+
+
+ QFrame::Plain
+
+
+ Qt::Horizontal
+
+
+
+
-
@@ -2574,44 +2654,157 @@ QComboBox QAbstractItemView::item:hover {
-
-
-
- Language Code (not needed for English)
-
-
-
- -
-
-
- Language Code (i.e. en)
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- In order to download the AI model, you must spoof the device model. This will break Face ID until
+
+
+
+ 0
+
+
+ 5
+
+
+ 0
+
+
+ 5
+
+
-
+
+
+ Language Code (not needed for English)
+
+
+
+ -
+
+
+ Language Code (i.e. en)
+
+
+
+ -
+
+
+ QFrame {
+ color: #414141;
+}
+
+
+ QFrame::Plain
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ In order to download the AI model, you must spoof the device model. This will break Face ID until
you revert.
-Once the model has downloaded, disable "Spoof Device Model" and click the "Apply Tweaks"
+Once the model has downloaded, set "Spoofed Device Model" to "None" and click the "Apply Tweaks"
button on the "Apply" page again to fix Face ID.
-
-
- Qt::AutoText
-
-
-
- -
-
-
- Spoof Device Model
-
+
+
+ Qt::AutoText
+
+
+
+ -
+
+
+ Spoofed Device Model
+
+
+
+ -
+
+
+
+ 325
+ 16777215
+
+
+
+ QComboBox {
+ background-color: #3b3b3b;
+ border: none;
+ color: #e8e8e8;
+ font-size: 14px;
+ padding-left: 8px;
+ border-radius: 8px;
+}
+
+QComboBox::drop-down {
+ image: url(:/icon/caret-down-fill.svg);
+ icon-size: 16px;
+ subcontrol-position: right center;
+ margin-right: 8px;
+}
+
+QComboBox QAbstractItemView {
+ background-color: #3b3b3b;
+ outline: none;
+ margin-top: 1px;
+}
+
+QComboBox QAbstractItemView::item {
+ background-color: #3b3b3b;
+ color: #e8e8e8;
+ padding-left: 8px;
+}
+
+QComboBox QAbstractItemView::item:hover {
+ background-color: #535353;
+ color: #ffffff;
+}
+
+
+ None
+
+
+ 0
+
+
-
+
+ None
+
+
+ -
+
+ iPhone16,2 (iPhone 15 Pro)
+
+
+ -
+
+ iPhone17,4 (iPhone 16 Plus)
+
+
+ -
+
+ iPhone17,3 (iPhone 16 Pro)
+
+
+ -
+
+ iPhone17,2 (iPhone 16 Pro Max)
+
+
+ -
+
+ iPad16,3 (iPad Pro M4)
+
+
+
+
+
-
@@ -3705,6 +3898,78 @@ button on the "Apply" page again to fix Face ID.
+ -
+
+
+ Skip Setup * (non-exploit files only)
+
+
+ true
+
+
+
+ -
+
+
+ Auto Reboot After Applying
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Fixed
+
+
+
+ 20
+ 10
+
+
+
+
+ -
+
+
+ * Note: Skip Setup may cause issues with configuration profiles. Turn it off if you need that.
+
+
+
+ -
+
+
+ QFrame {
+ color: #414141;
+}
+
+
+ QFrame::Plain
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ 0
+
+
-
+
+
+ Reset Device Pairing
+
+
+
+
+
-
diff --git a/qt/mainwindow_ui.py b/qt/mainwindow_ui.py
index 43f1fe7..bc66a27 100644
--- a/qt/mainwindow_ui.py
+++ b/qt/mainwindow_ui.py
@@ -953,7 +953,7 @@ def setupUi(self, Nugget):
self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
self.gestaltPageContent = QWidget(self.scrollAreaWidgetContents)
self.gestaltPageContent.setObjectName(u"gestaltPageContent")
- self.gestaltPageContent.setEnabled(False)
+ self.gestaltPageContent.setEnabled(True)
self.verticalLayout_8 = QVBoxLayout(self.gestaltPageContent)
self.verticalLayout_8.setObjectName(u"verticalLayout_8")
self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
@@ -1049,14 +1049,6 @@ def setupUi(self, Nugget):
self.verticalLayout_8.addWidget(self.parallaxChk)
- self.horizontalWidget4 = QWidget(self.gestaltPageContent)
- self.horizontalWidget4.setObjectName(u"horizontalWidget4")
- self.horizontalLayout_10 = QHBoxLayout(self.horizontalWidget4)
- self.horizontalLayout_10.setObjectName(u"horizontalLayout_10")
- self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0)
-
- self.verticalLayout_8.addWidget(self.horizontalWidget4)
-
self.line_7 = QFrame(self.gestaltPageContent)
self.line_7.setObjectName(u"line_7")
self.line_7.setStyleSheet(u"QFrame {\n"
@@ -1137,16 +1129,72 @@ def setupUi(self, Nugget):
self.verticalLayout_8.addWidget(self.collisionSOSChk)
- self.sleepApneaChk = QCheckBox(self.gestaltPageContent)
- self.sleepApneaChk.setObjectName(u"sleepApneaChk")
-
- self.verticalLayout_8.addWidget(self.sleepApneaChk)
-
self.aodChk = QCheckBox(self.gestaltPageContent)
self.aodChk.setObjectName(u"aodChk")
self.verticalLayout_8.addWidget(self.aodChk)
+ self.line_22 = QFrame(self.gestaltPageContent)
+ self.line_22.setObjectName(u"line_22")
+ self.line_22.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_22.setFrameShadow(QFrame.Plain)
+ self.line_22.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_8.addWidget(self.line_22)
+
+ self.horizontalLayout_11 = QHBoxLayout()
+ self.horizontalLayout_11.setObjectName(u"horizontalLayout_11")
+ self.horizontalLayout_11.setContentsMargins(-1, -1, -1, 0)
+ self.label_10 = QLabel(self.gestaltPageContent)
+ self.label_10.setObjectName(u"label_10")
+ self.label_10.setEnabled(True)
+
+ self.horizontalLayout_11.addWidget(self.label_10)
+
+ self.addGestaltKeyBtn = QToolButton(self.gestaltPageContent)
+ self.addGestaltKeyBtn.setObjectName(u"addGestaltKeyBtn")
+ self.addGestaltKeyBtn.setEnabled(True)
+ icon18 = QIcon()
+ icon18.addFile(u":/icon/plus.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.addGestaltKeyBtn.setIcon(icon18)
+ self.addGestaltKeyBtn.setCheckable(False)
+ self.addGestaltKeyBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.horizontalLayout_11.addWidget(self.addGestaltKeyBtn)
+
+
+ self.verticalLayout_8.addLayout(self.horizontalLayout_11)
+
+ self.label_12 = QLabel(self.gestaltPageContent)
+ self.label_12.setObjectName(u"label_12")
+
+ self.verticalLayout_8.addWidget(self.label_12)
+
+ self.line_23 = QFrame(self.gestaltPageContent)
+ self.line_23.setObjectName(u"line_23")
+ self.line_23.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_23.setFrameShadow(QFrame.Plain)
+ self.line_23.setFrameShape(QFrame.HLine)
+
+ self.verticalLayout_8.addWidget(self.line_23)
+
+ self.customKeysCnt = QWidget(self.gestaltPageContent)
+ self.customKeysCnt.setObjectName(u"customKeysCnt")
+ self.customKeysCnt.setEnabled(True)
+ self.verticalLayout_32 = QVBoxLayout(self.customKeysCnt)
+ self.verticalLayout_32.setObjectName(u"verticalLayout_32")
+ self.customKeysLayout = QVBoxLayout()
+ self.customKeysLayout.setObjectName(u"customKeysLayout")
+
+ self.verticalLayout_32.addLayout(self.customKeysLayout)
+
+
+ self.verticalLayout_8.addWidget(self.customKeysCnt)
+
self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_8.addItem(self.verticalSpacer_3)
@@ -1326,23 +1374,28 @@ def setupUi(self, Nugget):
self.verticalLayout_17.addWidget(self.line_13)
- self.euEnablerEnabledChk = QCheckBox(self.euEnablerPage)
- self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk")
-
- self.verticalLayout_17.addWidget(self.euEnablerEnabledChk)
-
self.euEnablerPageContent = QWidget(self.euEnablerPage)
self.euEnablerPageContent.setObjectName(u"euEnablerPageContent")
self.euEnablerPageContent.setEnabled(False)
self.verticalLayout_16 = QVBoxLayout(self.euEnablerPageContent)
self.verticalLayout_16.setObjectName(u"verticalLayout_16")
self.verticalLayout_16.setContentsMargins(0, 0, 0, 0)
- self.label_5 = QLabel(self.euEnablerPageContent)
+ self.euEnablerContent = QWidget(self.euEnablerPageContent)
+ self.euEnablerContent.setObjectName(u"euEnablerContent")
+ self.verticalLayout_36 = QVBoxLayout(self.euEnablerContent)
+ self.verticalLayout_36.setObjectName(u"verticalLayout_36")
+ self.verticalLayout_36.setContentsMargins(0, 0, 0, 0)
+ self.euEnablerEnabledChk = QCheckBox(self.euEnablerContent)
+ self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk")
+
+ self.verticalLayout_36.addWidget(self.euEnablerEnabledChk)
+
+ self.label_5 = QLabel(self.euEnablerContent)
self.label_5.setObjectName(u"label_5")
- self.verticalLayout_16.addWidget(self.label_5)
+ self.verticalLayout_36.addWidget(self.label_5)
- self.methodChoiceDrp = QComboBox(self.euEnablerPageContent)
+ self.methodChoiceDrp = QComboBox(self.euEnablerContent)
self.methodChoiceDrp.addItem("")
self.methodChoiceDrp.addItem("")
self.methodChoiceDrp.setObjectName(u"methodChoiceDrp")
@@ -1380,19 +1433,19 @@ def setupUi(self, Nugget):
" color: #ffffff;\n"
"}")
- self.verticalLayout_16.addWidget(self.methodChoiceDrp)
+ self.verticalLayout_36.addWidget(self.methodChoiceDrp)
- self.label_6 = QLabel(self.euEnablerPageContent)
+ self.label_6 = QLabel(self.euEnablerContent)
self.label_6.setObjectName(u"label_6")
- self.verticalLayout_16.addWidget(self.label_6)
+ self.verticalLayout_36.addWidget(self.label_6)
- self.regionCodeTxt = QLineEdit(self.euEnablerPageContent)
+ self.regionCodeTxt = QLineEdit(self.euEnablerContent)
self.regionCodeTxt.setObjectName(u"regionCodeTxt")
- self.verticalLayout_16.addWidget(self.regionCodeTxt)
+ self.verticalLayout_36.addWidget(self.regionCodeTxt)
- self.line_16 = QFrame(self.euEnablerPageContent)
+ self.line_16 = QFrame(self.euEnablerContent)
self.line_16.setObjectName(u"line_16")
self.line_16.setEnabled(False)
self.line_16.setStyleSheet(u"QFrame {\n"
@@ -1401,35 +1454,100 @@ def setupUi(self, Nugget):
self.line_16.setFrameShadow(QFrame.Plain)
self.line_16.setFrameShape(QFrame.HLine)
- self.verticalLayout_16.addWidget(self.line_16)
+ self.verticalLayout_36.addWidget(self.line_16)
+
+
+ self.verticalLayout_16.addWidget(self.euEnablerContent)
self.enableAIChk = QCheckBox(self.euEnablerPageContent)
self.enableAIChk.setObjectName(u"enableAIChk")
self.verticalLayout_16.addWidget(self.enableAIChk)
- self.languageLbl = QLabel(self.euEnablerPageContent)
+ self.aiEnablerContent = QWidget(self.euEnablerPageContent)
+ self.aiEnablerContent.setObjectName(u"aiEnablerContent")
+ self.verticalLayout_34 = QVBoxLayout(self.aiEnablerContent)
+ self.verticalLayout_34.setObjectName(u"verticalLayout_34")
+ self.verticalLayout_34.setContentsMargins(0, 5, 0, 5)
+ self.languageLbl = QLabel(self.aiEnablerContent)
self.languageLbl.setObjectName(u"languageLbl")
- self.verticalLayout_16.addWidget(self.languageLbl)
+ self.verticalLayout_34.addWidget(self.languageLbl)
- self.languageTxt = QLineEdit(self.euEnablerPageContent)
+ self.languageTxt = QLineEdit(self.aiEnablerContent)
self.languageTxt.setObjectName(u"languageTxt")
- self.verticalLayout_16.addWidget(self.languageTxt)
+ self.verticalLayout_34.addWidget(self.languageTxt)
+
+ self.line_21 = QFrame(self.aiEnablerContent)
+ self.line_21.setObjectName(u"line_21")
+ self.line_21.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_21.setFrameShadow(QFrame.Plain)
+ self.line_21.setFrameShape(QFrame.HLine)
- self.aiInfoLabel = QLabel(self.euEnablerPageContent)
+ self.verticalLayout_34.addWidget(self.line_21)
+
+ self.aiInfoLabel = QLabel(self.aiEnablerContent)
self.aiInfoLabel.setObjectName(u"aiInfoLabel")
sizePolicy1.setHeightForWidth(self.aiInfoLabel.sizePolicy().hasHeightForWidth())
self.aiInfoLabel.setSizePolicy(sizePolicy1)
self.aiInfoLabel.setTextFormat(Qt.AutoText)
- self.verticalLayout_16.addWidget(self.aiInfoLabel)
+ self.verticalLayout_34.addWidget(self.aiInfoLabel)
- self.spoofModelChk = QCheckBox(self.euEnablerPageContent)
- self.spoofModelChk.setObjectName(u"spoofModelChk")
+ self.label_8 = QLabel(self.aiEnablerContent)
+ self.label_8.setObjectName(u"label_8")
- self.verticalLayout_16.addWidget(self.spoofModelChk)
+ self.verticalLayout_34.addWidget(self.label_8)
+
+ self.spoofedModelDrp = QComboBox(self.aiEnablerContent)
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.setObjectName(u"spoofedModelDrp")
+ self.spoofedModelDrp.setMaximumSize(QSize(325, 16777215))
+ self.spoofedModelDrp.setStyleSheet(u"QComboBox {\n"
+" background-color: #3b3b3b;\n"
+" border: none;\n"
+" color: #e8e8e8;\n"
+" font-size: 14px;\n"
+" padding-left: 8px;\n"
+" border-radius: 8px;\n"
+"}\n"
+"\n"
+"QComboBox::drop-down {\n"
+" image: url(:/icon/caret-down-fill.svg);\n"
+" icon-size: 16px;\n"
+" subcontrol-position: right center;\n"
+" margin-right: 8px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView {\n"
+" background-color: #3b3b3b;\n"
+" outline: none;\n"
+" margin-top: 1px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView::item {\n"
+" background-color: #3b3b3b;\n"
+" color: #e8e8e8;\n"
+" padding-left: 8px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView::item:hover {\n"
+" background-color: #535353;\n"
+" color: #ffffff;\n"
+"}")
+
+ self.verticalLayout_34.addWidget(self.spoofedModelDrp)
+
+
+ self.verticalLayout_16.addWidget(self.aiEnablerContent)
self.verticalSpacer_7 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
@@ -1839,9 +1957,9 @@ def setupUi(self, Nugget):
self.horizontalLayout_7.setContentsMargins(-1, 10, -1, 0)
self.chooseGestaltBtn = QToolButton(self.verticalWidget2)
self.chooseGestaltBtn.setObjectName(u"chooseGestaltBtn")
- icon18 = QIcon()
- icon18.addFile(u":/icon/folder.svg", QSize(), QIcon.Normal, QIcon.Off)
- self.chooseGestaltBtn.setIcon(icon18)
+ icon19 = QIcon()
+ icon19.addFile(u":/icon/folder.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.chooseGestaltBtn.setIcon(icon19)
self.chooseGestaltBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_7.addWidget(self.chooseGestaltBtn)
@@ -1849,12 +1967,12 @@ def setupUi(self, Nugget):
self.verticalLayout_24.addLayout(self.horizontalLayout_7)
- self.horizontalWidget5 = QWidget(self.verticalWidget2)
- self.horizontalWidget5.setObjectName(u"horizontalWidget5")
- self.horizontalLayout_17 = QHBoxLayout(self.horizontalWidget5)
+ self.horizontalWidget4 = QWidget(self.verticalWidget2)
+ self.horizontalWidget4.setObjectName(u"horizontalWidget4")
+ self.horizontalLayout_17 = QHBoxLayout(self.horizontalWidget4)
self.horizontalLayout_17.setObjectName(u"horizontalLayout_17")
self.horizontalLayout_17.setContentsMargins(0, 0, 0, 0)
- self.applyTweaksBtn = QToolButton(self.horizontalWidget5)
+ self.applyTweaksBtn = QToolButton(self.horizontalWidget4)
self.applyTweaksBtn.setObjectName(u"applyTweaksBtn")
self.applyTweaksBtn.setIcon(icon9)
self.applyTweaksBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
@@ -1862,7 +1980,7 @@ def setupUi(self, Nugget):
self.horizontalLayout_17.addWidget(self.applyTweaksBtn)
- self.verticalLayout_24.addWidget(self.horizontalWidget5)
+ self.verticalLayout_24.addWidget(self.horizontalWidget4)
self.statusLbl = QLabel(self.verticalWidget2)
self.statusLbl.setObjectName(u"statusLbl")
@@ -1884,21 +2002,21 @@ def setupUi(self, Nugget):
self.verticalLayout_24.addItem(self.verticalSpacer_2)
- self.horizontalWidget6 = QWidget(self.verticalWidget2)
- self.horizontalWidget6.setObjectName(u"horizontalWidget6")
- self.horizontalLayout_25 = QHBoxLayout(self.horizontalWidget6)
+ self.horizontalWidget5 = QWidget(self.verticalWidget2)
+ self.horizontalWidget5.setObjectName(u"horizontalWidget5")
+ self.horizontalLayout_25 = QHBoxLayout(self.horizontalWidget5)
self.horizontalLayout_25.setObjectName(u"horizontalLayout_25")
self.horizontalLayout_25.setContentsMargins(0, 0, 0, 0)
self.horizontalSpacer_14 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_25.addItem(self.horizontalSpacer_14)
- self.removeTweaksBtn = QToolButton(self.horizontalWidget6)
+ self.removeTweaksBtn = QToolButton(self.horizontalWidget5)
self.removeTweaksBtn.setObjectName(u"removeTweaksBtn")
self.horizontalLayout_25.addWidget(self.removeTweaksBtn)
- self.resetGestaltBtn = QToolButton(self.horizontalWidget6)
+ self.resetGestaltBtn = QToolButton(self.horizontalWidget5)
self.resetGestaltBtn.setObjectName(u"resetGestaltBtn")
self.horizontalLayout_25.addWidget(self.resetGestaltBtn)
@@ -1908,7 +2026,7 @@ def setupUi(self, Nugget):
self.horizontalLayout_25.addItem(self.horizontalSpacer_16)
- self.verticalLayout_24.addWidget(self.horizontalWidget6)
+ self.verticalLayout_24.addWidget(self.horizontalWidget5)
self.verticalLayout_6.addWidget(self.verticalWidget2)
@@ -1988,6 +2106,48 @@ def setupUi(self, Nugget):
self._21.addWidget(self.allowWifiApplyingChk)
+ self.skipSetupChk = QCheckBox(self.settingsPageContent)
+ self.skipSetupChk.setObjectName(u"skipSetupChk")
+ self.skipSetupChk.setChecked(True)
+
+ self._21.addWidget(self.skipSetupChk)
+
+ self.autoRebootChk = QCheckBox(self.settingsPageContent)
+ self.autoRebootChk.setObjectName(u"autoRebootChk")
+ self.autoRebootChk.setChecked(True)
+
+ self._21.addWidget(self.autoRebootChk)
+
+ self.verticalSpacer_21 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
+
+ self._21.addItem(self.verticalSpacer_21)
+
+ self.label_15 = QLabel(self.settingsPageContent)
+ self.label_15.setObjectName(u"label_15")
+
+ self._21.addWidget(self.label_15)
+
+ self.line_20 = QFrame(self.settingsPageContent)
+ self.line_20.setObjectName(u"line_20")
+ self.line_20.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_20.setFrameShadow(QFrame.Plain)
+ self.line_20.setFrameShape(QFrame.HLine)
+
+ self._21.addWidget(self.line_20)
+
+ self.deviceSettingsBtns = QHBoxLayout()
+ self.deviceSettingsBtns.setObjectName(u"deviceSettingsBtns")
+ self.deviceSettingsBtns.setContentsMargins(-1, -1, -1, 0)
+ self.resetPairBtn = QToolButton(self.settingsPageContent)
+ self.resetPairBtn.setObjectName(u"resetPairBtn")
+
+ self.deviceSettingsBtns.addWidget(self.resetPairBtn)
+
+
+ self._21.addLayout(self.deviceSettingsBtns)
+
self.verticalSpacer_51 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self._21.addItem(self.verticalSpacer_51)
@@ -2101,18 +2261,18 @@ def setupUi(self, Nugget):
self.verticalLayout_29.addWidget(self.longitudeTxt)
- self.horizontalWidget7 = QWidget(self.verticalWidget3)
- self.horizontalWidget7.setObjectName(u"horizontalWidget7")
- self.horizontalLayout_3 = QHBoxLayout(self.horizontalWidget7)
+ self.horizontalWidget6 = QWidget(self.verticalWidget3)
+ self.horizontalWidget6.setObjectName(u"horizontalWidget6")
+ self.horizontalLayout_3 = QHBoxLayout(self.horizontalWidget6)
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
- self.setLocationBtn = QToolButton(self.horizontalWidget7)
+ self.setLocationBtn = QToolButton(self.horizontalWidget6)
self.setLocationBtn.setObjectName(u"setLocationBtn")
self.horizontalLayout_3.addWidget(self.setLocationBtn)
- self.verticalLayout_29.addWidget(self.horizontalWidget7)
+ self.verticalLayout_29.addWidget(self.horizontalWidget6)
self.horizontalWidget_22 = QWidget(self.verticalWidget3)
self.horizontalWidget_22.setObjectName(u"horizontalWidget_22")
@@ -2159,9 +2319,9 @@ def setupUi(self, Nugget):
" padding-right: 5px;\n"
" border-radius: 0px;\n"
"}")
- icon19 = QIcon()
- icon19.addFile(u":/icon/pencil.svg", QSize(), QIcon.Normal, QIcon.Off)
- self.toolButton_12.setIcon(icon19)
+ icon20 = QIcon()
+ icon20.addFile(u":/icon/pencil.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.toolButton_12.setIcon(icon20)
self.toolButton_12.setIconSize(QSize(25, 25))
self.horizontalLayout_22.addWidget(self.toolButton_12)
@@ -2222,9 +2382,9 @@ def setupUi(self, Nugget):
self.importOperationBtn = QToolButton(self.customOperationsPageContent)
self.importOperationBtn.setObjectName(u"importOperationBtn")
self.importOperationBtn.setEnabled(True)
- icon20 = QIcon()
- icon20.addFile(u":/icon/import.svg", QSize(), QIcon.Normal, QIcon.Off)
- self.importOperationBtn.setIcon(icon20)
+ icon21 = QIcon()
+ icon21.addFile(u":/icon/import.svg", QSize(), QIcon.Normal, QIcon.Off)
+ self.importOperationBtn.setIcon(icon21)
self.importOperationBtn.setIconSize(QSize(20, 20))
self.importOperationBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
@@ -2236,9 +2396,7 @@ def setupUi(self, Nugget):
sizePolicy2.setHeightForWidth(self.newOperationBtn.sizePolicy().hasHeightForWidth())
self.newOperationBtn.setSizePolicy(sizePolicy2)
self.newOperationBtn.setMinimumSize(QSize(0, 35))
- icon21 = QIcon()
- icon21.addFile(u":/icon/plus.svg", QSize(), QIcon.Normal, QIcon.Off)
- self.newOperationBtn.setIcon(icon21)
+ self.newOperationBtn.setIcon(icon18)
self.newOperationBtn.setIconSize(QSize(16, 16))
self.newOperationBtn.setCheckable(False)
self.newOperationBtn.setAutoExclusive(True)
@@ -2379,12 +2537,12 @@ def setupUi(self, Nugget):
self.horizontalLayout_23.addItem(self.horizontalSpacer_10)
- self.horizontalWidget8 = QWidget(self.horizontalWidget_8)
- self.horizontalWidget8.setObjectName(u"horizontalWidget8")
- self.horizontalLayout_26 = QHBoxLayout(self.horizontalWidget8)
+ self.horizontalWidget7 = QWidget(self.horizontalWidget_8)
+ self.horizontalWidget7.setObjectName(u"horizontalWidget7")
+ self.horizontalLayout_26 = QHBoxLayout(self.horizontalWidget7)
self.horizontalLayout_26.setObjectName(u"horizontalLayout_26")
self.horizontalLayout_26.setContentsMargins(0, 0, 0, 0)
- self.importThemeBtn = QToolButton(self.horizontalWidget8)
+ self.importThemeBtn = QToolButton(self.horizontalWidget7)
self.importThemeBtn.setObjectName(u"importThemeBtn")
self.importThemeBtn.setEnabled(False)
self.importThemeBtn.setStyleSheet(u"QToolButton {\n"
@@ -2393,13 +2551,13 @@ def setupUi(self, Nugget):
self.horizontalLayout_26.addWidget(self.importThemeBtn)
- self.importThemeFolderBtn = QToolButton(self.horizontalWidget8)
+ self.importThemeFolderBtn = QToolButton(self.horizontalWidget7)
self.importThemeFolderBtn.setObjectName(u"importThemeFolderBtn")
- self.importThemeFolderBtn.setIcon(icon18)
+ self.importThemeFolderBtn.setIcon(icon19)
self.horizontalLayout_26.addWidget(self.importThemeFolderBtn)
- self.importThemeZipBtn = QToolButton(self.horizontalWidget8)
+ self.importThemeZipBtn = QToolButton(self.horizontalWidget7)
self.importThemeZipBtn.setObjectName(u"importThemeZipBtn")
icon22 = QIcon()
icon22.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Normal, QIcon.Off)
@@ -2408,7 +2566,7 @@ def setupUi(self, Nugget):
self.horizontalLayout_26.addWidget(self.importThemeZipBtn)
- self.horizontalLayout_23.addWidget(self.horizontalWidget8)
+ self.horizontalLayout_23.addWidget(self.horizontalWidget7)
self.verticalLayout_23.addWidget(self.horizontalWidget_8)
@@ -2458,26 +2616,26 @@ def setupUi(self, Nugget):
self.verticalLayout_22.addItem(self.verticalSpacer_9)
- self.horizontalWidget9 = QWidget(self.themesPageContent)
- self.horizontalWidget9.setObjectName(u"horizontalWidget9")
- self.horizontalLayout_16 = QHBoxLayout(self.horizontalWidget9)
+ self.horizontalWidget8 = QWidget(self.themesPageContent)
+ self.horizontalWidget8.setObjectName(u"horizontalWidget8")
+ self.horizontalLayout_16 = QHBoxLayout(self.horizontalWidget8)
self.horizontalLayout_16.setObjectName(u"horizontalLayout_16")
self.horizontalLayout_16.setContentsMargins(0, 0, 0, 0)
- self.hideNamesBtn = QToolButton(self.horizontalWidget9)
+ self.hideNamesBtn = QToolButton(self.horizontalWidget8)
self.hideNamesBtn.setObjectName(u"hideNamesBtn")
sizePolicy2.setHeightForWidth(self.hideNamesBtn.sizePolicy().hasHeightForWidth())
self.hideNamesBtn.setSizePolicy(sizePolicy2)
self.horizontalLayout_16.addWidget(self.hideNamesBtn)
- self.borderAllBtn = QToolButton(self.horizontalWidget9)
+ self.borderAllBtn = QToolButton(self.horizontalWidget8)
self.borderAllBtn.setObjectName(u"borderAllBtn")
sizePolicy2.setHeightForWidth(self.borderAllBtn.sizePolicy().hasHeightForWidth())
self.borderAllBtn.setSizePolicy(sizePolicy2)
self.horizontalLayout_16.addWidget(self.borderAllBtn)
- self.addAllBtn = QToolButton(self.horizontalWidget9)
+ self.addAllBtn = QToolButton(self.horizontalWidget8)
self.addAllBtn.setObjectName(u"addAllBtn")
sizePolicy2.setHeightForWidth(self.addAllBtn.sizePolicy().hasHeightForWidth())
self.addAllBtn.setSizePolicy(sizePolicy2)
@@ -2485,7 +2643,7 @@ def setupUi(self, Nugget):
self.horizontalLayout_16.addWidget(self.addAllBtn)
- self.verticalLayout_22.addWidget(self.horizontalWidget9)
+ self.verticalLayout_22.addWidget(self.horizontalWidget8)
self.verticalLayout_23.addWidget(self.themesPageContent)
@@ -2507,6 +2665,7 @@ def setupUi(self, Nugget):
self.devicePicker.setCurrentIndex(-1)
self.pages.setCurrentIndex(0)
self.dynamicIslandDrp.setCurrentIndex(0)
+ self.spoofedModelDrp.setCurrentIndex(0)
QMetaObject.connectSlotsByName(Nugget)
@@ -2559,7 +2718,7 @@ def retranslateUi(self, Nugget):
self.toolButton_15.setText(QCoreApplication.translate("Nugget", u"Additional Thanks", None))
self.libiBtn.setText(QCoreApplication.translate("Nugget", u"pymobiledevice3", None))
self.qtBtn.setText(QCoreApplication.translate("Nugget", u"Qt Creator", None))
- self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.0", None))
+ self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 4.0", None))
self.statusBarLbl.setText(QCoreApplication.translate("Nugget", u"Mobile Gestalt", None))
self.label_9.setText(QCoreApplication.translate("Nugget", u"Device Subtype Preset", None))
self.dynamicIslandDrp.setItemText(0, QCoreApplication.translate("Nugget", u"None", None))
@@ -2589,8 +2748,11 @@ def retranslateUi(self, Nugget):
self.internalInstallChk.setText(QCoreApplication.translate("Nugget", u"Set as Apple Internal Install (ie Metal HUD in any app)", None))
self.internalStorageChk.setText(QCoreApplication.translate("Nugget", u"Enable Internal Storage (WARNING: risky for some devices, mainly iPads)", None))
self.collisionSOSChk.setText(QCoreApplication.translate("Nugget", u"Enable Collision SOS", None))
- self.sleepApneaChk.setText(QCoreApplication.translate("Nugget", u"Enable Sleep Apnea (real) [for Apple Watches]", None))
self.aodChk.setText(QCoreApplication.translate("Nugget", u"Enable Always On Display", None))
+ self.label_10.setText(QCoreApplication.translate("Nugget", u"Custom Gestalt Keys", None))
+ self.addGestaltKeyBtn.setText(QCoreApplication.translate("Nugget", u" Add Key", None))
+ self.label_12.setText(QCoreApplication.translate("Nugget", u"Warning: Using this feature incorrectly can lead to bootloops and data loss. Only use if you know\n"
+"what you are doing.", None))
self.internalOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Feature Flags", None))
self.clockAnimChk.setText(QCoreApplication.translate("Nugget", u"Enable Lockscreen Clock Animation", None))
self.lockscreenChk.setText(QCoreApplication.translate("Nugget", u"Enable Duplicate Lockscreen Button and Lockscreen Quickswitch", None))
@@ -2610,9 +2772,17 @@ def retranslateUi(self, Nugget):
self.aiInfoLabel.setText(QCoreApplication.translate("Nugget", u"In order to download the AI model, you must spoof the device model. This will break Face ID until\n"
"you revert.\n"
"\n"
-"Once the model has downloaded, disable \"Spoof Device Model\" and click the \"Apply Tweaks\"\n"
+"Once the model has downloaded, set \"Spoofed Device Model\" to \"None\" and click the \"Apply Tweaks\"\n"
"button on the \"Apply\" page again to fix Face ID.", None))
- self.spoofModelChk.setText(QCoreApplication.translate("Nugget", u"Spoof Device Model", None))
+ self.label_8.setText(QCoreApplication.translate("Nugget", u"Spoofed Device Model", None))
+ self.spoofedModelDrp.setItemText(0, QCoreApplication.translate("Nugget", u"None", None))
+ self.spoofedModelDrp.setItemText(1, QCoreApplication.translate("Nugget", u"iPhone16,2 (iPhone 15 Pro)", None))
+ self.spoofedModelDrp.setItemText(2, QCoreApplication.translate("Nugget", u"iPhone17,4 (iPhone 16 Plus)", None))
+ self.spoofedModelDrp.setItemText(3, QCoreApplication.translate("Nugget", u"iPhone17,3 (iPhone 16 Pro)", None))
+ self.spoofedModelDrp.setItemText(4, QCoreApplication.translate("Nugget", u"iPhone17,2 (iPhone 16 Pro Max)", None))
+ self.spoofedModelDrp.setItemText(5, QCoreApplication.translate("Nugget", u"iPad16,3 (iPad Pro M4)", None))
+
+ self.spoofedModelDrp.setCurrentText(QCoreApplication.translate("Nugget", u"None", None))
self.springboardOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Springboard Options", None))
self.label_13.setText(QCoreApplication.translate("Nugget", u"Lock Screen Footnote Text", None))
self.footnoteTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Footnote Text", None))
@@ -2648,6 +2818,10 @@ def retranslateUi(self, Nugget):
self.resetGestaltBtn.setText(QCoreApplication.translate("Nugget", u"Reset Mobile Gestalt", None))
self.springboardOptionsLbl1.setText(QCoreApplication.translate("Nugget", u"Nugget Settings", None))
self.allowWifiApplyingChk.setText(QCoreApplication.translate("Nugget", u"Allow Applying Over WiFi", None))
+ self.skipSetupChk.setText(QCoreApplication.translate("Nugget", u"Skip Setup * (non-exploit files only)", None))
+ self.autoRebootChk.setText(QCoreApplication.translate("Nugget", u"Auto Reboot After Applying", None))
+ self.label_15.setText(QCoreApplication.translate("Nugget", u"* Note: Skip Setup may cause issues with configuration profiles. Turn it off if you need that.", None))
+ self.resetPairBtn.setText(QCoreApplication.translate("Nugget", u"Reset Device Pairing", None))
self.statusBarLbl_2.setText(QCoreApplication.translate("Nugget", u"Location Simulation", None))
self.label_4.setText("")
self.loadLocSimBtn.setText(QCoreApplication.translate("Nugget", u"Start Location Simulation", None))
diff --git a/qt/ui_mainwindow.py b/qt/ui_mainwindow.py
index 6cb1b07..dec553f 100644
--- a/qt/ui_mainwindow.py
+++ b/qt/ui_mainwindow.py
@@ -953,7 +953,7 @@ def setupUi(self, Nugget):
self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
self.gestaltPageContent = QWidget(self.scrollAreaWidgetContents)
self.gestaltPageContent.setObjectName(u"gestaltPageContent")
- self.gestaltPageContent.setEnabled(False)
+ self.gestaltPageContent.setEnabled(True)
self.verticalLayout_8 = QVBoxLayout(self.gestaltPageContent)
self.verticalLayout_8.setObjectName(u"verticalLayout_8")
self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
@@ -1049,14 +1049,6 @@ def setupUi(self, Nugget):
self.verticalLayout_8.addWidget(self.parallaxChk)
- self.horizontalWidget4 = QWidget(self.gestaltPageContent)
- self.horizontalWidget4.setObjectName(u"horizontalWidget4")
- self.horizontalLayout_10 = QHBoxLayout(self.horizontalWidget4)
- self.horizontalLayout_10.setObjectName(u"horizontalLayout_10")
- self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0)
-
- self.verticalLayout_8.addWidget(self.horizontalWidget4)
-
self.line_7 = QFrame(self.gestaltPageContent)
self.line_7.setObjectName(u"line_7")
self.line_7.setStyleSheet(u"QFrame {\n"
@@ -1137,16 +1129,72 @@ def setupUi(self, Nugget):
self.verticalLayout_8.addWidget(self.collisionSOSChk)
- self.sleepApneaChk = QCheckBox(self.gestaltPageContent)
- self.sleepApneaChk.setObjectName(u"sleepApneaChk")
-
- self.verticalLayout_8.addWidget(self.sleepApneaChk)
-
self.aodChk = QCheckBox(self.gestaltPageContent)
self.aodChk.setObjectName(u"aodChk")
self.verticalLayout_8.addWidget(self.aodChk)
+ self.line_22 = QFrame(self.gestaltPageContent)
+ self.line_22.setObjectName(u"line_22")
+ self.line_22.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_22.setFrameShadow(QFrame.Plain)
+ self.line_22.setFrameShape(QFrame.Shape.HLine)
+
+ self.verticalLayout_8.addWidget(self.line_22)
+
+ self.horizontalLayout_11 = QHBoxLayout()
+ self.horizontalLayout_11.setObjectName(u"horizontalLayout_11")
+ self.horizontalLayout_11.setContentsMargins(-1, -1, -1, 0)
+ self.label_10 = QLabel(self.gestaltPageContent)
+ self.label_10.setObjectName(u"label_10")
+ self.label_10.setEnabled(True)
+
+ self.horizontalLayout_11.addWidget(self.label_10)
+
+ self.addGestaltKeyBtn = QToolButton(self.gestaltPageContent)
+ self.addGestaltKeyBtn.setObjectName(u"addGestaltKeyBtn")
+ self.addGestaltKeyBtn.setEnabled(True)
+ icon18 = QIcon()
+ icon18.addFile(u":/icon/plus.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
+ self.addGestaltKeyBtn.setIcon(icon18)
+ self.addGestaltKeyBtn.setCheckable(False)
+ self.addGestaltKeyBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
+
+ self.horizontalLayout_11.addWidget(self.addGestaltKeyBtn)
+
+
+ self.verticalLayout_8.addLayout(self.horizontalLayout_11)
+
+ self.label_12 = QLabel(self.gestaltPageContent)
+ self.label_12.setObjectName(u"label_12")
+
+ self.verticalLayout_8.addWidget(self.label_12)
+
+ self.line_23 = QFrame(self.gestaltPageContent)
+ self.line_23.setObjectName(u"line_23")
+ self.line_23.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_23.setFrameShadow(QFrame.Plain)
+ self.line_23.setFrameShape(QFrame.Shape.HLine)
+
+ self.verticalLayout_8.addWidget(self.line_23)
+
+ self.customKeysCnt = QWidget(self.gestaltPageContent)
+ self.customKeysCnt.setObjectName(u"customKeysCnt")
+ self.customKeysCnt.setEnabled(True)
+ self.verticalLayout_32 = QVBoxLayout(self.customKeysCnt)
+ self.verticalLayout_32.setObjectName(u"verticalLayout_32")
+ self.customKeysLayout = QVBoxLayout()
+ self.customKeysLayout.setObjectName(u"customKeysLayout")
+
+ self.verticalLayout_32.addLayout(self.customKeysLayout)
+
+
+ self.verticalLayout_8.addWidget(self.customKeysCnt)
+
self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_8.addItem(self.verticalSpacer_3)
@@ -1326,23 +1374,28 @@ def setupUi(self, Nugget):
self.verticalLayout_17.addWidget(self.line_13)
- self.euEnablerEnabledChk = QCheckBox(self.euEnablerPage)
- self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk")
-
- self.verticalLayout_17.addWidget(self.euEnablerEnabledChk)
-
self.euEnablerPageContent = QWidget(self.euEnablerPage)
self.euEnablerPageContent.setObjectName(u"euEnablerPageContent")
self.euEnablerPageContent.setEnabled(False)
self.verticalLayout_16 = QVBoxLayout(self.euEnablerPageContent)
self.verticalLayout_16.setObjectName(u"verticalLayout_16")
self.verticalLayout_16.setContentsMargins(0, 0, 0, 0)
- self.label_5 = QLabel(self.euEnablerPageContent)
+ self.euEnablerContent = QWidget(self.euEnablerPageContent)
+ self.euEnablerContent.setObjectName(u"euEnablerContent")
+ self.verticalLayout_36 = QVBoxLayout(self.euEnablerContent)
+ self.verticalLayout_36.setObjectName(u"verticalLayout_36")
+ self.verticalLayout_36.setContentsMargins(0, 0, 0, 0)
+ self.euEnablerEnabledChk = QCheckBox(self.euEnablerContent)
+ self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk")
+
+ self.verticalLayout_36.addWidget(self.euEnablerEnabledChk)
+
+ self.label_5 = QLabel(self.euEnablerContent)
self.label_5.setObjectName(u"label_5")
- self.verticalLayout_16.addWidget(self.label_5)
+ self.verticalLayout_36.addWidget(self.label_5)
- self.methodChoiceDrp = QComboBox(self.euEnablerPageContent)
+ self.methodChoiceDrp = QComboBox(self.euEnablerContent)
self.methodChoiceDrp.addItem("")
self.methodChoiceDrp.addItem("")
self.methodChoiceDrp.setObjectName(u"methodChoiceDrp")
@@ -1380,19 +1433,19 @@ def setupUi(self, Nugget):
" color: #ffffff;\n"
"}")
- self.verticalLayout_16.addWidget(self.methodChoiceDrp)
+ self.verticalLayout_36.addWidget(self.methodChoiceDrp)
- self.label_6 = QLabel(self.euEnablerPageContent)
+ self.label_6 = QLabel(self.euEnablerContent)
self.label_6.setObjectName(u"label_6")
- self.verticalLayout_16.addWidget(self.label_6)
+ self.verticalLayout_36.addWidget(self.label_6)
- self.regionCodeTxt = QLineEdit(self.euEnablerPageContent)
+ self.regionCodeTxt = QLineEdit(self.euEnablerContent)
self.regionCodeTxt.setObjectName(u"regionCodeTxt")
- self.verticalLayout_16.addWidget(self.regionCodeTxt)
+ self.verticalLayout_36.addWidget(self.regionCodeTxt)
- self.line_16 = QFrame(self.euEnablerPageContent)
+ self.line_16 = QFrame(self.euEnablerContent)
self.line_16.setObjectName(u"line_16")
self.line_16.setEnabled(False)
self.line_16.setStyleSheet(u"QFrame {\n"
@@ -1401,35 +1454,100 @@ def setupUi(self, Nugget):
self.line_16.setFrameShadow(QFrame.Plain)
self.line_16.setFrameShape(QFrame.Shape.HLine)
- self.verticalLayout_16.addWidget(self.line_16)
+ self.verticalLayout_36.addWidget(self.line_16)
+
+
+ self.verticalLayout_16.addWidget(self.euEnablerContent)
self.enableAIChk = QCheckBox(self.euEnablerPageContent)
self.enableAIChk.setObjectName(u"enableAIChk")
self.verticalLayout_16.addWidget(self.enableAIChk)
- self.languageLbl = QLabel(self.euEnablerPageContent)
+ self.aiEnablerContent = QWidget(self.euEnablerPageContent)
+ self.aiEnablerContent.setObjectName(u"aiEnablerContent")
+ self.verticalLayout_34 = QVBoxLayout(self.aiEnablerContent)
+ self.verticalLayout_34.setObjectName(u"verticalLayout_34")
+ self.verticalLayout_34.setContentsMargins(0, 5, 0, 5)
+ self.languageLbl = QLabel(self.aiEnablerContent)
self.languageLbl.setObjectName(u"languageLbl")
- self.verticalLayout_16.addWidget(self.languageLbl)
+ self.verticalLayout_34.addWidget(self.languageLbl)
- self.languageTxt = QLineEdit(self.euEnablerPageContent)
+ self.languageTxt = QLineEdit(self.aiEnablerContent)
self.languageTxt.setObjectName(u"languageTxt")
- self.verticalLayout_16.addWidget(self.languageTxt)
+ self.verticalLayout_34.addWidget(self.languageTxt)
+
+ self.line_21 = QFrame(self.aiEnablerContent)
+ self.line_21.setObjectName(u"line_21")
+ self.line_21.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_21.setFrameShadow(QFrame.Plain)
+ self.line_21.setFrameShape(QFrame.Shape.HLine)
- self.aiInfoLabel = QLabel(self.euEnablerPageContent)
+ self.verticalLayout_34.addWidget(self.line_21)
+
+ self.aiInfoLabel = QLabel(self.aiEnablerContent)
self.aiInfoLabel.setObjectName(u"aiInfoLabel")
sizePolicy1.setHeightForWidth(self.aiInfoLabel.sizePolicy().hasHeightForWidth())
self.aiInfoLabel.setSizePolicy(sizePolicy1)
self.aiInfoLabel.setTextFormat(Qt.AutoText)
- self.verticalLayout_16.addWidget(self.aiInfoLabel)
+ self.verticalLayout_34.addWidget(self.aiInfoLabel)
- self.spoofModelChk = QCheckBox(self.euEnablerPageContent)
- self.spoofModelChk.setObjectName(u"spoofModelChk")
+ self.label_8 = QLabel(self.aiEnablerContent)
+ self.label_8.setObjectName(u"label_8")
- self.verticalLayout_16.addWidget(self.spoofModelChk)
+ self.verticalLayout_34.addWidget(self.label_8)
+
+ self.spoofedModelDrp = QComboBox(self.aiEnablerContent)
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.addItem("")
+ self.spoofedModelDrp.setObjectName(u"spoofedModelDrp")
+ self.spoofedModelDrp.setMaximumSize(QSize(325, 16777215))
+ self.spoofedModelDrp.setStyleSheet(u"QComboBox {\n"
+" background-color: #3b3b3b;\n"
+" border: none;\n"
+" color: #e8e8e8;\n"
+" font-size: 14px;\n"
+" padding-left: 8px;\n"
+" border-radius: 8px;\n"
+"}\n"
+"\n"
+"QComboBox::drop-down {\n"
+" image: url(:/icon/caret-down-fill.svg);\n"
+" icon-size: 16px;\n"
+" subcontrol-position: right center;\n"
+" margin-right: 8px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView {\n"
+" background-color: #3b3b3b;\n"
+" outline: none;\n"
+" margin-top: 1px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView::item {\n"
+" background-color: #3b3b3b;\n"
+" color: #e8e8e8;\n"
+" padding-left: 8px;\n"
+"}\n"
+"\n"
+"QComboBox QAbstractItemView::item:hover {\n"
+" background-color: #535353;\n"
+" color: #ffffff;\n"
+"}")
+
+ self.verticalLayout_34.addWidget(self.spoofedModelDrp)
+
+
+ self.verticalLayout_16.addWidget(self.aiEnablerContent)
self.verticalSpacer_7 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
@@ -1839,9 +1957,9 @@ def setupUi(self, Nugget):
self.horizontalLayout_7.setContentsMargins(-1, 10, -1, 0)
self.chooseGestaltBtn = QToolButton(self.verticalWidget2)
self.chooseGestaltBtn.setObjectName(u"chooseGestaltBtn")
- icon18 = QIcon()
- icon18.addFile(u":/icon/folder.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
- self.chooseGestaltBtn.setIcon(icon18)
+ icon19 = QIcon()
+ icon19.addFile(u":/icon/folder.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
+ self.chooseGestaltBtn.setIcon(icon19)
self.chooseGestaltBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_7.addWidget(self.chooseGestaltBtn)
@@ -1849,12 +1967,12 @@ def setupUi(self, Nugget):
self.verticalLayout_24.addLayout(self.horizontalLayout_7)
- self.horizontalWidget5 = QWidget(self.verticalWidget2)
- self.horizontalWidget5.setObjectName(u"horizontalWidget5")
- self.horizontalLayout_17 = QHBoxLayout(self.horizontalWidget5)
+ self.horizontalWidget4 = QWidget(self.verticalWidget2)
+ self.horizontalWidget4.setObjectName(u"horizontalWidget4")
+ self.horizontalLayout_17 = QHBoxLayout(self.horizontalWidget4)
self.horizontalLayout_17.setObjectName(u"horizontalLayout_17")
self.horizontalLayout_17.setContentsMargins(0, 0, 0, 0)
- self.applyTweaksBtn = QToolButton(self.horizontalWidget5)
+ self.applyTweaksBtn = QToolButton(self.horizontalWidget4)
self.applyTweaksBtn.setObjectName(u"applyTweaksBtn")
self.applyTweaksBtn.setIcon(icon9)
self.applyTweaksBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
@@ -1862,7 +1980,7 @@ def setupUi(self, Nugget):
self.horizontalLayout_17.addWidget(self.applyTweaksBtn)
- self.verticalLayout_24.addWidget(self.horizontalWidget5)
+ self.verticalLayout_24.addWidget(self.horizontalWidget4)
self.statusLbl = QLabel(self.verticalWidget2)
self.statusLbl.setObjectName(u"statusLbl")
@@ -1884,21 +2002,21 @@ def setupUi(self, Nugget):
self.verticalLayout_24.addItem(self.verticalSpacer_2)
- self.horizontalWidget6 = QWidget(self.verticalWidget2)
- self.horizontalWidget6.setObjectName(u"horizontalWidget6")
- self.horizontalLayout_25 = QHBoxLayout(self.horizontalWidget6)
+ self.horizontalWidget5 = QWidget(self.verticalWidget2)
+ self.horizontalWidget5.setObjectName(u"horizontalWidget5")
+ self.horizontalLayout_25 = QHBoxLayout(self.horizontalWidget5)
self.horizontalLayout_25.setObjectName(u"horizontalLayout_25")
self.horizontalLayout_25.setContentsMargins(0, 0, 0, 0)
self.horizontalSpacer_14 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_25.addItem(self.horizontalSpacer_14)
- self.removeTweaksBtn = QToolButton(self.horizontalWidget6)
+ self.removeTweaksBtn = QToolButton(self.horizontalWidget5)
self.removeTweaksBtn.setObjectName(u"removeTweaksBtn")
self.horizontalLayout_25.addWidget(self.removeTweaksBtn)
- self.resetGestaltBtn = QToolButton(self.horizontalWidget6)
+ self.resetGestaltBtn = QToolButton(self.horizontalWidget5)
self.resetGestaltBtn.setObjectName(u"resetGestaltBtn")
self.horizontalLayout_25.addWidget(self.resetGestaltBtn)
@@ -1908,7 +2026,7 @@ def setupUi(self, Nugget):
self.horizontalLayout_25.addItem(self.horizontalSpacer_16)
- self.verticalLayout_24.addWidget(self.horizontalWidget6)
+ self.verticalLayout_24.addWidget(self.horizontalWidget5)
self.verticalLayout_6.addWidget(self.verticalWidget2)
@@ -1988,6 +2106,48 @@ def setupUi(self, Nugget):
self._21.addWidget(self.allowWifiApplyingChk)
+ self.skipSetupChk = QCheckBox(self.settingsPageContent)
+ self.skipSetupChk.setObjectName(u"skipSetupChk")
+ self.skipSetupChk.setChecked(True)
+
+ self._21.addWidget(self.skipSetupChk)
+
+ self.autoRebootChk = QCheckBox(self.settingsPageContent)
+ self.autoRebootChk.setObjectName(u"autoRebootChk")
+ self.autoRebootChk.setChecked(True)
+
+ self._21.addWidget(self.autoRebootChk)
+
+ self.verticalSpacer_21 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed)
+
+ self._21.addItem(self.verticalSpacer_21)
+
+ self.label_15 = QLabel(self.settingsPageContent)
+ self.label_15.setObjectName(u"label_15")
+
+ self._21.addWidget(self.label_15)
+
+ self.line_20 = QFrame(self.settingsPageContent)
+ self.line_20.setObjectName(u"line_20")
+ self.line_20.setStyleSheet(u"QFrame {\n"
+" color: #414141;\n"
+"}")
+ self.line_20.setFrameShadow(QFrame.Plain)
+ self.line_20.setFrameShape(QFrame.Shape.HLine)
+
+ self._21.addWidget(self.line_20)
+
+ self.deviceSettingsBtns = QHBoxLayout()
+ self.deviceSettingsBtns.setObjectName(u"deviceSettingsBtns")
+ self.deviceSettingsBtns.setContentsMargins(-1, -1, -1, 0)
+ self.resetPairBtn = QToolButton(self.settingsPageContent)
+ self.resetPairBtn.setObjectName(u"resetPairBtn")
+
+ self.deviceSettingsBtns.addWidget(self.resetPairBtn)
+
+
+ self._21.addLayout(self.deviceSettingsBtns)
+
self.verticalSpacer_51 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self._21.addItem(self.verticalSpacer_51)
@@ -2101,18 +2261,18 @@ def setupUi(self, Nugget):
self.verticalLayout_29.addWidget(self.longitudeTxt)
- self.horizontalWidget7 = QWidget(self.verticalWidget3)
- self.horizontalWidget7.setObjectName(u"horizontalWidget7")
- self.horizontalLayout_3 = QHBoxLayout(self.horizontalWidget7)
+ self.horizontalWidget6 = QWidget(self.verticalWidget3)
+ self.horizontalWidget6.setObjectName(u"horizontalWidget6")
+ self.horizontalLayout_3 = QHBoxLayout(self.horizontalWidget6)
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
- self.setLocationBtn = QToolButton(self.horizontalWidget7)
+ self.setLocationBtn = QToolButton(self.horizontalWidget6)
self.setLocationBtn.setObjectName(u"setLocationBtn")
self.horizontalLayout_3.addWidget(self.setLocationBtn)
- self.verticalLayout_29.addWidget(self.horizontalWidget7)
+ self.verticalLayout_29.addWidget(self.horizontalWidget6)
self.horizontalWidget_22 = QWidget(self.verticalWidget3)
self.horizontalWidget_22.setObjectName(u"horizontalWidget_22")
@@ -2159,9 +2319,9 @@ def setupUi(self, Nugget):
" padding-right: 5px;\n"
" border-radius: 0px;\n"
"}")
- icon19 = QIcon()
- icon19.addFile(u":/icon/pencil.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
- self.toolButton_12.setIcon(icon19)
+ icon20 = QIcon()
+ icon20.addFile(u":/icon/pencil.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
+ self.toolButton_12.setIcon(icon20)
self.toolButton_12.setIconSize(QSize(25, 25))
self.horizontalLayout_22.addWidget(self.toolButton_12)
@@ -2222,9 +2382,9 @@ def setupUi(self, Nugget):
self.importOperationBtn = QToolButton(self.customOperationsPageContent)
self.importOperationBtn.setObjectName(u"importOperationBtn")
self.importOperationBtn.setEnabled(True)
- icon20 = QIcon()
- icon20.addFile(u":/icon/import.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
- self.importOperationBtn.setIcon(icon20)
+ icon21 = QIcon()
+ icon21.addFile(u":/icon/import.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
+ self.importOperationBtn.setIcon(icon21)
self.importOperationBtn.setIconSize(QSize(20, 20))
self.importOperationBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
@@ -2236,9 +2396,7 @@ def setupUi(self, Nugget):
sizePolicy2.setHeightForWidth(self.newOperationBtn.sizePolicy().hasHeightForWidth())
self.newOperationBtn.setSizePolicy(sizePolicy2)
self.newOperationBtn.setMinimumSize(QSize(0, 35))
- icon21 = QIcon()
- icon21.addFile(u":/icon/plus.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
- self.newOperationBtn.setIcon(icon21)
+ self.newOperationBtn.setIcon(icon18)
self.newOperationBtn.setIconSize(QSize(16, 16))
self.newOperationBtn.setCheckable(False)
self.newOperationBtn.setAutoExclusive(True)
@@ -2379,12 +2537,12 @@ def setupUi(self, Nugget):
self.horizontalLayout_23.addItem(self.horizontalSpacer_10)
- self.horizontalWidget8 = QWidget(self.horizontalWidget_8)
- self.horizontalWidget8.setObjectName(u"horizontalWidget8")
- self.horizontalLayout_26 = QHBoxLayout(self.horizontalWidget8)
+ self.horizontalWidget7 = QWidget(self.horizontalWidget_8)
+ self.horizontalWidget7.setObjectName(u"horizontalWidget7")
+ self.horizontalLayout_26 = QHBoxLayout(self.horizontalWidget7)
self.horizontalLayout_26.setObjectName(u"horizontalLayout_26")
self.horizontalLayout_26.setContentsMargins(0, 0, 0, 0)
- self.importThemeBtn = QToolButton(self.horizontalWidget8)
+ self.importThemeBtn = QToolButton(self.horizontalWidget7)
self.importThemeBtn.setObjectName(u"importThemeBtn")
self.importThemeBtn.setEnabled(False)
self.importThemeBtn.setStyleSheet(u"QToolButton {\n"
@@ -2393,13 +2551,13 @@ def setupUi(self, Nugget):
self.horizontalLayout_26.addWidget(self.importThemeBtn)
- self.importThemeFolderBtn = QToolButton(self.horizontalWidget8)
+ self.importThemeFolderBtn = QToolButton(self.horizontalWidget7)
self.importThemeFolderBtn.setObjectName(u"importThemeFolderBtn")
- self.importThemeFolderBtn.setIcon(icon18)
+ self.importThemeFolderBtn.setIcon(icon19)
self.horizontalLayout_26.addWidget(self.importThemeFolderBtn)
- self.importThemeZipBtn = QToolButton(self.horizontalWidget8)
+ self.importThemeZipBtn = QToolButton(self.horizontalWidget7)
self.importThemeZipBtn.setObjectName(u"importThemeZipBtn")
icon22 = QIcon()
icon22.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
@@ -2408,7 +2566,7 @@ def setupUi(self, Nugget):
self.horizontalLayout_26.addWidget(self.importThemeZipBtn)
- self.horizontalLayout_23.addWidget(self.horizontalWidget8)
+ self.horizontalLayout_23.addWidget(self.horizontalWidget7)
self.verticalLayout_23.addWidget(self.horizontalWidget_8)
@@ -2458,26 +2616,26 @@ def setupUi(self, Nugget):
self.verticalLayout_22.addItem(self.verticalSpacer_9)
- self.horizontalWidget9 = QWidget(self.themesPageContent)
- self.horizontalWidget9.setObjectName(u"horizontalWidget9")
- self.horizontalLayout_16 = QHBoxLayout(self.horizontalWidget9)
+ self.horizontalWidget8 = QWidget(self.themesPageContent)
+ self.horizontalWidget8.setObjectName(u"horizontalWidget8")
+ self.horizontalLayout_16 = QHBoxLayout(self.horizontalWidget8)
self.horizontalLayout_16.setObjectName(u"horizontalLayout_16")
self.horizontalLayout_16.setContentsMargins(0, 0, 0, 0)
- self.hideNamesBtn = QToolButton(self.horizontalWidget9)
+ self.hideNamesBtn = QToolButton(self.horizontalWidget8)
self.hideNamesBtn.setObjectName(u"hideNamesBtn")
sizePolicy2.setHeightForWidth(self.hideNamesBtn.sizePolicy().hasHeightForWidth())
self.hideNamesBtn.setSizePolicy(sizePolicy2)
self.horizontalLayout_16.addWidget(self.hideNamesBtn)
- self.borderAllBtn = QToolButton(self.horizontalWidget9)
+ self.borderAllBtn = QToolButton(self.horizontalWidget8)
self.borderAllBtn.setObjectName(u"borderAllBtn")
sizePolicy2.setHeightForWidth(self.borderAllBtn.sizePolicy().hasHeightForWidth())
self.borderAllBtn.setSizePolicy(sizePolicy2)
self.horizontalLayout_16.addWidget(self.borderAllBtn)
- self.addAllBtn = QToolButton(self.horizontalWidget9)
+ self.addAllBtn = QToolButton(self.horizontalWidget8)
self.addAllBtn.setObjectName(u"addAllBtn")
sizePolicy2.setHeightForWidth(self.addAllBtn.sizePolicy().hasHeightForWidth())
self.addAllBtn.setSizePolicy(sizePolicy2)
@@ -2485,7 +2643,7 @@ def setupUi(self, Nugget):
self.horizontalLayout_16.addWidget(self.addAllBtn)
- self.verticalLayout_22.addWidget(self.horizontalWidget9)
+ self.verticalLayout_22.addWidget(self.horizontalWidget8)
self.verticalLayout_23.addWidget(self.themesPageContent)
@@ -2507,6 +2665,7 @@ def setupUi(self, Nugget):
self.devicePicker.setCurrentIndex(-1)
self.pages.setCurrentIndex(0)
self.dynamicIslandDrp.setCurrentIndex(0)
+ self.spoofedModelDrp.setCurrentIndex(0)
QMetaObject.connectSlotsByName(Nugget)
@@ -2559,7 +2718,7 @@ def retranslateUi(self, Nugget):
self.toolButton_15.setText(QCoreApplication.translate("Nugget", u"Additional Thanks", None))
self.libiBtn.setText(QCoreApplication.translate("Nugget", u"pymobiledevice3", None))
self.qtBtn.setText(QCoreApplication.translate("Nugget", u"Qt Creator", None))
- self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.0", None))
+ self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 4.0", None))
self.statusBarLbl.setText(QCoreApplication.translate("Nugget", u"Mobile Gestalt", None))
self.label_9.setText(QCoreApplication.translate("Nugget", u"Device Subtype Preset", None))
self.dynamicIslandDrp.setItemText(0, QCoreApplication.translate("Nugget", u"None", None))
@@ -2589,8 +2748,11 @@ def retranslateUi(self, Nugget):
self.internalInstallChk.setText(QCoreApplication.translate("Nugget", u"Set as Apple Internal Install (ie Metal HUD in any app)", None))
self.internalStorageChk.setText(QCoreApplication.translate("Nugget", u"Enable Internal Storage (WARNING: risky for some devices, mainly iPads)", None))
self.collisionSOSChk.setText(QCoreApplication.translate("Nugget", u"Enable Collision SOS", None))
- self.sleepApneaChk.setText(QCoreApplication.translate("Nugget", u"Enable Sleep Apnea (real) [for Apple Watches]", None))
self.aodChk.setText(QCoreApplication.translate("Nugget", u"Enable Always On Display", None))
+ self.label_10.setText(QCoreApplication.translate("Nugget", u"Custom Gestalt Keys", None))
+ self.addGestaltKeyBtn.setText(QCoreApplication.translate("Nugget", u" Add Key", None))
+ self.label_12.setText(QCoreApplication.translate("Nugget", u"Warning: Using this feature incorrectly can lead to bootloops and data loss. Only use if you know\n"
+"what you are doing.", None))
self.internalOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Feature Flags", None))
self.clockAnimChk.setText(QCoreApplication.translate("Nugget", u"Enable Lockscreen Clock Animation", None))
self.lockscreenChk.setText(QCoreApplication.translate("Nugget", u"Enable Duplicate Lockscreen Button and Lockscreen Quickswitch", None))
@@ -2610,9 +2772,17 @@ def retranslateUi(self, Nugget):
self.aiInfoLabel.setText(QCoreApplication.translate("Nugget", u"In order to download the AI model, you must spoof the device model. This will break Face ID until\n"
"you revert.\n"
"\n"
-"Once the model has downloaded, disable \"Spoof Device Model\" and click the \"Apply Tweaks\"\n"
+"Once the model has downloaded, set \"Spoofed Device Model\" to \"None\" and click the \"Apply Tweaks\"\n"
"button on the \"Apply\" page again to fix Face ID.", None))
- self.spoofModelChk.setText(QCoreApplication.translate("Nugget", u"Spoof Device Model", None))
+ self.label_8.setText(QCoreApplication.translate("Nugget", u"Spoofed Device Model", None))
+ self.spoofedModelDrp.setItemText(0, QCoreApplication.translate("Nugget", u"None", None))
+ self.spoofedModelDrp.setItemText(1, QCoreApplication.translate("Nugget", u"iPhone16,2 (iPhone 15 Pro)", None))
+ self.spoofedModelDrp.setItemText(2, QCoreApplication.translate("Nugget", u"iPhone17,4 (iPhone 16 Plus)", None))
+ self.spoofedModelDrp.setItemText(3, QCoreApplication.translate("Nugget", u"iPhone17,3 (iPhone 16 Pro)", None))
+ self.spoofedModelDrp.setItemText(4, QCoreApplication.translate("Nugget", u"iPhone17,2 (iPhone 16 Pro Max)", None))
+ self.spoofedModelDrp.setItemText(5, QCoreApplication.translate("Nugget", u"iPad16,3 (iPad Pro M4)", None))
+
+ self.spoofedModelDrp.setCurrentText(QCoreApplication.translate("Nugget", u"None", None))
self.springboardOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Springboard Options", None))
self.label_13.setText(QCoreApplication.translate("Nugget", u"Lock Screen Footnote Text", None))
self.footnoteTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Footnote Text", None))
@@ -2648,6 +2818,10 @@ def retranslateUi(self, Nugget):
self.resetGestaltBtn.setText(QCoreApplication.translate("Nugget", u"Reset Mobile Gestalt", None))
self.springboardOptionsLbl1.setText(QCoreApplication.translate("Nugget", u"Nugget Settings", None))
self.allowWifiApplyingChk.setText(QCoreApplication.translate("Nugget", u"Allow Applying Over WiFi", None))
+ self.skipSetupChk.setText(QCoreApplication.translate("Nugget", u"Skip Setup * (non-exploit files only)", None))
+ self.autoRebootChk.setText(QCoreApplication.translate("Nugget", u"Auto Reboot After Applying", None))
+ self.label_15.setText(QCoreApplication.translate("Nugget", u"* Note: Skip Setup may cause issues with configuration profiles. Turn it off if you need that.", None))
+ self.resetPairBtn.setText(QCoreApplication.translate("Nugget", u"Reset Device Pairing", None))
self.statusBarLbl_2.setText(QCoreApplication.translate("Nugget", u"Location Simulation", None))
self.label_4.setText("")
self.loadLocSimBtn.setText(QCoreApplication.translate("Nugget", u"Start Location Simulation", None))
diff --git a/tweaks/custom_gestalt_tweaks.py b/tweaks/custom_gestalt_tweaks.py
new file mode 100644
index 0000000..446d84f
--- /dev/null
+++ b/tweaks/custom_gestalt_tweaks.py
@@ -0,0 +1,94 @@
+from enum import Enum
+from json import loads
+from .tweak_classes import MobileGestaltTweak
+
+class ValueType(Enum):
+ Integer = "Integer"
+ Float = "Float"
+ String = "String"
+ Array = "Array"
+ Dictionary = "Dictionary"
+
+ValueTypeStrings: list[ValueType] = [
+ ValueType.Integer.value, ValueType.Float.value,
+ ValueType.String.value,
+ ValueType.Array.value, ValueType.Dictionary.value
+]
+
+class CustomGestaltTweak:
+ def __init__(self, tweak: MobileGestaltTweak, value_type: ValueType):
+ self.tweak = tweak
+ self.value_type = value_type
+ self.deactivated = False
+
+ # TODO: change everything to not return the dict since it is passed by reference
+ def apply_tweak(self, plist: dict) -> dict:
+ if self.deactivated or self.tweak.key == "":
+ # key was not set, don't apply (maybe user added it by accident)
+ return plist
+ self.tweak.enabled = True
+ # set the value to be as the specified value type
+ if self.value_type == ValueType.Integer:
+ self.tweak.value = int(self.tweak.value)
+ elif self.value_type == ValueType.Float:
+ self.tweak.value = float(self.tweak.value)
+ elif self.value_type == ValueType.Array or self.value_type == ValueType.Dictionary:
+ # json convert string to array/dict
+ self.tweak.value = loads(self.tweak.value)
+
+ # apply the tweak after updating the value
+ plist = self.tweak.apply_tweak(plist)
+ return plist
+
+
+class CustomGestaltTweaks:
+ custom_tweaks: list[CustomGestaltTweak] = []
+
+ def create_tweak(key: str="", value: str="1", value_type: ValueType = ValueType.Integer) -> int:
+ new_tweak = MobileGestaltTweak("", key, value=value)
+ CustomGestaltTweaks.custom_tweaks.append(CustomGestaltTweak(new_tweak, value_type))
+ # return the tweak id
+ return len(CustomGestaltTweaks.custom_tweaks) - 1
+
+ def set_tweak_key(id: int, key: str):
+ CustomGestaltTweaks.custom_tweaks[id].tweak.key = key
+
+ def set_tweak_value(id: int, value: str):
+ CustomGestaltTweaks.custom_tweaks[id].tweak.value = value
+
+ def set_tweak_value_type(id: int, value_type) -> str:
+ new_value_type = value_type
+ if isinstance(value_type, str):
+ # based on string value
+ new_value_type = ValueType(value_type)
+ elif isinstance(value_type, int):
+ # based on index of the string
+ new_value_type = ValueType(ValueTypeStrings[value_type])
+
+ CustomGestaltTweaks.custom_tweaks[id].value_type = new_value_type
+ # update the value to be of the new type
+ new_value = 1
+ new_str = "1"
+ if new_value_type == ValueType.Float:
+ new_value = 1.0
+ new_str = "1.0"
+ elif new_value_type == ValueType.String:
+ new_value = ""
+ new_str = ""
+ elif new_value_type == ValueType.Array:
+ new_value = []
+ new_str = "[ ]"
+ elif new_value_type == ValueType.Dictionary:
+ new_value = {}
+ new_str = "{ }"
+ CustomGestaltTweaks.custom_tweaks[id].tweak.value = new_value
+ return new_str
+
+ def deactivate_tweak(id: int):
+ CustomGestaltTweaks.custom_tweaks[id].deactivated = True
+ CustomGestaltTweaks.custom_tweaks[id].tweak = None
+
+ def apply_tweaks(plist: dict):
+ for tweak in CustomGestaltTweaks.custom_tweaks:
+ plist = tweak.apply_tweak(plist)
+ return plist
\ No newline at end of file
diff --git a/tweaks/tweak_classes.py b/tweaks/tweak_classes.py
index a94f1b1..ec3b3a3 100644
--- a/tweaks/tweak_classes.py
+++ b/tweaks/tweak_classes.py
@@ -147,7 +147,7 @@ def __init__(
self.selected_option = 0 # index of the selected option
def apply_tweak(self, plist: dict):
- if not self.enabled:
+ if not self.enabled or self.value[self.selected_option] == "Placeholder":
return plist
new_value = self.value[self.selected_option]
if self.subkey == None:
diff --git a/tweaks/tweaks.py b/tweaks/tweaks.py
index e4de5c1..5c9472b 100644
--- a/tweaks/tweaks.py
+++ b/tweaks/tweaks.py
@@ -42,7 +42,7 @@
## AI Enabler
"AIEligibility": AITweak(),
"AIGestalt": MobileGestaltTweak("Enable Apple Intelligence (for Unsupported Devices) (Gestalt)", "A62OafQ85EJAiiqKn4agtg", min_version=Version("18.1")),
- "SpoofModel": MobileGestaltTweak("Spoof Device Model", "h9jDsbgj7xIVeIQ8S3/X3Q", value="iPhone17,3", min_version=Version("18.1"), divider_below=True),
+ "SpoofModel": MobileGestaltPickerTweak("Spoofed Device Model", "h9jDsbgj7xIVeIQ8S3/X3Q", values=["Placeholder", "iPhone16,2", "iPhone17,4", "iPhone17,3", "iPhone17,2", "iPad16,3"], min_version=Version("18.1"), divider_below=True),
## Springboard Tweaks
"LockScreenFootnote": BasicPlistTweak(