diff --git a/README.md b/README.md index 0dce7f4..b9f1d21 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,47 @@ -# CODENAME Nugget +# Nugget Unlock your device's full potential! Works on all versions iOS 17.0+ +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. ## Features - Enable Dynamic Island on any device -- Change Device Model Name +- Enable iPhone X gestures on iPhone SEs +- Change Device Model Name (ie what shows in the Settings app) - Enable Boot Chime - Enable Charge Limit +- Enable Tap to Wake on unsupported devices (ie iPhone SEs) +- Enable iPhone 16 Settings +- Enable Collision SOS - Enable Stage Manager +- Disable the Wallpaper Parallax +- Disable Region Restrictions (ie. Shutter Sound) + - Note: This does not include enabling EU sideloading outside the EU. That will come later. +- Enable AOD on any device +- Show the Apple Pencil options in Settings app +- Show the Action Button options in Settings app +- Show Internal Storage info (Might cause problems on some devices, use at your own risk) +- Enabling lock screen clock animation, lock screen page duplication button, and more! +- Disabling the new iOS 18 Photos UI +- EU Enabler ## Running the Program Requirements: - pymobiledevice3 +- Python 3.8 or newer Note: It is highly recommended to use a virtual environment: ``` -python -m venv .env # only needed once -source .env/bin/activate -pip install -r requirements.txt # only needed once -python main_app.py +python3 -m venv .env # only needed once +# macOS/Linux: source .env/bin/activate +# Windows: .env/Scripts/activate.bat +pip3 install -r requirements.txt # only needed once +python3 main_app.py ``` +Note: It may be either `python`/`pip` or `python3`/`pip3` depending on your path. + +The CLI version can be ran with `python3 cli_app.py`. ## Getting the File You need to get the mobilegestalt file that is specific to your device. To do that, follow these steps: @@ -29,7 +50,17 @@ You need to get the mobilegestalt file that is specific to your device. To do th 3. Save the file and share it to your computer. 4. Place it in the same folder as the python file (or specify the path in the program) +## Building +To compile `mainwindow.ui` for Python, run the following command: +`pyside6-uic qt/mainwindow.ui -o qt/ui_mainwindow.py` + +To compile the resources file for Python, run the following command: +`pyside6-rcc qt/resources.qrc -o resources_rc.py` + +The application itself can be compiled by running `compile.py`. + ## Credits - [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 diff --git a/cli_app.py b/cli_app.py new file mode 100644 index 0000000..3fb6690 --- /dev/null +++ b/cli_app.py @@ -0,0 +1,215 @@ +from exploit.restore import restore_files, FileToRestore, restore_file +from tweaks.tweaks import tweaks, TweakModifyType, FeatureFlagTweak, EligibilityTweak +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 v2.2") + 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) + 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 + + # 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() + 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/", + restore_name="com.apple.MobileGestalt.plist" + ), + FileToRestore( + contents=plistlib.dumps(flag_plist), + restore_path="/var/preferences/FeatureFlags/", + restore_name="Global.plist" + ) + ] + if eligibility_files != None: + files_to_restore += eligibility_files + # 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/", + restore_name="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 + elif page == 42: + # restore_file(fp=Path.joinpath(Path.cwd(), "telephony_test.png"), restore_path="/var/mobile/Library/Caches/TelephonyUI-9/", restore_name="en-0---white.png", reboot=True, lockdown_client=device.ld) + restore_files(files=[FileToRestore( + contents=b"", + restore_path="/var/Managed Preferences/mobile/", + restore_name="com.apple.purplebuddy.plist" + )], reboot=True, lockdown_client=device.ld) + 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 + # for now it is just for set model, deal with a fix later + print("\n\nSet Model Name") + print("Leave blank to turn off custom name.\n") + name = input("Enter Model Name: ") + if name == "": + tweak.set_enabled(False) + else: + tweak.set_value(name) + 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) + 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/compile.py b/compile.py index eefe432..781dc2b 100644 --- a/compile.py +++ b/compile.py @@ -6,10 +6,18 @@ 'main_app.py', # '--hidden-import=ipsw_parser', '--hidden-import=zeroconf', + '--hidden-import=pyimg4', '--hidden-import=zeroconf._utils.ipaddress', '--hidden-import=zeroconf._handlers.answers', + '--add-data=files/:./files', + '--copy-metadata=pyimg4', '--onedir', - '--name=CODENAME Nugget', + '--name=Nugget', + '--icon=nugget.ico' ] -PyInstaller.__main__.run(args) \ No newline at end of file +if platform == "darwin": + # add --windowed arg for macOS + args.append('--windowed') + +PyInstaller.__main__.run(args) diff --git a/credits/LeminLimez.png b/credits/LeminLimez.png new file mode 100644 index 0000000..3679ad6 Binary files /dev/null and b/credits/LeminLimez.png differ diff --git a/credits/big_nugget.png b/credits/big_nugget.png new file mode 100644 index 0000000..35c4d79 Binary files /dev/null and b/credits/big_nugget.png differ diff --git a/devicemanagement/__init__.py b/devicemanagement/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/devicemanagement/__pycache__/__init__.cpython-312.pyc b/devicemanagement/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..94b899d Binary files /dev/null and b/devicemanagement/__pycache__/__init__.cpython-312.pyc differ diff --git a/devicemanagement/__pycache__/constants.cpython-312.pyc b/devicemanagement/__pycache__/constants.cpython-312.pyc new file mode 100644 index 0000000..bf2676a Binary files /dev/null and b/devicemanagement/__pycache__/constants.cpython-312.pyc differ diff --git a/devicemanagement/__pycache__/data_singleton.cpython-312.pyc b/devicemanagement/__pycache__/data_singleton.cpython-312.pyc new file mode 100644 index 0000000..943e2d5 Binary files /dev/null and b/devicemanagement/__pycache__/data_singleton.cpython-312.pyc differ diff --git a/devicemanagement/__pycache__/device_manager.cpython-312.pyc b/devicemanagement/__pycache__/device_manager.cpython-312.pyc new file mode 100644 index 0000000..c29a9e4 Binary files /dev/null and b/devicemanagement/__pycache__/device_manager.cpython-312.pyc differ diff --git a/devicemanagement/constants.py b/devicemanagement/constants.py new file mode 100644 index 0000000..48cb9e7 --- /dev/null +++ b/devicemanagement/constants.py @@ -0,0 +1,94 @@ +from enum import Enum +from pymobiledevice3.lockdown import LockdownClient + +class Device: + def __init__(self, uuid: int, name: str, version: str, model: str, locale: str, ld: LockdownClient): + self.uuid = uuid + self.name = name + self.version = version + self.model = model + self.locale = locale + self.ld = ld + +class Version: + def __init__(self, major: int, minor: int = 0, patch: int = 0): + self.major = major + self.minor = minor + self.patch = patch + + def __init__(self, ver: str): + nums: list[str] = ver.split(".") + self.major = int(nums[0]) + self.minor = int(nums[1]) if len(nums) > 1 else 0 + self.patch = int(nums[2]) if len(nums) > 2 else 0 + + # Comparison Functions + def compare_to(self, other) -> int: + if self.major > other.major: + return 1 + elif self.major < other.major: + return -1 + if self.minor > other.minor: + return 1 + elif self.minor < other.minor: + return -1 + if self.patch > other.patch: + return 1 + elif self.patch < other.patch: + return -1 + return 0 + + def __gt__(self, other) -> bool: + return self.compare_to(other) == 1 + def __ge__(self, other) -> bool: + comp: int = self.compare_to(other) + return comp == 0 or comp == 1 + + def __lt__(self, other) -> bool: + return self.compare_to(other) == -1 + def __le__(self, other) -> bool: + comp: int = self.compare_to(other) + return comp == 0 or comp == -1 + + def __eq__(self, other) -> bool: + return self.compare_to(other) == 0 + +class Tweak(Enum): + StatusBar = 'Status Bar' + SpringboardOptions = 'Springboard Options' + InternalOptions = 'Internal Options' + SkipSetup = 'Setup Options' + +class FileLocation(Enum): + # Control Center + mute = "ControlCenter/ManagedPreferencesDomain/mobile/com.apple.control-center.MuteModule.plist" + focus = "ControlCenter/ManagedPreferencesDomain/mobile/com.apple.FocusUIModule.plist" + spoken = "ControlCenter/ManagedPreferencesDomain/mobile/com.apple.siri.SpokenNotificationsModule.plist" + module_config = "ControlCenter/HomeDomain/Library/ControlCenter/ModuleConfiguration.plist" + replay_kit_audio = "ControlCenter/ManagedPreferencesDomain/mobile/com.apple.replaykit.AudioConferenceControlCenterModule.plist" + replay_kit_video = "ControlCenter/ManagedPreferencesDomain/mobile/com.apple.replaykit.VideoConferenceControlCenterModule.plist" + + # Status Bar + status_bar = "StatusBar/HomeDomain/Library/SpringBoard/statusBarOverrides" + + # Springboard Options + springboard = "SpringboardOptions/ManagedPreferencesDomain/mobile/com.apple.springboard.plist" + footnote = "SpringboardOptions/ConfigProfileDomain/Library/ConfigurationProfiles/SharedDeviceConfiguration.plist" + wifi = "SpringboardOptions/SystemPreferencesDomain/SystemConfiguration/com.apple.wifi.plist" + uikit = "SpringboardOptions/ManagedPreferencesDomain/mobile/com.apple.UIKit.plist" + accessibility = "SpringboardOptions/ManagedPreferencesDomain/mobile/com.apple.Accessibility.plist" + wifi_debug = "SpringboardOptions/ManagedPreferencesDomain/mobile/com.apple.MobileWiFi.debug.plist" + airdrop = "SpringboardOptions/ManagedPreferencesDomain/mobile/com.apple.sharingd.plist" + + # Internal Options + global_prefs = "InternalOptions/ManagedPreferencesDomain/mobile/hiddendotGlobalPreferences.plist" + app_store = "InternalOptions/ManagedPreferencesDomain/mobile/com.apple.AppStore.plist" + backboardd = "InternalOptions/ManagedPreferencesDomain/mobile/com.apple.backboardd.plist" + core_motion = "InternalOptions/ManagedPreferencesDomain/mobile/com.apple.CoreMotion.plist" + pasteboard = "InternalOptions/HomeDomain/Library/Preferences/com.apple.Pasteboard.plist" + notes = "InternalOptions/ManagedPreferencesDomain/mobile/com.apple.mobilenotes.plist" + maps = "InternalOptions/AppDomain-com.apple.Maps/Library/Preferences/com.apple.Maps.plist" + weather = "InternalOptions/AppDomain-com.apple.weather/Library/Preferences/com.apple.weather.plist" + + # Setup Options + cloud_config = "SkipSetup/ConfigProfileDomain/Library/ConfigurationProfiles/CloudConfigurationDetails.plist" \ No newline at end of file diff --git a/devicemanagement/data_singleton.py b/devicemanagement/data_singleton.py new file mode 100644 index 0000000..c330de6 --- /dev/null +++ b/devicemanagement/data_singleton.py @@ -0,0 +1,9 @@ +from pathlib import Path + +from devicemanagement.constants import Device, Tweak + +class DataSingleton: + def __init__(self): + self.current_device: Device + self.device_available: bool = False + self.gestalt_path = None \ No newline at end of file diff --git a/devicemanagement/device_manager.py b/devicemanagement/device_manager.py new file mode 100644 index 0000000..baaf9b7 --- /dev/null +++ b/devicemanagement/device_manager.py @@ -0,0 +1,182 @@ +import traceback +import plistlib +from pathlib import Path + +from PySide6.QtWidgets import QMessageBox + +from pymobiledevice3 import usbmux +from pymobiledevice3.lockdown import create_using_usbmux + +from devicemanagement.constants import Device, Version +from devicemanagement.data_singleton import DataSingleton + +from tweaks.tweaks import tweaks, FeatureFlagTweak, EligibilityTweak +from exploit.restore import restore_files, FileToRestore + +def show_error_msg(txt: str): + detailsBox = QMessageBox() + detailsBox.setIcon(QMessageBox.Critical) + detailsBox.setWindowTitle("Error!") + detailsBox.setText(txt) + detailsBox.setDetailedText(str(traceback.format_exc())) + detailsBox.exec() + +class DeviceManager: + min_version: Version = Version("17") + + ## Class Functions + def __init__(self): + self.devices: list[Device] = [] + self.data_singleton = DataSingleton() + self.current_device_index = 0 + self.apply_over_wifi = True + + def get_devices(self): + self.devices.clear() + connected_devices = usbmux.list_devices() + # 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 + dev = Device( + uuid=device.serial, + name=vals['DeviceName'], + version=vals['ProductVersion'], + model=vals['ProductType'], + locale=ld.locale, + ld=ld + ) + self.devices.append(dev) + except Exception as e: + print(f"ERROR with lockdown device with UUID {device.serial}") + show_error_msg(type(e).__name__) + + if len(connected_devices) > 0: + self.set_current_device(index=0) + else: + self.set_current_device(index=None) + + ## CURRENT DEVICE + def set_current_device(self, index: int = None): + if index == None: + self.data_singleton.current_device = None + self.data_singleton.device_available = False + self.data_singleton.gestalt_path = None + self.current_device_index = 0 + else: + self.data_singleton.current_device = self.devices[index] + if Version(self.devices[index].version) < DeviceManager.min_version: + self.data_singleton.device_available = False + self.data_singleton.gestalt_path = None + else: + self.data_singleton.device_available = True + self.current_device_index = index + + def get_current_device_name(self) -> str: + if self.data_singleton.current_device == None: + return "No Device" + else: + return self.data_singleton.current_device.name + + def get_current_device_version(self) -> str: + if self.data_singleton.current_device == None: + return "" + else: + return self.data_singleton.current_device.version + + def get_current_device_uuid(self) -> str: + if self.data_singleton.current_device == None: + return "" + else: + return self.data_singleton.current_device.uuid + + + ## APPLYING OR REMOVING TWEAKS AND RESTORING + def apply_changes(self, resetting: bool = False, update_label=lambda x: None): + # set the tweaks and apply + # first open the file in read mode + update_label("Applying changes to files...") + gestalt_plist = None + if self.data_singleton.gestalt_path != None: + with open(self.data_singleton.gestalt_path, 'rb') as in_fp: + gestalt_plist = plistlib.load(in_fp) + # create the other plists + flag_plist: dict = {} + eligibility_files = None + + # set the plist keys + if not resetting: + for tweak_name in tweaks: + tweak = tweaks[tweak_name] + if isinstance(tweak, FeatureFlagTweak): + flag_plist = tweak.apply_tweak(flag_plist) + elif isinstance(tweak, EligibilityTweak): + eligibility_files = tweak.apply_tweak() + else: + if gestalt_plist != None: + gestalt_plist = tweak.apply_tweak(gestalt_plist) + + # 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/", + restore_name="Global.plist" + ) + ] + if gestalt_plist != None: + files_to_restore.append(FileToRestore( + contents=plistlib.dumps(gestalt_plist), + restore_path="/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/", + restore_name="com.apple.MobileGestalt.plist" + )) + if eligibility_files: + files_to_restore += eligibility_files + + # 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.") + update_label("Success!") + except Exception as e: + if "Find My" in str(e): + detailsBox = QMessageBox() + detailsBox.setIcon(QMessageBox.Critical) + detailsBox.setWindowTitle("Error!") + detailsBox.setText("Find My must be disabled in order to use this tool.") + detailsBox.setDetailedText("Disable Find My from Settings (Settings -> [Your Name] -> Find My) and then try again.") + detailsBox.exec() + else: + print(traceback.format_exc()) + update_label("Failed to restore") + show_error_msg(type(e).__name__) + + ## RESETTING MOBILE GESTALT + def reset_mobilegestalt(self, update_label=lambda x: None): + # restore to the device + update_label("Restoring to device...") + try: + restore_files(files=[FileToRestore( + contents=b"", + restore_path="/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/", + restore_name="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.") + update_label("Success!") + except Exception as e: + if "Find My" in str(e): + detailsBox = QMessageBox() + detailsBox.setIcon(QMessageBox.Critical) + detailsBox.setWindowTitle("Error!") + detailsBox.setText("Find My must be disabled in order to use this tool.") + detailsBox.setDetailedText("Disable Find My from Settings (Settings -> [Your Name] -> Find My) and then try again.") + detailsBox.exec() + else: + print(traceback.format_exc()) + update_label("Failed to restore") + show_error_msg(type(e).__name__) diff --git a/exploit/__init__.py b/exploit/__init__.py index 36297c8..0c037de 100644 --- a/exploit/__init__.py +++ b/exploit/__init__.py @@ -1 +1,33 @@ -from . import backup \ No newline at end of file +from tempfile import TemporaryDirectory +from pathlib import Path + +from pymobiledevice3.lockdown import create_using_usbmux +from pymobiledevice3.services.mobilebackup2 import Mobilebackup2Service +from pymobiledevice3.exceptions import PyMobileDevice3Exception +from pymobiledevice3.services.diagnostics import DiagnosticsService +from pymobiledevice3.lockdown import LockdownClient + +from . import backup + +def perform_restore(backup: backup.Backup, reboot: bool = False, lockdown_client: LockdownClient = None): + try: + with TemporaryDirectory() as backup_dir: + backup.write_to_directory(Path(backup_dir)) + + if lockdown_client == None: + lockdown_client = create_using_usbmux() + with Mobilebackup2Service(lockdown_client) as mb: + mb.restore(backup_dir, system=True, reboot=False, copy=False, source=".") + except PyMobileDevice3Exception as e: + if "Find My" in str(e): + print("Find My must be disabled in order to use this tool.") + print("Disable Find My from Settings (Settings -> [Your Name] -> Find My) and then try again.") + raise e + 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 diff --git a/exploit/__pycache__/__init__.cpython-312.pyc b/exploit/__pycache__/__init__.cpython-312.pyc index 66a9a06..e418ec0 100644 Binary files a/exploit/__pycache__/__init__.cpython-312.pyc and b/exploit/__pycache__/__init__.cpython-312.pyc differ diff --git a/exploit/__pycache__/backup.cpython-312.pyc b/exploit/__pycache__/backup.cpython-312.pyc index 023ac03..b69d840 100644 Binary files a/exploit/__pycache__/backup.cpython-312.pyc and b/exploit/__pycache__/backup.cpython-312.pyc differ diff --git a/exploit/__pycache__/mbdb.cpython-312.pyc b/exploit/__pycache__/mbdb.cpython-312.pyc index 4043224..b5275f3 100644 Binary files a/exploit/__pycache__/mbdb.cpython-312.pyc and b/exploit/__pycache__/mbdb.cpython-312.pyc differ diff --git a/exploit/__pycache__/restore.cpython-312.pyc b/exploit/__pycache__/restore.cpython-312.pyc index b406837..3c27278 100644 Binary files a/exploit/__pycache__/restore.cpython-312.pyc and b/exploit/__pycache__/restore.cpython-312.pyc differ diff --git a/exploit/restore.py b/exploit/restore.py index 572efea..8d4e206 100644 --- a/exploit/restore.py +++ b/exploit/restore.py @@ -1,31 +1,113 @@ -from exploit import backup -from pymobiledevice3.lockdown import create_using_usbmux -from pymobiledevice3.services.mobilebackup2 import Mobilebackup2Service -from tempfile import TemporaryDirectory -from pathlib import Path +from . import backup, perform_restore +from pymobiledevice3.lockdown import LockdownClient -def restore_file(fp: str, restore_path: str, restore_name: str): +class FileToRestore: + def __init__(self, contents: str, restore_path: str, restore_name: str, owner: int = 501, group: int = 501): + self.contents = contents + self.restore_path = restore_path + self.restore_name = restore_name + self.owner = owner + self.group = group + +# 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 + files_list = [ + backup.Directory("", "RootDomain"), + backup.Directory("Library", "RootDomain"), + backup.Directory("Library/Preferences", "RootDomain"), + ] + # create the links + for file_num in range(len(files)): + files_list.append(backup.ConcreteFile( + f"Library/Preferences/temp{file_num}", + "RootDomain", + owner=files[file_num].owner, + group=files[file_num].group, + contents=files[file_num].contents, + inode=file_num + )) + # add the file paths + for file_num in range(len(files)): + file = files[file_num] + 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" + files_list.append(backup.Directory( + "", + f"SysContainerDomain-../../../../../../../..{base_path}{file.restore_path}", + owner=file.owner, + group=file.group + )) + files_list.append(backup.ConcreteFile( + "", + f"SysContainerDomain-../../../../../../../..{base_path}{file.restore_path}{file.restore_name}", + owner=file.owner, + group=file.group, + contents=b"", + inode=file_num + )) + # break the hard links + for file_num in range(len(files)): + files_list.append(backup.ConcreteFile( + "", + f"SysContainerDomain-../../../../../../../../var/.backup.i/var/root/Library/Preferences/temp{file_num}", + owner=501, + group=501, + contents=b"", + )) # Break the hard link + files_list.append(backup.ConcreteFile("", "SysContainerDomain-../../../../../../../.." + "/crash_on_purpose", contents=b"")) + + # create the backup + back = backup.Backup(files=files_list) + + perform_restore(backup=back, reboot=reboot, lockdown_client=lockdown_client) + + +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() + base_path = "/var/backup" + if restore_path.startswith("/var/mobile/"): + # required on iOS 17.0+ since /var/mobile is on a separate partition + base_path = "/var/mobile/backup" + # create the backup back = backup.Backup(files=[ - backup.Directory("", "RootDomain", owner=501, group=501), - backup.Directory("Library", "RootDomain", owner=501, group=501), - backup.Directory("Library/Preferences", "RootDomain", owner=501, group=501), - backup.ConcreteFile("Library/Preferences/Hello", "RootDomain", owner=501, group=501, contents=contents), - backup.Directory("", f"SysContainerDomain-../../../../../../../../var/.backup.i{restore_path}", owner=501, group=501), - backup.ConcreteFile("", f"SysContainerDomain-../../../../../../../../var/.backup.i{restore_path}{restore_name}", owner=501, group=501, contents=contents), - backup.Directory("", "SysContainerDomain-../../../../../../../../var/.backup.i/var/root/Library/Preferences/Hello", owner=501, group=501), + # backup.Directory("", "HomeDomain"), + # backup.Directory("Library", "HomeDomain"), + # backup.Directory("Library/Preferences", "HomeDomain"), + # backup.ConcreteFile("Library/Preferences/temp", "HomeDomain", owner=501, group=501, contents=contents, inode=0), + backup.Directory( + "", + f"HomeDomain-../../../../../../..{base_path}{restore_path}", + owner=501, + group=501 + ), + backup.ConcreteFile( + "", + f"HomeDomain-../../../../../../..{base_path}{restore_path}{restore_name}", + owner=501, + group=501, + contents=contents#b"", + # inode=0 + ), + # backup.ConcreteFile( + # "", + # "SysContainerDomain-../../../../../../../../var/.backup.i/var/root/Library/Preferences/temp", + # owner=501, + # group=501, + # contents=b"", + # ), # Break the hard link + backup.ConcreteFile("", "SysContainerDomain-../../../../../../../.." + "/crash_on_purpose", contents=b""), ]) - # get a temporary dir to store the backup - with TemporaryDirectory() as backup_dir: - backup_dir_path = Path(backup_dir) - back.write_to_directory(backup_dir_path) - print(f"Backup written to {backup_dir}") - input("Press Enter to continue...") - - lockdown = create_using_usbmux() - with Mobilebackup2Service(lockdown) as mb: - mb.restore(backup_dir, system=True, reboot=False, copy=False, source=".") \ No newline at end of file + + perform_restore(backup=back, reboot=reboot, lockdown_client=lockdown_client) \ No newline at end of file diff --git a/files/eligibility/Config.plist b/files/eligibility/Config.plist new file mode 100644 index 0000000..bf8605b Binary files /dev/null and b/files/eligibility/Config.plist differ diff --git a/files/eligibility/eligibility.plist b/files/eligibility/eligibility.plist new file mode 100644 index 0000000..2006e0b --- /dev/null +++ b/files/eligibility/eligibility.plist @@ -0,0 +1,546 @@ + + + + + OS_ELIGIBILITY_DOMAIN_ALUMINUM + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_ARGON + + os_eligibility_answer_source_t + 4 + os_eligibility_answer_t + 4 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 4 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 4 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 4 + + + OS_ELIGIBILITY_DOMAIN_BERYLLIUM + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 3 + + + OS_ELIGIBILITY_DOMAIN_BORON + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 3 + + + OS_ELIGIBILITY_DOMAIN_CARBON + + os_eligibility_answer_source_t + 4 + os_eligibility_answer_t + 4 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 4 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 4 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 4 + + + OS_ELIGIBILITY_DOMAIN_CHLORINE + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 3 + OS_ELIGIBILITY_INPUT_DEVICE_LOCALE + 3 + + + OS_ELIGIBILITY_DOMAIN_CHROMIUM + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 3 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_COBALT + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 4 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 3 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 3 + + + OS_ELIGIBILITY_DOMAIN_COPPER + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + + OS_ELIGIBILITY_DOMAIN_FLUORINE + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 3 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_HELIUM + + os_eligibility_answer_source_t + 4 + os_eligibility_answer_t + 4 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 4 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 4 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 4 + + + OS_ELIGIBILITY_DOMAIN_HYDROGEN + + os_eligibility_answer_source_t + 4 + os_eligibility_answer_t + 4 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 4 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 4 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 4 + + + OS_ELIGIBILITY_DOMAIN_IRON + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 3 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 3 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_KRYPTON + + context + + OS_ELIGIBILITY_CONTEXT_COUNTRY_BILLING + US + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + + + OS_ELIGIBILITY_DOMAIN_LITHIUM + + os_eligibility_answer_source_t + 4 + os_eligibility_answer_t + 4 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 4 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 4 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 4 + + + OS_ELIGIBILITY_DOMAIN_LOTX + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + + + OS_ELIGIBILITY_DOMAIN_MAGNESIUM + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_MANGANESE + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 3 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_NEON + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 3 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 3 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_NICKEL + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + OS_ELIGIBILITY_INPUT_DEVICE_LOCALE + 3 + + + OS_ELIGIBILITY_DOMAIN_NITROGEN + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_OXYGEN + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 3 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 3 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_PHOSPHORUS + + context + + OS_ELIGIBILITY_CONTEXT_COUNTRY_BILLING + US + + os_eligibility_answer_source_t + 4 + os_eligibility_answer_t + 4 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 4 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 4 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 4 + + + OS_ELIGIBILITY_DOMAIN_PODCASTS_TRANSCRIPTS + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 4 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 3 + + + OS_ELIGIBILITY_DOMAIN_POTASSIUM + + os_eligibility_answer_source_t + 4 + os_eligibility_answer_t + 4 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 4 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 4 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 4 + + + OS_ELIGIBILITY_DOMAIN_SCANDIUM + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 3 + + + OS_ELIGIBILITY_DOMAIN_SEARCH_MARKETPLACES + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 3 + + + OS_ELIGIBILITY_DOMAIN_SILICON + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_SODIUM + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + + + OS_ELIGIBILITY_DOMAIN_SULFUR + + context + + OS_ELIGIBILITY_CONTEXT_COUNTRY_BILLING + US + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 3 + + + OS_ELIGIBILITY_DOMAIN_SWIFT_ASSIST + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + OS_ELIGIBILITY_INPUT_DEVICE_REGION_CODE + 3 + OS_ELIGIBILITY_INPUT_EXTERNAL_BOOT_DRIVE + 3 + + + OS_ELIGIBILITY_DOMAIN_TITANIUM + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 3 + + + OS_ELIGIBILITY_DOMAIN_VANADIUM + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_COUNTRY_LOCATION + 2 + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 3 + + + OS_ELIGIBILITY_DOMAIN_XCODE_LLM + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_DEVICE_CLASS + 2 + OS_ELIGIBILITY_INPUT_DEVICE_REGION_CODE + 3 + OS_ELIGIBILITY_INPUT_EXTERNAL_BOOT_DRIVE + 3 + + + OS_ELIGIBILITY_DOMAIN_ZINC + + os_eligibility_answer_source_t + 1 + os_eligibility_answer_t + 2 + status + + OS_ELIGIBILITY_INPUT_COUNTRY_BILLING + 2 + OS_ELIGIBILITY_INPUT_DEVICE_LANGUAGE + 2 + + + + diff --git a/gui/__init__.py b/gui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gui/__pycache__/__init__.cpython-312.pyc b/gui/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..8b12a73 Binary files /dev/null and b/gui/__pycache__/__init__.cpython-312.pyc differ diff --git a/gui/__pycache__/gestalt_dialog.cpython-312.pyc b/gui/__pycache__/gestalt_dialog.cpython-312.pyc new file mode 100644 index 0000000..c210875 Binary files /dev/null and b/gui/__pycache__/gestalt_dialog.cpython-312.pyc differ diff --git a/gui/__pycache__/main_window.cpython-312.pyc b/gui/__pycache__/main_window.cpython-312.pyc new file mode 100644 index 0000000..c21eb9b Binary files /dev/null and b/gui/__pycache__/main_window.cpython-312.pyc differ diff --git a/gui/__pycache__/ui_mainwindow.cpython-312.pyc b/gui/__pycache__/ui_mainwindow.cpython-312.pyc new file mode 100644 index 0000000..6030973 Binary files /dev/null and b/gui/__pycache__/ui_mainwindow.cpython-312.pyc differ diff --git a/gui/gestalt_dialog.py b/gui/gestalt_dialog.py new file mode 100644 index 0000000..78d7edf --- /dev/null +++ b/gui/gestalt_dialog.py @@ -0,0 +1,27 @@ +from PySide6.QtWidgets import QDialog, QDialogButtonBox, QLabel, QVBoxLayout + +class GestaltDialog(QDialog): + def __init__(self, device_manager, gestalt_label, selected_file, parent=None): + super().__init__(parent) + self.device_manager = device_manager + self.gestalt_label = gestalt_label + self.selected_file = selected_file + + QBtn = ( + QDialogButtonBox.Ok | QDialogButtonBox.Cancel + ) + + self.buttonBox = QDialogButtonBox(QBtn) + self.buttonBox.accepted.connect(self.accept) + self.buttonBox.rejected.connect(self.reject) + + layout = QVBoxLayout() + message = QLabel("The gestalt file looks like it was made for a different device.\nAre you sure you want to use this one?") + layout.addWidget(message) + layout.addWidget(self.buttonBox) + self.setLayout(layout) + + def accept(self): + self.device_manager.data_singleton.gestalt_path = self.selected_file + self.gestalt_label.setText(self.selected_file) + super().accept() \ No newline at end of file diff --git a/gui/main_window.py b/gui/main_window.py new file mode 100644 index 0000000..8719229 --- /dev/null +++ b/gui/main_window.py @@ -0,0 +1,413 @@ +from PySide6 import QtCore, QtWidgets +from enum import Enum +import webbrowser +import plistlib + +from pymobiledevice3.lockdown import create_using_usbmux + +from qt.ui_mainwindow import Ui_Nugget + +from devicemanagement.constants import Version +from devicemanagement.device_manager import DeviceManager + +from gui.gestalt_dialog import GestaltDialog + +from tweaks.tweaks import tweaks + +class Page(Enum): + Home = 0 + Explore = 1 + LocSim = 2 + CustomOperations = 5 + Themes = 3 + Gestalt = 4 + Settings = 6 + FeatureFlags = 7 + EUEnabler = 8 + Apply = 9 + +class MainWindow(QtWidgets.QMainWindow): + def __init__(self, device_manager: DeviceManager): + super(MainWindow, self).__init__() + self.device_manager = device_manager + self.ui = Ui_Nugget() + self.ui.setupUi(self) + self.show_uuid = False + self.loadSettings() + + ## DEVICE BAR + self.refresh_devices() + + self.ui.refreshBtn.clicked.connect(self.refresh_devices) + self.ui.devicePicker.currentIndexChanged.connect(self.change_selected_device) + + ## SIDE BAR ACTIONS + self.ui.homePageBtn.clicked.connect(self.on_homePageBtn_clicked) + self.ui.gestaltPageBtn.clicked.connect(self.on_gestaltPageBtn_clicked) + self.ui.featureFlagsPageBtn.clicked.connect(self.on_featureFlagsPageBtn_clicked) + self.ui.euEnablerPageBtn.clicked.connect(self.on_euEnablerPageBtn_clicked) + self.ui.applyPageBtn.clicked.connect(self.on_applyPageBtn_clicked) + self.ui.settingsPageBtn.clicked.connect(self.on_settingsPageBtn_clicked) + + ## HOME PAGE ACTIONS + self.ui.phoneVersionLbl.linkActivated.connect(self.toggle_version_label) + + ## HOME PAGE LINKS + self.ui.bigNuggetBtn.clicked.connect(self.on_bigNuggetBtn_clicked) + + # self.ui.leminGitHubBtn.clicked.connect(self.on_leminGitHubBtn_clicked) + self.ui.leminTwitterBtn.clicked.connect(self.on_leminTwitterBtn_clicked) + self.ui.leminKoFiBtn.clicked.connect(self.on_leminKoFiBtn_clicked) + + self.ui.jjtechBtn.clicked.connect(self.on_jjtechBtn_clicked) + self.ui.disfordottieBtn.clicked.connect(self.on_disfordottieBtn_clicked) + self.ui.lrdsnowBtn.clicked.connect(self.on_lrdsnowBtn_clicked) + + self.ui.libiBtn.clicked.connect(self.on_libiBtn_clicked) + self.ui.qtBtn.clicked.connect(self.on_qtBtn_clicked) + + self.ui.discordBtn.clicked.connect(self.on_discordBtn_clicked) + + ## EU ENABLER PAGE ACTIONS + self.ui.euEnablerEnabledChk.toggled.connect(self.on_euEnablerEnabledChk_toggled) + self.ui.methodChoiceDrp.activated.connect(self.on_methodChoiceDrp_activated) + self.ui.regionCodeTxt.textEdited.connect(self.on_regionCodeTxt_textEdited) + + ## FEATURE FLAGS PAGE + self.ui.clockAnimChk.toggled.connect(self.on_clockAnimChk_toggled) + self.ui.lockscreenChk.toggled.connect(self.on_lockscreenChk_clicked) + self.ui.photosChk.toggled.connect(self.on_photosChk_clicked) + self.ui.aiChk.toggled.connect(self.on_aiChk_clicked) + + ## APPLY PAGE ACTIONS + self.ui.applyTweaksBtn.clicked.connect(self.on_applyPageBtn_clicked) + self.ui.removeTweaksBtn.clicked.connect(self.on_removeTweaksBtn_clicked) + self.ui.chooseGestaltBtn.clicked.connect(self.on_chooseGestaltBtn_clicked) + self.ui.resetGestaltBtn.clicked.connect(self.on_resetGestaltBtn_clicked) + + ## MOBILE GESTALT PAGE ACTIONS + self.ui.dynamicIslandDrp.activated.connect(self.on_dynamicIslandDrp_activated) + self.ui.modelNameChk.toggled.connect(self.on_modelNameChk_clicked) + self.ui.modelNameTxt.textEdited.connect(self.on_modelNameTxt_textEdited) + + self.ui.bootChimeChk.clicked.connect(self.on_bootChimeChk_clicked) + self.ui.chargeLimitChk.clicked.connect(self.on_chargeLimitChk_clicked) + self.ui.tapToWakeChk.clicked.connect(self.on_tapToWakeChk_clicked) + self.ui.iphone16SettingsChk.clicked.connect(self.on_iphone16SettingsChk_clicked) + self.ui.parallaxChk.clicked.connect(self.on_parallaxChk_clicked) + self.ui.stageManagerChk.clicked.connect(self.on_stageManagerChk_clicked) + self.ui.ipadAppsChk.clicked.connect(self.on_ipadAppsChk_clicked) + self.ui.shutterChk.clicked.connect(self.on_shutterChk_clicked) + self.ui.pencilChk.clicked.connect(self.on_pencilChk_clicked) + self.ui.actionButtonChk.clicked.connect(self.on_actionButtonChk_clicked) + + self.ui.internalInstallChk.clicked.connect(self.on_internalInstallChk_clicked) + 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) + + + ## GENERAL INTERFACE FUNCTIONS + def updateInterfaceForNewDevice(self): + # update the home page + self.updatePhoneInfo() + + + ## DEVICE BAR FUNCTIONS + @QtCore.Slot() + def refresh_devices(self): + # get the devices + self.device_manager.get_devices() + # clear the picker + self.ui.devicePicker.clear() + self.ui.restoreProgressBar.hide() + if len(self.device_manager.devices) == 0: + self.ui.devicePicker.setEnabled(False) + self.ui.devicePicker.addItem('None') + self.ui.pages.setCurrentIndex(Page.Home.value) + self.ui.homePageBtn.setChecked(True) + + # hide all pages + self.ui.explorePageBtn.hide() + self.ui.customOperationsPageBtn.hide() + self.ui.locSimPageBtn.hide() + self.ui.sidebarDiv1.hide() + self.ui.gestaltPageBtn.hide() + self.ui.featureFlagsPageBtn.hide() + self.ui.euEnablerPageBtn.hide() + self.ui.internalOptionsPageBtn.hide() + self.ui.sidebarDiv2.hide() + self.ui.applyPageBtn.hide() + else: + self.ui.devicePicker.setEnabled(True) + # populate the ComboBox with device names + for device in self.device_manager.devices: + self.ui.devicePicker.addItem(device.name) + + # show all pages + self.ui.explorePageBtn.hide() + self.ui.customOperationsPageBtn.hide() + self.ui.locSimPageBtn.hide() + self.ui.sidebarDiv1.show() + self.ui.gestaltPageBtn.show() + # self.ui.featureFlagsPageBtn.show() + self.ui.euEnablerPageBtn.show() + self.ui.internalOptionsPageBtn.hide() + self.ui.sidebarDiv2.show() + self.ui.applyPageBtn.show() + self.ui.gestaltPageContent.setDisabled(False) + self.ui.featureFlagsPageContent.setDisabled(False) + + # 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 + try: + self.ui.dynamicIslandDrp.removeItem(6) + self.ui.dynamicIslandDrp.removeItem(5) + except: + pass + if Version(self.device_manager.data_singleton.current_device.version) >= Version("18.0"): + self.ui.aodChk.show() + self.ui.sleepApneaChk.show() + self.ui.featureFlagsPageBtn.show() + # 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)") + else: + self.ui.aodChk.hide() + self.ui.sleepApneaChk.hide() + self.ui.featureFlagsPageBtn.hide() + else: + self.device_manager.set_current_device(index=None) + self.ui.featureFlagsPageBtn.hide() + + def loadSettings(self): + self.settings = QtCore.QSettings() + try: + # load the settings + apply_over_wifi = self.settings.value("apply_over_wifi", True, type=bool) + self.ui.allowWifiApplyingChk.setChecked(apply_over_wifi) + self.device_manager.apply_over_wifi = apply_over_wifi + except: + pass + + + ## SIDE BAR FUNCTIONS + def on_homePageBtn_clicked(self): + self.ui.pages.setCurrentIndex(Page.Home.value) + + def on_gestaltPageBtn_clicked(self): + self.ui.pages.setCurrentIndex(Page.Gestalt.value) + + def on_featureFlagsPageBtn_clicked(self): + self.ui.pages.setCurrentIndex(Page.FeatureFlags.value) + + def on_euEnablerPageBtn_clicked(self): + self.ui.pages.setCurrentIndex(Page.EUEnabler.value) + + def on_applyPageBtn_clicked(self): + self.ui.pages.setCurrentIndex(Page.Apply.value) + + def on_settingsPageBtn_clicked(self): + self.ui.pages.setCurrentIndex(Page.Settings.value) + + def update_side_btn_color(self, btn: QtWidgets.QToolButton, toggled: bool): + if toggled: + btn.setStyleSheet("QToolButton {\ncolor: #00FF00;\n}") + else: + btn.setStyleSheet("") + + + ## HOME PAGE + def updatePhoneInfo(self): + # name label + self.ui.phoneNameLbl.setText(self.device_manager.get_current_device_name()) + # version label + ver = self.device_manager.get_current_device_version() + self.show_uuid = False + if ver != "": + self.show_version_text(version=ver) + else: + self.ui.phoneVersionLbl.setText("Please connect a device.") + + def toggle_version_label(self): + if self.show_uuid: + self.show_uuid = False + ver = self.device_manager.get_current_device_version() + if ver != "": + self.show_version_text(version=ver) + 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): + parsed_ver: Version = Version(version) + support_str: str = "Supported!" + if parsed_ver < DeviceManager.min_version: + support_str = "Not Supported." + self.ui.phoneVersionLbl.setText(f"iOS {version} {support_str}") + + ## HOME PAGE LINKS + def on_bigMilkBtn_clicked(self): + webbrowser.open_new_tab("https://cowabun.ga") + + def on_leminGitHubBtn_clicked(self): + webbrowser.open_new_tab("https://github.com/leminlimez") + def on_leminTwitterBtn_clicked(self): + webbrowser.open_new_tab("https://twitter.com/LeminLimez") + def on_leminKoFiBtn_clicked(self): + webbrowser.open_new_tab("https://ko-fi.com/leminlimez") + + def on_jjtechBtn_clicked(self): + webbrowser.open_new_tab("https://github.com/JJTech0130/TrollRestore") + def on_disfordottieBtn_clicked(self): + webbrowser.open_new_tab("https://twitter.com/disfordottie") + def on_lrdsnowBtn_clicked(self): + webbrowser.open_new_tab("https://github.com/Lrdsnow/EUEnabler") + + def on_libiBtn_clicked(self): + webbrowser.open_new_tab("https://github.com/doronz88/pymobiledevice3") + def on_qtBtn_clicked(self): + webbrowser.open_new_tab("https://www.qt.io/product/development-tools") + + def on_discordBtn_clicked(self): + webbrowser.open_new_tab("https://discord.gg/MN8JgqSAqT") + def on_bigNuggetBtn_clicked(self): + webbrowser.open_new_tab("https://cowabun.ga") + + + ## MOBILE GESTALT PAGE + def on_dynamicIslandDrp_activated(self, index: int): + if index == 0: + tweaks["DynamicIsland"].set_enabled(False) + else: + tweaks["DynamicIsland"].set_selected_option(index - 1) + + def on_modelNameChk_clicked(self, checked: bool): + tweaks["ModelName"].set_enabled(checked) + def on_modelNameTxt_textEdited(self, text: str): + tweaks["ModelName"].set_value(text, toggle_enabled=False) + + def on_bootChimeChk_clicked(self, checked: bool): + tweaks["BootChime"].set_enabled(checked) + def on_chargeLimitChk_clicked(self, checked: bool): + tweaks["ChargeLimit"].set_enabled(checked) + def on_tapToWakeChk_clicked(self, checked: bool): + tweaks["TapToWake"].set_enabled(checked) + def on_iphone16SettingsChk_clicked(self, checked: bool): + tweaks["CameraButton"].set_enabled(checked) + def on_parallaxChk_clicked(self, checked: bool): + tweaks["Parallax"].set_enabled(checked) + + def on_stageManagerChk_clicked(self, checked: bool): + tweaks["StageManager"].set_enabled(checked) + def on_ipadAppsChk_clicked(self, checked: bool): + tweaks["iPadApps"].set_enabled(checked) + def on_shutterChk_clicked(self, checked: bool): + # TODO: allow the user to select the region + tweaks["Shutter"].set_enabled(checked) + def on_pencilChk_clicked(self, checked: bool): + tweaks["Pencil"].set_enabled(checked) + def on_actionButtonChk_clicked(self, checked: bool): + tweaks["ActionButton"].set_enabled(checked) + + def on_internalInstallChk_clicked(self, checked: bool): + tweaks["InternalInstall"].set_enabled(checked) + def on_internalStorageChk_clicked(self, checked: bool): + tweaks["InternalStorage"].set_enabled(checked) + + 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) + + + ## FEATURE FLAGS PAGE + def on_clockAnimChk_toggled(self, checked: bool): + tweaks["ClockAnim"].set_enabled(checked) + def on_lockscreenChk_clicked(self, checked: bool): + tweaks["Lockscreen"].set_enabled(checked) + + def on_photosChk_clicked(self, checked: bool): + tweaks["PhotoUI"].set_enabled(checked) + def on_aiChk_clicked(self, checked: bool): + tweaks["AI"].set_enabled(checked) + + + ## EU ENABLER PAGE + def on_euEnablerEnabledChk_toggled(self, checked: bool): + tweaks["EUEnabler"].set_enabled(checked) + self.ui.euEnablerPageContent.setDisabled(not checked) + def on_methodChoiceDrp_activated(self, index: int): + tweaks["EUEnabler"].set_selected_option(index) + def on_regionCodeTxt_textEdited(self, text: str): + tweaks["EUEnabler"].set_region_code(text) + + + ## SETTINGS PAGE + def on_allowWifiApplyingChk_toggled(self, checked: bool): + self.device_manager.apply_over_wifi = checked + # save the setting + self.settings.setValue("apply_over_wifi", checked) + + + ## APPLY PAGE + def on_chooseGestaltBtn_clicked(self): + selected_file, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Select Mobile Gestalt File", "", "Plist Files (*.plist)", options=QtWidgets.QFileDialog.ReadOnly) + if selected_file == "" or selected_file == None: + self.device_manager.data_singleton.gestalt_path = None + self.ui.gestaltLocationLbl.setText("None") + else: + # verify that the gestalt is correct and compatible + with open(selected_file, 'rb') as in_fp: + gestalt_plist = plistlib.load(in_fp) + if not "CacheExtra" in gestalt_plist: + detailsBox = QtWidgets.QMessageBox() + detailsBox.setIcon(QtWidgets.QMessageBox.Critical) + detailsBox.setWindowTitle("Error!") + detailsBox.setText("The file is not a mobile gestalt file!") + detailsBox.exec() + return + if ( + not "qNNddlUK+B/YlooNoymwgA" in gestalt_plist["CacheExtra"] + or gestalt_plist["CacheExtra"]["qNNddlUK+B/YlooNoymwgA"] != self.device_manager.data_singleton.current_device.version + or gestalt_plist["CacheExtra"]["0+nc/Udy4WNG8S+Q7a/s1A"] != self.device_manager.data_singleton.current_device.model + or not "0+nc/Udy4WNG8S+Q7a/s1A" in gestalt_plist["CacheExtra"] + ): + dialog = GestaltDialog( + device_manager=self.device_manager, + gestalt_label=self.ui.gestaltLocationLbl, + selected_file=selected_file + ) + dialog.exec() + self.device_manager.data_singleton.gestalt_path = selected_file + self.ui.gestaltLocationLbl.setText(selected_file) + + def update_label(self, txt: str): + self.ui.statusLbl.setText(txt) + def update_bar(self, percent): + self.ui.restoreProgressBar.setValue(int(percent)) + 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) + + @QtCore.Slot() + def on_applyTweaksBtn_clicked(self): + # TODO: Add safety here + self.device_manager.apply_changes(update_label=self.update_label) diff --git a/icon/app-indicator.svg b/icon/app-indicator.svg new file mode 100644 index 0000000..fb2ada2 --- /dev/null +++ b/icon/app-indicator.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/arrow-clockwise.svg b/icon/arrow-clockwise.svg new file mode 100644 index 0000000..6fa35a6 --- /dev/null +++ b/icon/arrow-clockwise.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/brush.svg b/icon/brush.svg new file mode 100644 index 0000000..2768307 --- /dev/null +++ b/icon/brush.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/icon/caret-down-fill.svg b/icon/caret-down-fill.svg new file mode 100644 index 0000000..ab2770e --- /dev/null +++ b/icon/caret-down-fill.svg @@ -0,0 +1,3 @@ + + + diff --git a/icon/check-circle.svg b/icon/check-circle.svg new file mode 100644 index 0000000..5c2ef83 --- /dev/null +++ b/icon/check-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/compass.svg b/icon/compass.svg new file mode 100644 index 0000000..51b13ff --- /dev/null +++ b/icon/compass.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/currency-dollar.svg b/icon/currency-dollar.svg new file mode 100644 index 0000000..07b2f55 --- /dev/null +++ b/icon/currency-dollar.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/icon/discord.svg b/icon/discord.svg new file mode 100644 index 0000000..60d995c --- /dev/null +++ b/icon/discord.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/icon/file-earmark-zip.svg b/icon/file-earmark-zip.svg new file mode 100644 index 0000000..2330876 --- /dev/null +++ b/icon/file-earmark-zip.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/flag.svg b/icon/flag.svg new file mode 100644 index 0000000..646648a --- /dev/null +++ b/icon/flag.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/icon/folder.svg b/icon/folder.svg new file mode 100644 index 0000000..54d8b1c --- /dev/null +++ b/icon/folder.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/icon/gear.svg b/icon/gear.svg new file mode 100644 index 0000000..ca8470f --- /dev/null +++ b/icon/gear.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/geo-alt.svg b/icon/geo-alt.svg new file mode 100644 index 0000000..e0df02f --- /dev/null +++ b/icon/geo-alt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/github.svg b/icon/github.svg new file mode 100644 index 0000000..acf0263 --- /dev/null +++ b/icon/github.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/icon/hdd.svg b/icon/hdd.svg new file mode 100644 index 0000000..3de2da4 --- /dev/null +++ b/icon/hdd.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/heart-fill.svg b/icon/heart-fill.svg new file mode 100644 index 0000000..75ff70c --- /dev/null +++ b/icon/heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/icon/house.svg b/icon/house.svg new file mode 100644 index 0000000..886ecfe --- /dev/null +++ b/icon/house.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/icon/import.svg b/icon/import.svg new file mode 100644 index 0000000..4b3c056 --- /dev/null +++ b/icon/import.svg @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/icon/iphone-island.svg b/icon/iphone-island.svg new file mode 100644 index 0000000..33112cf --- /dev/null +++ b/icon/iphone-island.svg @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/icon/pencil.svg b/icon/pencil.svg new file mode 100644 index 0000000..4849bbb --- /dev/null +++ b/icon/pencil.svg @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/icon/phone.svg b/icon/phone.svg new file mode 100644 index 0000000..e77a02f --- /dev/null +++ b/icon/phone.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/plus.svg b/icon/plus.svg new file mode 100644 index 0000000..9fc8d09 --- /dev/null +++ b/icon/plus.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/icon/star.svg b/icon/star.svg new file mode 100644 index 0000000..79c5e9d --- /dev/null +++ b/icon/star.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/icon/toggles.svg b/icon/toggles.svg new file mode 100644 index 0000000..7cbfc65 --- /dev/null +++ b/icon/toggles.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/icon/trash.svg b/icon/trash.svg new file mode 100644 index 0000000..c153bd2 --- /dev/null +++ b/icon/trash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/twitter.svg b/icon/twitter.svg new file mode 100644 index 0000000..fb29a13 --- /dev/null +++ b/icon/twitter.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/icon/wifi.svg b/icon/wifi.svg new file mode 100644 index 0000000..1bd4c43 --- /dev/null +++ b/icon/wifi.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/icon/x-lg.svg b/icon/x-lg.svg new file mode 100644 index 0000000..879ef4d --- /dev/null +++ b/icon/x-lg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/main_app.py b/main_app.py index 77cbbef..0acd001 100644 --- a/main_app.py +++ b/main_app.py @@ -1,147 +1,16 @@ -from exploit.restore import restore_file -from pathlib import Path -import plistlib -import traceback +import sys +from PySide6 import QtCore, QtWidgets -running = True -passed_check = False -# tweaks -dynamic_island_enabled = False -current_model_name = "" -boot_chime_enabled = False -charge_limit_enabled = False -stage_manager_enabled = False -shutter_sound_enabled = False -always_on_display_enabled = False -apple_pencil_enabled = False -action_button_enabled = False -internal_storage_enabled = False +from gui.main_window import MainWindow +from devicemanagement.device_manager import DeviceManager -gestalt_path = Path.joinpath(Path.cwd(), "com.apple.MobileGestalt.plist") +if __name__ == "__main__": + app = QtWidgets.QApplication([]) + dm = DeviceManager() + dm.get_devices() -def print_option(num: int, active: bool, message: str): - txt = str(num) + ". " - if active: - txt = txt + "[Y] " - txt = txt + message - print(txt) - -while running: - print("""\n\n\n\n - - ,--. - ,--.'| ___ - ,--,: : | ,--.'|_ -,`--.'`| ' : ,--, | | :,' -| : : | | ,'_ /| ,----._,. ,----._,. : : ' : -: | \\ | : .--. | | : / / ' / / / ' / ,---. .;__,' / -| : ' '; |,'_ /| : . || : || : | / \\ | | | -' ' ;. ;| ' | | . .| | .\\ .| | .\\ . / / |:__,'| : -| | | \\ || | ' | | |. ; '; |. ; '; |. ' / | ' : |__ -' : | ; .': | : ; ; |' . . |' . . |' ; /| | | '.'| -| | '`--' ' : `--' \\`---`-'| | `---`-'| |' | / | ; : ; -' : | : , .-./.'__/\\_: | .'__/\\_: || : | | , / -; |.' `--`----' | : : | : : \\ \\ / ---`-' -'---' \\ \\ / \\ \\ / `----' - `--`-' `--`-' - """) - print("by LeminLimez") - print("v1.2\n\n") - print("\nPlease back up your device before using!") - - if not passed_check and Path.exists(gestalt_path) and Path.is_file(gestalt_path): - passed_check = True + widget = MainWindow(device_manager=dm) + widget.resize(800, 600) + widget.show() - if passed_check: - print_option(1, dynamic_island_enabled, "Toggle Dynamic Island") - print_option(2, current_model_name != "", "Set Device Model Name") - print_option(3, boot_chime_enabled, "Toggle Boot Chime") - print_option(4, charge_limit_enabled, "Toggle Charge Limit") - print_option(5, stage_manager_enabled, "Toggle Stage Manager Supported") - print_option(6, shutter_sound_enabled, "Disable Region Restrictions (ie. Shutter Sound)") - print_option(7, always_on_display_enabled, "Always On Display (iOS 18+ only)") - print_option(8, apple_pencil_enabled, "Toggle Apple Pencil") - print_option(9, action_button_enabled, "Toggle Action Button") - print_option(10, internal_storage_enabled, "Toggle Internal Storage") - print("\n11. Apply") - print("0. Exit\n") - page = int(input("Enter a number: ")) - if page == 1: - dynamic_island_enabled = not dynamic_island_enabled - elif page == 2: - print("\n\nSet Model Name") - print("Leave blank to turn off custom name.\n") - name = input("Enter Model Name: ") - current_model_name = name - elif page == 3: - boot_chime_enabled = not boot_chime_enabled - elif page == 4: - charge_limit_enabled = not charge_limit_enabled - elif page == 5: - stage_manager_enabled = not stage_manager_enabled - elif page == 6: - shutter_sound_enabled = not shutter_sound_enabled - elif page == 7: - always_on_display_enabled = not always_on_display_enabled - elif page == 8: - apple_pencil_enabled = not apple_pencil_enabled - elif page == 9: - action_button_enabled = not action_button_enabled - elif page == 10: - internal_storage_enabled = not internal_storage_enabled - elif page == 11: - print() - # set the tweaks and apply - # first open the file in read mode - with open(gestalt_path, 'rb') as in_fp: - plist = plistlib.load(in_fp) - - # set the plist keys - if dynamic_island_enabled: - plist["CacheExtra"]["oPeik/9e8lQWMszEjbPzng"]["ArtworkDeviceSubType"] = 2556 - if current_model_name != "": - plist["CacheExtra"]["oPeik/9e8lQWMszEjbPzng"]["ArtworkDeviceProductDescription"] = current_model_name - if boot_chime_enabled: - plist["CacheExtra"]["QHxt+hGLaBPbQJbXiUJX3w"] = True - if charge_limit_enabled: - plist["CacheExtra"]["37NVydb//GP/GrhuTN+exg"] = True - if stage_manager_enabled: - plist["CacheExtra"]["qeaj75wk3HF4DwQ8qbIi7g"] = 1 - if shutter_sound_enabled: - plist["CacheExtra"]["h63QSdBCiT/z0WU6rdQv6Q"] = "US" - plist["CacheExtra"]["zHeENZu+wbg7PUprwNwBWg"] = "LL/A" - if always_on_display_enabled: - plist["CacheExtra"]["2OOJf1VhaM7NxfRok3HbWQ"] = True - plist["CacheExtra"]["j8/Omm6s1lsmTDFsXjsBfA"] = True - if apple_pencil_enabled: - plist["CacheExtra"]["yhHcB0iH0d1XzPO/CFd3ow"] = True - if action_button_enabled: - plist["CacheExtra"]["cT44WE1EohiwRzhsZ8xEsw"] = True - if internal_storage_enabled: - plist["CacheExtra"]["LBJfwOEzExRxzlAnSuI7eg"] = True - - # write back to the file - with open(gestalt_path, 'wb') as out_fp: - plistlib.dump(plist, out_fp) - # restore to the device - try: - restore_file(fp=gestalt_path, restore_path="/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/", restore_name="com.apple.MobileGestalt.plist") - input("Success! Reboot your device to see the changes.") - except Exception as e: - print(traceback.format_exc()) - input("Press Enter to continue...") - running = False - elif page == 0: - # exit the panel - print("Goodbye!") - running = False - 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) + sys.exit(app.exec()) \ No newline at end of file diff --git a/nugget.ico b/nugget.ico new file mode 100644 index 0000000..30498bb Binary files /dev/null and b/nugget.ico differ diff --git a/qt/__pycache__/ui_mainwindow.cpython-312.pyc b/qt/__pycache__/ui_mainwindow.cpython-312.pyc new file mode 100644 index 0000000..a6e0f5c Binary files /dev/null and b/qt/__pycache__/ui_mainwindow.cpython-312.pyc differ diff --git a/qt/mainwindow.ui b/qt/mainwindow.ui new file mode 100644 index 0000000..926c131 --- /dev/null +++ b/qt/mainwindow.ui @@ -0,0 +1,3975 @@ + + + Nugget + + + + 0 + 0 + 1000 + 600 + + + + + 0 + 0 + + + + + 1000 + 600 + + + + + 1000 + 600 + + + + Nugget + + + 1.000000000000000 + + + QWidget { + color: #FFFFFF; + background-color: transparent; + spacing: 0px; +} + +QWidget:focus { + outline: none; +} + +QWidget [cls=central] { + background-color: #1e1e1e; + border-radius: 0px; + border: 1px solid #4B4B4B; +} + +QLabel { + font-size: 14px; +} + +QToolButton { + background-color: #3b3b3b; + border: none; + color: #e8e8e8; + font-size: 14px; + min-height: 35px; + icon-size: 16px; + padding-left: 10px; + padding-right: 10px; + border-radius: 8px; +} + +QToolButton[cls=sidebarBtn] { + background-color: transparent; + icon-size: 24px; +} + +QToolButton:pressed { + background-color: #535353; + color: #FFFFFF; +} + +QToolButton:checked { + background-color: #2860ca; + color: #FFFFFF; +} + +QCheckBox { + spacing: 8px; + font-size: 14px; +} + +QRadioButton { + spacing: 8px; + font-size: 14px; +} + +QLineEdit { + border: none; + background-color: transparent; + color: #FFFFFF; + font-size: 14px; +} + +QScrollBar:vertical { + background: transparent; + width: 8px; +} + +QScrollBar:horizontal { + background: transparent; + height: 8px; +} + +QScrollBar::handle { + background: #3b3b3b; + border-radius: 4px; +} + +QScrollBar::handle:pressed { + background: #535353; +} + +QScrollBar::add-line, +QScrollBar::sub-line { + background: none; +} + +QScrollBar::add-page, +QScrollBar::sub-page { + background: none; +} + +QSlider::groove:horizontal { + background-color: #3b3b3b; + height: 4px; + border-radius: 2px; +} + +QSlider::handle:horizontal { + background-color: #535353; + width: 8px; + margin: -8px 0; + border-radius: 4px; +} + +QSlider::handle:horizontal:pressed { + background-color: #3b82f7; +} + +QSlider::tick:horizontal { + background-color: #535353; + width: 1px; +} + + + + + true + + + Qt::NoContextMenu + + + + + + central + + + + + + + 1 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 300 + 0 + + + + + 1 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + false + + + QToolButton { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; +} + + + + :/icon/phone.svg:/icon/phone.svg + + + + + + + #devicePicker { + background-color: #3b3b3b; + border: none; + color: #e8e8e8; + font-size: 14px; + min-height: 38px; + min-width: 35px; + padding-left: 8px; +} + +#devicePicker::drop-down { + image: url(:/icon/caret-down-fill.svg); + icon-size: 16px; + subcontrol-position: right center; + margin-right: 8px; +} + +#devicePicker QAbstractItemView { + background-color: #3b3b3b; + outline: none; + margin-top: 1px; +} + +#devicePicker QAbstractItemView::item { + background-color: #3b3b3b; + color: #e8e8e8; + min-height: 38px; + padding-left: 8px; +} + +#devicePicker QAbstractItemView::item:hover { + background-color: #535353; + color: #ffffff; +} + + + -1 + + + None + + + true + + + + + + + + + + QToolButton { + border-radius: 0px; +} + + + + :/icon/arrow-clockwise.svg:/icon/arrow-clockwise.svg + + + false + + + Qt::ToolButtonIconOnly + + + btn + + + + + + + + + + false + + + + 0 + 0 + + + + QToolButton { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} + + + Nugget + + + + + + + + + + + 0 + 20 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 300 + 0 + + + + QFrame { + color: #414141; +} + + + + 0 + + + 9 + + + 9 + + + 0 + + + + + + 0 + 0 + + + + Home + + + + :/icon/house.svg:/icon/house.svg + + + true + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + sidebarBtn + + + + + + + true + + + + 0 + 0 + + + + Explore + + + + :/icon/compass.svg:/icon/compass.svg + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + sidebarBtn + + + + + + + + 0 + 0 + + + + Location Simulation + + + + :/icon/geo-alt.svg:/icon/geo-alt.svg + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + sidebarBtn + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + Custom Operations + + + + :/icon/pencil.svg:/icon/pencil.svg + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + sidebarBtn + + + + + + + + 0 + 0 + + + + Mobile Gestalt + + + + :/icon/iphone-island.svg:/icon/iphone-island.svg + + + + 24 + 28 + + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + Qt::NoArrow + + + sidebarBtn + + + + + + + + 0 + 0 + + + + + .AppleSystemUIFont + -1 + + + + Feature Flags + + + + :/icon/flag.svg:/icon/flag.svg + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + sidebarBtn + + + + + + + + 0 + 0 + + + + EU Enabler + + + + :/icon/geo-alt.svg:/icon/geo-alt.svg + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + sidebarBtn + + + + + + + + 0 + 0 + + + + Internal Options + + + + :/icon/hdd.svg:/icon/hdd.svg + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + sidebarBtn + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + Apply + + + + :/icon/check-circle.svg:/icon/check-circle.svg + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + sidebarBtn + + + + + + + + 0 + 0 + + + + Settings + + + + :/icon/gear.svg:/icon/gear.svg + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + sidebarBtn + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 0 + 0 + + + + + 0 + + + 9 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 0 + + + 9 + + + 0 + + + 9 + + + + + false + + + QToolButton { + icon-size: 24px; + background-color: transparent; + padding-left: 0px; + padding-right: 5px; + border-radius: 0px; +} + + + + :/icon/phone.svg:/icon/phone.svg + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + -1 + false + + + + Phone + + + + + + + PointingHandCursor + + + <a style="text-decoration:none; color: white" href="#">Version</a> + + + Qt::RichText + + + false + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + + 50 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + QToolButton { + background-color: transparent; + padding: 0px; +} + + + ... + + + + :/credits/big_nugget.png:/credits/big_nugget.png + + + + 150 + 200 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + -1 + true + + + + QLabel { + font-size: 35px; +} + + + Nugget + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Join the Discord + + + + :/icon/discord.svg:/icon/discord.svg + + + Qt::ToolButtonTextBesideIcon + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 15 + + + 0 + + + 30 + + + 0 + + + 30 + + + + + true + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + + 150 + 35 + + + + QToolButton { + background: none; +} + + + LeminLimez + + + + :/credits/LeminLimez.png:/credits/LeminLimez.png + + + Qt::ToolButtonTextBesideIcon + + + + + + + QToolButton { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + background: none; + border: 1px solid #3b3b3b; +} + +QToolButton:pressed { + background-color: #535353; + color: #FFFFFF; +} + + + ... + + + + :/icon/twitter.svg:/icon/twitter.svg + + + + + + + QToolButton { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + background: none; + border: 1px solid #3b3b3b; + border-left: none; +} + +QToolButton:pressed { + background-color: #535353; + color: #FFFFFF; +} + + + ... + + + + :/icon/currency-dollar.svg:/icon/currency-dollar.svg + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + false + + + + 0 + 0 + + + + QToolButton { + background: none; +} + + + Main Developer + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 40 + 20 + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + + 150 + 35 + + + + QToolButton { + background: none; +} + + + With Help From + + + Qt::ToolButtonTextBesideIcon + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + QToolButton { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + background: none; + border: 1px solid #3b3b3b; +} + +QToolButton:pressed { + background-color: #535353; + color: #FFFFFF; +} + + + JJTech +Sparserestore + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + QToolButton { + border-radius: 0px; + background: none; + border: 1px solid #3b3b3b; + border-left: none; +} + +QToolButton:pressed { + background-color: #535353; + color: #FFFFFF; +} + + + disfordottie +Clock Anim, Photos UI + + + + + + + + 0 + 0 + + + + + 0 + 37 + + + + QToolButton { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + background: none; + border: 1px solid #3b3b3b; + border-left: none; +} + +QToolButton:pressed { + background-color: #535353; + color: #FFFFFF; +} + + + lrdsnow +EU Enabler + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + false + + + + 150 + 35 + + + + QToolButton { + background: none; +} + + + Additional Thanks + + + + + + + + 0 + 0 + + + + QToolButton { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + background: none; + border: 1px solid #3b3b3b; +} + +QToolButton:pressed { + background-color: #535353; + color: #FFFFFF; +} + + + pymobiledevice3 + + + + + + + + 0 + 0 + + + + QToolButton { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + background: none; + border: 1px solid #3b3b3b; + border-left: none; +} + +QToolButton:pressed { + background-color: #535353; + color: #FFFFFF; +} + + + Qt Creator + + + + + + + + + + + + + Nugget GUI - Version 2.2 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 0 + + + 0 + + + + + false + + + QToolButton { + icon-size: 24px; + background-color: transparent; + padding-left: 0px; + padding-right: 5px; + border-radius: 0px; +} + + + + :/icon/compass.svg:/icon/compass.svg + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + -1 + false + + + + Explore + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 0 + + + 0 + + + + + false + + + QToolButton { + icon-size: 24px; + background-color: transparent; + padding-left: 0px; + padding-right: 5px; + border-radius: 0px; +} + + + + :/icon/geo-alt.svg:/icon/geo-alt.svg + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + -1 + false + + + + Location Simulation + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Start Location Simulation + + + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Latitude + + + Qt::AlignCenter + + + + + + + Qt::AlignCenter + + + XXX.XXXXX + + + + + + + Longitude + + + Qt::AlignCenter + + + + + + + Qt::AlignCenter + + + XXX.XXXXX + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Set Location + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Reset Location + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 0 + + + 9 + + + 0 + + + 9 + + + + + true + + + QToolButton { + icon-size: 24px; + background-color: transparent; + padding-left: 0px; + padding-right: 5px; + border-radius: 0px; +} + + + + :/icon/iphone-island.svg:/icon/iphone-island.svg + + + + 30 + 30 + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + -1 + false + + + + Mobile Gestalt Modifications + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + false + + + QToolButton { + background: none; +} + + + Import Theme: + + + + + + + ... + + + + :/icon/folder.svg:/icon/folder.svg + + + + + + + ... + + + + :/icon/file-earmark-zip.svg:/icon/file-earmark-zip.svg + + + + + + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + Customize Individual Apps + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Hide/Show All App Names + + + + + + + + 0 + 0 + + + + Toggle All "Border" + + + + + + + + 0 + 0 + + + + Toggle All "Add to Device" + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 0 + + + 0 + + + + + false + + + QToolButton { + icon-size: 24px; + background-color: transparent; + padding-left: 0px; + padding-right: 5px; + border-radius: 0px; +} + + + + :/icon/iphone-island.svg:/icon/iphone-island.svg + + + + 30 + 30 + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + -1 + false + + + + Mobile Gestalt + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 16 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + Qt::ScrollBarAlwaysOff + + + + + 0 + 0 + 650 + 1200 + + + + + 650 + 1200 + + + + + 650 + 1200 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Device Subtype Preset + + + + + + + + 0 + 0 + + + + + 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 + + + 15 + + + + None + + + + + 2436 (iPhone X Gestures for SE phones) + + + + + 2556 (iPhone 14 Pro Dynamic Island) + + + + + 2796 (iPhone 14 Pro Max Dynamic Island) + + + + + 2976 (iPhone 15 Pro Max Dynamic Island) + + + + + 2622 (iPhone 16 Pro Dynamic Island) + + + + + 2868 (iPhone 16 Pro Max Dynamic Island) + + + + + + + + Change Device Model Name + + + + + + + Model Name + + + + + + + Enable Boot Chime + + + + + + + Enable Charge Limit + + + + + + + Enable Tap to Wake (for iPhone SEs) + + + + + + + Enable iPhone 16 Settings + + + + + + + Disable Wallpaper Parallax + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + Enable Stage Manager Supported (WARNING: risky on some devices, mainly phones) + + + + + + + Allow iPad Apps on iPhone + + + + + + + Disable Region Restrictions (ie. Shutter Sound) + + + + + + + Enable Apple Pencil Settings Tab + + + + + + + Enable Action Button Settings Tab + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + Set as Apple Internal Install (ie Metal HUD in any app) + + + + + + + Enable Internal Storage (WARNING: risky for some devices, mainly iPads) + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + Enable Collision SOS + + + + + + + Enable Sleep Apnea (real) [for Apple Watches] + + + + + + + Enable Always On Display + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 0 + + + 9 + + + 0 + + + 9 + + + + + false + + + QToolButton { + icon-size: 24px; + background-color: transparent; + padding-left: 0px; + padding-right: 5px; + border-radius: 0px; +} + + + + :/icon/pencil.svg:/icon/pencil.svg + + + + 25 + 25 + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + -1 + false + + + + Custom Operations + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + true + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + -1 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + true + + + Import .cowperation + + + + :/icon/import.svg:/icon/import.svg + + + + 20 + 20 + + + + Qt::ToolButtonTextBesideIcon + + + + + + + true + + + + 0 + 0 + + + + + 0 + 35 + + + + New Operation + + + + :/icon/plus.svg:/icon/plus.svg + + + + 16 + 16 + + + + false + + + true + + + Qt::ToolButtonTextBesideIcon + + + + + + + + + true + + + + 0 + 0 + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 0 + + + 9 + + + 0 + + + 9 + + + + + false + + + QToolButton { + icon-size: 24px; + background-color: transparent; + padding-left: 0px; + padding-right: 5px; + border-radius: 0px; +} + + + + :/icon/gear.svg:/icon/gear.svg + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + -1 + false + + + + Nugget Settings + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 16 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + true + + + + 650 + 16777215 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Allow Applying Over WiFi + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 0 + + + 9 + + + 0 + + + 9 + + + + + false + + + QToolButton { + icon-size: 24px; + background-color: transparent; + padding-left: 0px; + padding-right: 5px; + border-radius: 0px; +} + + + + :/icon/flag.svg:/icon/flag.svg + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + -1 + false + + + + Feature Flags + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 16 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + true + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Enable Lockscreen Clock Animation + + + + + + + Enable Duplicate Lockscreen Button and Lockscreen Quickswitch + + + + + + + false + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + Enable Old Photo UI + + + + + + + Enable Apple Intelligence + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 0 + + + 9 + + + 0 + + + 9 + + + + + false + + + QToolButton { + icon-size: 24px; + background-color: transparent; + padding-left: 0px; + padding-right: 5px; + border-radius: 0px; +} + + + + :/icon/geo-alt.svg:/icon/geo-alt.svg + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + -1 + false + + + + EU Enabler + + + + + + + Enabled + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Method Type + + + + + + + + 150 + 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; +} + + + + Method 1 + + + + + Method 2 + + + + + + + + Region Code (Should be 2 letters) + + + + + + + Region Code (Default: US) + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + 0 + + + 0 + + + + + false + + + QToolButton { + icon-size: 24px; + background-color: transparent; + padding-left: 0px; + padding-right: 5px; + border-radius: 0px; +} + + + + :/icon/check-circle.svg:/icon/check-circle.svg + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + -1 + false + + + + Apply + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + QFrame { + color: #414141; +} + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Current gestalt file location: + + + Qt::AlignCenter + + + + + + + None + + + Qt::AlignCenter + + + + + + + 10 + + + 0 + + + + + Choose Gestalt File + + + + :/icon/folder.svg:/icon/folder.svg + + + Qt::ToolButtonTextBesideIcon + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Apply Changes + + + + :/icon/check-circle.svg:/icon/check-circle.svg + + + Qt::ToolButtonTextBesideIcon + + + + + + + + + + Ready! + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + 0 + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Remove All Tweaks + + + + + + + Reset Mobile Gestalt + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qt/mainwindow_ui.py b/qt/mainwindow_ui.py new file mode 100644 index 0000000..7daedfe --- /dev/null +++ b/qt/mainwindow_ui.py @@ -0,0 +1,2231 @@ +# -*- 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.customOperationsPageBtn = QToolButton(self.sidebar) + self.customOperationsPageBtn.setObjectName(u"customOperationsPageBtn") + sizePolicy2.setHeightForWidth(self.customOperationsPageBtn.sizePolicy().hasHeightForWidth()) + self.customOperationsPageBtn.setSizePolicy(sizePolicy2) + icon5 = QIcon() + icon5.addFile(u":/icon/pencil.svg", QSize(), QIcon.Normal, QIcon.Off) + self.customOperationsPageBtn.setIcon(icon5) + self.customOperationsPageBtn.setCheckable(True) + self.customOperationsPageBtn.setAutoExclusive(True) + self.customOperationsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) + + self.verticalLayout.addWidget(self.customOperationsPageBtn) + + self.gestaltPageBtn = QToolButton(self.sidebar) + self.gestaltPageBtn.setObjectName(u"gestaltPageBtn") + sizePolicy2.setHeightForWidth(self.gestaltPageBtn.sizePolicy().hasHeightForWidth()) + self.gestaltPageBtn.setSizePolicy(sizePolicy2) + icon6 = QIcon() + icon6.addFile(u":/icon/iphone-island.svg", QSize(), QIcon.Normal, QIcon.Off) + self.gestaltPageBtn.setIcon(icon6) + 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) + icon7 = QIcon() + icon7.addFile(u":/icon/flag.svg", QSize(), QIcon.Normal, QIcon.Off) + self.featureFlagsPageBtn.setIcon(icon7) + 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.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.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.verticalLayout_26.addWidget(self.discordBtn) + + 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" +"}") + icon13 = QIcon() + icon13.addFile(u":/credits/LeminLimez.png", QSize(), QIcon.Normal, QIcon.Off) + self.leminBtn.setIcon(icon13) + 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" +"}") + icon14 = QIcon() + icon14.addFile(u":/icon/twitter.svg", QSize(), QIcon.Normal, QIcon.Off) + self.leminTwitterBtn.setIcon(icon14) + + self.horizontalLayout_6.addWidget(self.leminTwitterBtn) + + 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" +"}") + icon15 = QIcon() + icon15.addFile(u":/icon/currency-dollar.svg", QSize(), QIcon.Normal, QIcon.Off) + self.leminKoFiBtn.setIcon(icon15) + + 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.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 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + sizePolicy5.setHorizontalStretch(0) + sizePolicy5.setVerticalStretch(0) + sizePolicy5.setHeightForWidth(self.exploreThemesCnt.sizePolicy().hasHeightForWidth()) + self.exploreThemesCnt.setSizePolicy(sizePolicy5) + + self.verticalLayout_31.addWidget(self.exploreThemesCnt) + + self.pages.addWidget(self.explorePage) + 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.verticalWidget2 = QWidget(self.locSimCnt) + self.verticalWidget2.setObjectName(u"verticalWidget2") + self.verticalLayout_29 = QVBoxLayout(self.verticalWidget2) + self.verticalLayout_29.setObjectName(u"verticalLayout_29") + self.verticalLayout_29.setContentsMargins(0, 0, 0, 0) + self.label_7 = QLabel(self.verticalWidget2) + self.label_7.setObjectName(u"label_7") + self.label_7.setAlignment(Qt.AlignCenter) + + self.verticalLayout_29.addWidget(self.label_7) + + self.latitudeTxt = QLineEdit(self.verticalWidget2) + self.latitudeTxt.setObjectName(u"latitudeTxt") + self.latitudeTxt.setAlignment(Qt.AlignCenter) + + self.verticalLayout_29.addWidget(self.latitudeTxt) + + self.label_11 = QLabel(self.verticalWidget2) + self.label_11.setObjectName(u"label_11") + self.label_11.setAlignment(Qt.AlignCenter) + + self.verticalLayout_29.addWidget(self.label_11) + + self.longitudeTxt = QLineEdit(self.verticalWidget2) + self.longitudeTxt.setObjectName(u"longitudeTxt") + self.longitudeTxt.setAlignment(Qt.AlignCenter) + + self.verticalLayout_29.addWidget(self.longitudeTxt) + + self.horizontalWidget4 = QWidget(self.verticalWidget2) + self.horizontalWidget4.setObjectName(u"horizontalWidget4") + self.horizontalLayout_3 = QHBoxLayout(self.horizontalWidget4) + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) + self.setLocationBtn = QToolButton(self.horizontalWidget4) + self.setLocationBtn.setObjectName(u"setLocationBtn") + + self.horizontalLayout_3.addWidget(self.setLocationBtn) + + + self.verticalLayout_29.addWidget(self.horizontalWidget4) + + self.horizontalWidget_22 = QWidget(self.verticalWidget2) + 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.verticalWidget2) + + + 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.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(icon6) + 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.horizontalWidget5 = QWidget(self.horizontalWidget_8) + self.horizontalWidget5.setObjectName(u"horizontalWidget5") + self.horizontalLayout_26 = QHBoxLayout(self.horizontalWidget5) + self.horizontalLayout_26.setObjectName(u"horizontalLayout_26") + self.horizontalLayout_26.setContentsMargins(0, 0, 0, 0) + self.importThemeBtn = QToolButton(self.horizontalWidget5) + 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.horizontalWidget5) + self.importThemeFolderBtn.setObjectName(u"importThemeFolderBtn") + icon16 = QIcon() + icon16.addFile(u":/icon/folder.svg", QSize(), QIcon.Normal, QIcon.Off) + self.importThemeFolderBtn.setIcon(icon16) + + self.horizontalLayout_26.addWidget(self.importThemeFolderBtn) + + self.importThemeZipBtn = QToolButton(self.horizontalWidget5) + self.importThemeZipBtn.setObjectName(u"importThemeZipBtn") + icon17 = QIcon() + icon17.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Normal, QIcon.Off) + self.importThemeZipBtn.setIcon(icon17) + + self.horizontalLayout_26.addWidget(self.importThemeZipBtn) + + + self.horizontalLayout_23.addWidget(self.horizontalWidget5) + + + 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.horizontalWidget6 = QWidget(self.themesPageContent) + self.horizontalWidget6.setObjectName(u"horizontalWidget6") + self.horizontalLayout_16 = QHBoxLayout(self.horizontalWidget6) + self.horizontalLayout_16.setObjectName(u"horizontalLayout_16") + self.horizontalLayout_16.setContentsMargins(0, 0, 0, 0) + self.hideNamesBtn = QToolButton(self.horizontalWidget6) + 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.horizontalWidget6) + 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.horizontalWidget6) + 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.horizontalWidget6) + + + self.verticalLayout_23.addWidget(self.themesPageContent) + + self.pages.addWidget(self.themingPage) + 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(icon6) + 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, 0, 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.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.horizontalWidget7 = QWidget(self.gestaltPageContent) + self.horizontalWidget7.setObjectName(u"horizontalWidget7") + self.horizontalLayout_10 = QHBoxLayout(self.horizontalWidget7) + self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") + self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0) + + self.verticalLayout_8.addWidget(self.horizontalWidget7) + + 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.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.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.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.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" +"}") + self.toolButton_12.setIcon(icon5) + 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) + icon18 = QIcon() + icon18.addFile(u":/icon/import.svg", QSize(), QIcon.Normal, QIcon.Off) + self.importOperationBtn.setIcon(icon18) + 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)) + icon19 = QIcon() + icon19.addFile(u":/icon/plus.svg", QSize(), QIcon.Normal, QIcon.Off) + self.newOperationBtn.setIcon(icon19) + 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.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.settingsPage = QWidget() + self.settingsPage.setObjectName(u"settingsPage") + self.verticalLayout_10 = QVBoxLayout(self.settingsPage) + self.verticalLayout_10.setObjectName(u"verticalLayout_10") + self.verticalLayout_10.setContentsMargins(0, 0, 0, 0) + self.horizontalWidget_4 = QWidget(self.settingsPage) + 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(icon10) + + 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_17 = QSpacerItem(20, 16, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_7.addItem(self.verticalSpacer_17) + + + 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.settingsPage) + 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.settingsPageContent = QWidget(self.settingsPage) + self.settingsPageContent.setObjectName(u"settingsPageContent") + self.settingsPageContent.setEnabled(True) + self.settingsPageContent.setMaximumSize(QSize(650, 16777215)) + self._2 = QVBoxLayout(self.settingsPageContent) + self._2.setObjectName(u"_2") + self._2.setContentsMargins(0, 0, 0, 0) + self.allowWifiApplyingChk = QCheckBox(self.settingsPageContent) + self.allowWifiApplyingChk.setObjectName(u"allowWifiApplyingChk") + self.allowWifiApplyingChk.setChecked(True) + + self._2.addWidget(self.allowWifiApplyingChk) + + self.verticalSpacer_5 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self._2.addItem(self.verticalSpacer_5) + + + self.verticalLayout_10.addWidget(self.settingsPageContent) + + self.pages.addWidget(self.settingsPage) + 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(icon7) + + 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.setupOptionsLbl = QLabel(self.verticalWidget_5) + self.setupOptionsLbl.setObjectName(u"setupOptionsLbl") + self.setupOptionsLbl.setFont(font1) + + self.verticalLayout_15.addWidget(self.setupOptionsLbl) + + self.euEnablerEnabledChk = QCheckBox(self.verticalWidget_5) + self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk") + + self.verticalLayout_15.addWidget(self.euEnablerEnabledChk) + + + 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.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.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.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.verticalWidget3 = QWidget(self.applyPage) + self.verticalWidget3.setObjectName(u"verticalWidget3") + self.verticalLayout_24 = QVBoxLayout(self.verticalWidget3) + self.verticalLayout_24.setObjectName(u"verticalLayout_24") + self.verticalLayout_24.setContentsMargins(0, 0, 0, 0) + self.locSimPageHeader_2 = QWidget(self.verticalWidget3) + 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.verticalWidget3) + 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.verticalWidget3) + self.modifiedTweaksLbl.setObjectName(u"modifiedTweaksLbl") + self.modifiedTweaksLbl.setAlignment(Qt.AlignCenter) + + self.verticalLayout_24.addWidget(self.modifiedTweaksLbl) + + self.gestaltLocationLbl = QLabel(self.verticalWidget3) + 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.verticalWidget3) + self.chooseGestaltBtn.setObjectName(u"chooseGestaltBtn") + self.chooseGestaltBtn.setIcon(icon16) + self.chooseGestaltBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) + + self.horizontalLayout_7.addWidget(self.chooseGestaltBtn) + + + self.verticalLayout_24.addLayout(self.horizontalLayout_7) + + self.horizontalWidget8 = QWidget(self.verticalWidget3) + self.horizontalWidget8.setObjectName(u"horizontalWidget8") + self.horizontalLayout_17 = QHBoxLayout(self.horizontalWidget8) + self.horizontalLayout_17.setObjectName(u"horizontalLayout_17") + self.horizontalLayout_17.setContentsMargins(0, 0, 0, 0) + self.applyTweaksBtn = QToolButton(self.horizontalWidget8) + 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.horizontalWidget8) + + self.statusLbl = QLabel(self.verticalWidget3) + self.statusLbl.setObjectName(u"statusLbl") + self.statusLbl.setAlignment(Qt.AlignCenter) + + self.verticalLayout_24.addWidget(self.statusLbl) + + self.restoreProgressBar = QProgressBar(self.verticalWidget3) + 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.horizontalWidget9 = QWidget(self.verticalWidget3) + self.horizontalWidget9.setObjectName(u"horizontalWidget9") + self.horizontalLayout_25 = QHBoxLayout(self.horizontalWidget9) + 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.horizontalWidget9) + self.removeTweaksBtn.setObjectName(u"removeTweaksBtn") + + self.horizontalLayout_25.addWidget(self.removeTweaksBtn) + + self.resetGestaltBtn = QToolButton(self.horizontalWidget9) + 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.horizontalWidget9) + + + self.verticalLayout_6.addWidget(self.verticalWidget3) + + self.pages.addWidget(self.applyPage) + + 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) + + + 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.customOperationsPageBtn.setText(QCoreApplication.translate("Nugget", u" Custom Operations", None)) + self.customOperationsPageBtn.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" EU Enabler", None)) + self.euEnablerPageBtn.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.leminBtn.setText(QCoreApplication.translate("Nugget", u" LeminLimez", None)) + self.leminTwitterBtn.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 2.2", None)) + self.exploreLbl.setText(QCoreApplication.translate("Nugget", u"Explore", None)) + self.exploreSubLbl.setText("") + 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.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)) + 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.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.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.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.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.springboardOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Nugget Settings", None)) + self.allowWifiApplyingChk.setText(QCoreApplication.translate("Nugget", u"Allow Applying Over WiFi", 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.setupOptionsLbl.setText(QCoreApplication.translate("Nugget", u"EU Enabler", None)) + self.euEnablerEnabledChk.setText(QCoreApplication.translate("Nugget", u"Enabled", 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.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)) + # retranslateUi + diff --git a/qt/resources.qrc b/qt/resources.qrc new file mode 100644 index 0000000..ad4dfc3 --- /dev/null +++ b/qt/resources.qrc @@ -0,0 +1,34 @@ + + + credits/LeminLimez.png + icon/app-indicator.svg + icon/arrow-clockwise.svg + icon/brush.svg + icon/caret-down-fill.svg + icon/check-circle.svg + icon/compass.svg + icon/gear.svg + icon/hdd.svg + icon/house.svg + icon/phone.svg + icon/toggles.svg + icon/wifi.svg + icon/x-lg.svg + icon/discord.svg + icon/heart-fill.svg + icon/github.svg + icon/twitter.svg + icon/file-earmark-zip.svg + icon/folder.svg + icon/trash.svg + icon/currency-dollar.svg + icon/geo-alt.svg + icon/star.svg + icon/pencil.svg + icon/import.svg + icon/plus.svg + icon/iphone-island.svg + icon/flag.svg + credits/big_nugget.png + + diff --git a/qt/ui_mainwindow.py b/qt/ui_mainwindow.py new file mode 100644 index 0000000..46cc26f --- /dev/null +++ b/qt/ui_mainwindow.py @@ -0,0 +1,2231 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'mainwindow.ui' +## +## Created by: Qt User Interface Compiler version 6.7.2 +## +## 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.Mode.Normal, QIcon.State.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.Mode.Normal, QIcon.State.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.Mode.Normal, QIcon.State.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.Mode.Normal, QIcon.State.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.Mode.Normal, QIcon.State.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.Shape.HLine) + + self.verticalLayout.addWidget(self.sidebarDiv1) + + self.customOperationsPageBtn = QToolButton(self.sidebar) + self.customOperationsPageBtn.setObjectName(u"customOperationsPageBtn") + sizePolicy2.setHeightForWidth(self.customOperationsPageBtn.sizePolicy().hasHeightForWidth()) + self.customOperationsPageBtn.setSizePolicy(sizePolicy2) + icon5 = QIcon() + icon5.addFile(u":/icon/pencil.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.customOperationsPageBtn.setIcon(icon5) + self.customOperationsPageBtn.setCheckable(True) + self.customOperationsPageBtn.setAutoExclusive(True) + self.customOperationsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) + + self.verticalLayout.addWidget(self.customOperationsPageBtn) + + self.gestaltPageBtn = QToolButton(self.sidebar) + self.gestaltPageBtn.setObjectName(u"gestaltPageBtn") + sizePolicy2.setHeightForWidth(self.gestaltPageBtn.sizePolicy().hasHeightForWidth()) + self.gestaltPageBtn.setSizePolicy(sizePolicy2) + icon6 = QIcon() + icon6.addFile(u":/icon/iphone-island.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.gestaltPageBtn.setIcon(icon6) + 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) + icon7 = QIcon() + icon7.addFile(u":/icon/flag.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.featureFlagsPageBtn.setIcon(icon7) + 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.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.Mode.Normal, QIcon.State.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.Shape.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.Mode.Normal, QIcon.State.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.Mode.Normal, QIcon.State.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.CursorShape.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.Shape.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.Mode.Normal, QIcon.State.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.discordBtn = QToolButton(self.verticalWidget1) + self.discordBtn.setObjectName(u"discordBtn") + icon12 = QIcon() + icon12.addFile(u":/icon/discord.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.discordBtn.setIcon(icon12) + self.discordBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) + + self.verticalLayout_26.addWidget(self.discordBtn) + + 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" +"}") + icon13 = QIcon() + icon13.addFile(u":/credits/LeminLimez.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.leminBtn.setIcon(icon13) + 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" +"}") + icon14 = QIcon() + icon14.addFile(u":/icon/twitter.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.leminTwitterBtn.setIcon(icon14) + + self.horizontalLayout_6.addWidget(self.leminTwitterBtn) + + 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" +"}") + icon15 = QIcon() + icon15.addFile(u":/icon/currency-dollar.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.leminKoFiBtn.setIcon(icon15) + + 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.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.Shape.HLine) + + self.verticalLayout_31.addWidget(self.line_3) + + self.exploreThemesCnt = QWidget(self.explorePage) + self.exploreThemesCnt.setObjectName(u"exploreThemesCnt") + sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + sizePolicy5.setHorizontalStretch(0) + sizePolicy5.setVerticalStretch(0) + sizePolicy5.setHeightForWidth(self.exploreThemesCnt.sizePolicy().hasHeightForWidth()) + self.exploreThemesCnt.setSizePolicy(sizePolicy5) + + self.verticalLayout_31.addWidget(self.exploreThemesCnt) + + self.pages.addWidget(self.explorePage) + 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.Shape.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.verticalWidget2 = QWidget(self.locSimCnt) + self.verticalWidget2.setObjectName(u"verticalWidget2") + self.verticalLayout_29 = QVBoxLayout(self.verticalWidget2) + self.verticalLayout_29.setObjectName(u"verticalLayout_29") + self.verticalLayout_29.setContentsMargins(0, 0, 0, 0) + self.label_7 = QLabel(self.verticalWidget2) + self.label_7.setObjectName(u"label_7") + self.label_7.setAlignment(Qt.AlignCenter) + + self.verticalLayout_29.addWidget(self.label_7) + + self.latitudeTxt = QLineEdit(self.verticalWidget2) + self.latitudeTxt.setObjectName(u"latitudeTxt") + self.latitudeTxt.setAlignment(Qt.AlignCenter) + + self.verticalLayout_29.addWidget(self.latitudeTxt) + + self.label_11 = QLabel(self.verticalWidget2) + self.label_11.setObjectName(u"label_11") + self.label_11.setAlignment(Qt.AlignCenter) + + self.verticalLayout_29.addWidget(self.label_11) + + self.longitudeTxt = QLineEdit(self.verticalWidget2) + self.longitudeTxt.setObjectName(u"longitudeTxt") + self.longitudeTxt.setAlignment(Qt.AlignCenter) + + self.verticalLayout_29.addWidget(self.longitudeTxt) + + self.horizontalWidget4 = QWidget(self.verticalWidget2) + self.horizontalWidget4.setObjectName(u"horizontalWidget4") + self.horizontalLayout_3 = QHBoxLayout(self.horizontalWidget4) + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) + self.setLocationBtn = QToolButton(self.horizontalWidget4) + self.setLocationBtn.setObjectName(u"setLocationBtn") + + self.horizontalLayout_3.addWidget(self.setLocationBtn) + + + self.verticalLayout_29.addWidget(self.horizontalWidget4) + + self.horizontalWidget_22 = QWidget(self.verticalWidget2) + 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.verticalWidget2) + + + 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.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(icon6) + 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.horizontalWidget5 = QWidget(self.horizontalWidget_8) + self.horizontalWidget5.setObjectName(u"horizontalWidget5") + self.horizontalLayout_26 = QHBoxLayout(self.horizontalWidget5) + self.horizontalLayout_26.setObjectName(u"horizontalLayout_26") + self.horizontalLayout_26.setContentsMargins(0, 0, 0, 0) + self.importThemeBtn = QToolButton(self.horizontalWidget5) + 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.horizontalWidget5) + self.importThemeFolderBtn.setObjectName(u"importThemeFolderBtn") + icon16 = QIcon() + icon16.addFile(u":/icon/folder.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.importThemeFolderBtn.setIcon(icon16) + + self.horizontalLayout_26.addWidget(self.importThemeFolderBtn) + + self.importThemeZipBtn = QToolButton(self.horizontalWidget5) + self.importThemeZipBtn.setObjectName(u"importThemeZipBtn") + icon17 = QIcon() + icon17.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.importThemeZipBtn.setIcon(icon17) + + self.horizontalLayout_26.addWidget(self.importThemeZipBtn) + + + self.horizontalLayout_23.addWidget(self.horizontalWidget5) + + + 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.Shape.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.Shape.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.horizontalWidget6 = QWidget(self.themesPageContent) + self.horizontalWidget6.setObjectName(u"horizontalWidget6") + self.horizontalLayout_16 = QHBoxLayout(self.horizontalWidget6) + self.horizontalLayout_16.setObjectName(u"horizontalLayout_16") + self.horizontalLayout_16.setContentsMargins(0, 0, 0, 0) + self.hideNamesBtn = QToolButton(self.horizontalWidget6) + 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.horizontalWidget6) + 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.horizontalWidget6) + 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.horizontalWidget6) + + + self.verticalLayout_23.addWidget(self.themesPageContent) + + self.pages.addWidget(self.themingPage) + 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(icon6) + 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.Shape.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, 0, 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.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.horizontalWidget7 = QWidget(self.gestaltPageContent) + self.horizontalWidget7.setObjectName(u"horizontalWidget7") + self.horizontalLayout_10 = QHBoxLayout(self.horizontalWidget7) + self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") + self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0) + + self.verticalLayout_8.addWidget(self.horizontalWidget7) + + 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.Shape.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.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.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.Shape.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.Shape.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.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.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" +"}") + self.toolButton_12.setIcon(icon5) + 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.Shape.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) + icon18 = QIcon() + icon18.addFile(u":/icon/import.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.importOperationBtn.setIcon(icon18) + 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)) + icon19 = QIcon() + icon19.addFile(u":/icon/plus.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.newOperationBtn.setIcon(icon19) + 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.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.settingsPage = QWidget() + self.settingsPage.setObjectName(u"settingsPage") + self.verticalLayout_10 = QVBoxLayout(self.settingsPage) + self.verticalLayout_10.setObjectName(u"verticalLayout_10") + self.verticalLayout_10.setContentsMargins(0, 0, 0, 0) + self.horizontalWidget_4 = QWidget(self.settingsPage) + 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(icon10) + + 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_17 = QSpacerItem(20, 16, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) + + self.verticalLayout_7.addItem(self.verticalSpacer_17) + + + 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.settingsPage) + 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.Shape.HLine) + + self.verticalLayout_10.addWidget(self.line_11) + + self.settingsPageContent = QWidget(self.settingsPage) + self.settingsPageContent.setObjectName(u"settingsPageContent") + self.settingsPageContent.setEnabled(True) + self.settingsPageContent.setMaximumSize(QSize(650, 16777215)) + self._2 = QVBoxLayout(self.settingsPageContent) + self._2.setObjectName(u"_2") + self._2.setContentsMargins(0, 0, 0, 0) + self.allowWifiApplyingChk = QCheckBox(self.settingsPageContent) + self.allowWifiApplyingChk.setObjectName(u"allowWifiApplyingChk") + self.allowWifiApplyingChk.setChecked(True) + + self._2.addWidget(self.allowWifiApplyingChk) + + self.verticalSpacer_5 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self._2.addItem(self.verticalSpacer_5) + + + self.verticalLayout_10.addWidget(self.settingsPageContent) + + self.pages.addWidget(self.settingsPage) + 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(icon7) + + 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.Shape.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.Shape.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.setupOptionsLbl = QLabel(self.verticalWidget_5) + self.setupOptionsLbl.setObjectName(u"setupOptionsLbl") + self.setupOptionsLbl.setFont(font1) + + self.verticalLayout_15.addWidget(self.setupOptionsLbl) + + self.euEnablerEnabledChk = QCheckBox(self.verticalWidget_5) + self.euEnablerEnabledChk.setObjectName(u"euEnablerEnabledChk") + + self.verticalLayout_15.addWidget(self.euEnablerEnabledChk) + + + 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.Shape.HLine) + + self.verticalLayout_17.addWidget(self.line_13) + + 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.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.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.verticalWidget3 = QWidget(self.applyPage) + self.verticalWidget3.setObjectName(u"verticalWidget3") + self.verticalLayout_24 = QVBoxLayout(self.verticalWidget3) + self.verticalLayout_24.setObjectName(u"verticalLayout_24") + self.verticalLayout_24.setContentsMargins(0, 0, 0, 0) + self.locSimPageHeader_2 = QWidget(self.verticalWidget3) + 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.verticalWidget3) + 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.Shape.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.verticalWidget3) + self.modifiedTweaksLbl.setObjectName(u"modifiedTweaksLbl") + self.modifiedTweaksLbl.setAlignment(Qt.AlignCenter) + + self.verticalLayout_24.addWidget(self.modifiedTweaksLbl) + + self.gestaltLocationLbl = QLabel(self.verticalWidget3) + 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.verticalWidget3) + self.chooseGestaltBtn.setObjectName(u"chooseGestaltBtn") + self.chooseGestaltBtn.setIcon(icon16) + self.chooseGestaltBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) + + self.horizontalLayout_7.addWidget(self.chooseGestaltBtn) + + + self.verticalLayout_24.addLayout(self.horizontalLayout_7) + + self.horizontalWidget8 = QWidget(self.verticalWidget3) + self.horizontalWidget8.setObjectName(u"horizontalWidget8") + self.horizontalLayout_17 = QHBoxLayout(self.horizontalWidget8) + self.horizontalLayout_17.setObjectName(u"horizontalLayout_17") + self.horizontalLayout_17.setContentsMargins(0, 0, 0, 0) + self.applyTweaksBtn = QToolButton(self.horizontalWidget8) + 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.horizontalWidget8) + + self.statusLbl = QLabel(self.verticalWidget3) + self.statusLbl.setObjectName(u"statusLbl") + self.statusLbl.setAlignment(Qt.AlignCenter) + + self.verticalLayout_24.addWidget(self.statusLbl) + + self.restoreProgressBar = QProgressBar(self.verticalWidget3) + 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.horizontalWidget9 = QWidget(self.verticalWidget3) + self.horizontalWidget9.setObjectName(u"horizontalWidget9") + self.horizontalLayout_25 = QHBoxLayout(self.horizontalWidget9) + 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.horizontalWidget9) + self.removeTweaksBtn.setObjectName(u"removeTweaksBtn") + + self.horizontalLayout_25.addWidget(self.removeTweaksBtn) + + self.resetGestaltBtn = QToolButton(self.horizontalWidget9) + 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.horizontalWidget9) + + + self.verticalLayout_6.addWidget(self.verticalWidget3) + + self.pages.addWidget(self.applyPage) + + 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) + + + 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.customOperationsPageBtn.setText(QCoreApplication.translate("Nugget", u" Custom Operations", None)) + self.customOperationsPageBtn.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" EU Enabler", None)) + self.euEnablerPageBtn.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.leminBtn.setText(QCoreApplication.translate("Nugget", u" LeminLimez", None)) + self.leminTwitterBtn.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 2.2", None)) + self.exploreLbl.setText(QCoreApplication.translate("Nugget", u"Explore", None)) + self.exploreSubLbl.setText("") + 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.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)) + 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.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.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.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.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.springboardOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Nugget Settings", None)) + self.allowWifiApplyingChk.setText(QCoreApplication.translate("Nugget", u"Allow Applying Over WiFi", 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.setupOptionsLbl.setText(QCoreApplication.translate("Nugget", u"EU Enabler", None)) + self.euEnablerEnabledChk.setText(QCoreApplication.translate("Nugget", u"Enabled", 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.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)) + # retranslateUi + diff --git a/requirements.txt b/requirements.txt index 6f6e1e1..c90a8d3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ -pymobiledevice3 \ No newline at end of file +pymobiledevice3 +pyside6 \ No newline at end of file diff --git a/resources_rc.py b/resources_rc.py new file mode 100644 index 0000000..423803f --- /dev/null +++ b/resources_rc.py @@ -0,0 +1,9830 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 6.6.3 +# WARNING! All changes made in this file will be lost! + +from PySide6 import QtCore + +qt_resource_data = b"\ +\x00\x00\x05\xf3\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-gear\x22 vi\ +ewBox=\x220 0 16 16\ +\x22>\x0a \x0a \x0a\ +\x00\x00\x04\xf4\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-discord\x22\ + viewBox=\x220 0 16\ + 16\x22>\x0a \x0a\ +\x00\x00\x00\xeb\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-heart-fi\ +ll\x22 viewBox=\x220 0\ + 16 16\x22>\x0a \x0a\ +\x00\x00\x05M\ +<\ +?xml version=\x221.\ +0\x22 encoding=\x22UTF\ +-8\x22?>\x0a\ +\x0a\x0a\x0a \x0a \ + \ +\x0a \x0a \ +\x0a\x0a\ +\x00\x00\x02\xc5\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-github\x22 \ +viewBox=\x220 0 16 \ +16\x22>\x0a \x0a\ +\x00\x00\x02U\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-hdd\x22 vie\ +wBox=\x220 0 16 16\x22\ +>\x0a \x0a <\ +path d=\x22M16 11a2\ + 2 0 0 1-2 2H2a2\ + 2 0 0 1-2-2V9.5\ +1c0-.418.105-.83\ +.305-1.197l2.472\ +-4.531A1.5 1.5 0\ + 0 1 4.094 3h7.8\ +12a1.5 1.5 0 0 1\ + 1.317.782l2.472\ + 4.53c.2.368.305\ +.78.305 1.198V11\ +zM3.655 4.26 1.5\ +92 8.043C1.724 8\ +.014 1.86 8 2 8h\ +12c.14 0 .276.01\ +4.408.042L12.345\ + 4.26a.5.5 0 0 0\ +-.439-.26H4.094a\ +.5.5 0 0 0-.44.2\ +6zM1 10v1a1 1 0 \ +0 0 1 1h12a1 1 0\ + 0 0 1-1v-1a1 1 \ +0 0 0-1-1H2a1 1 \ +0 0 0-1 1z\x22/>\x0a\ +\x00\x00\x02%\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-folder\x22 \ +viewBox=\x220 0 16 \ +16\x22>\x0a \x0a\ +\x00\x00\x019\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-x-lg\x22 vi\ +ewBox=\x220 0 16 16\ +\x22>\x0a \x0a\ +\x00\x00\x03\xb0\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-wifi\x22 vi\ +ewBox=\x220 0 16 16\ +\x22>\x0a \x0a \x0a\ +\x00\x00\x02y\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-twitter\x22\ + viewBox=\x220 0 16\ + 16\x22>\x0a \x0a\ +\x00\x00\x02$\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22#eb5545\x22 cla\ +ss=\x22bi bi-trash\x22\ + viewBox=\x220 0 16\ + 16\x22>\x0a \x0a \x0a\ +\x00\x00\x02\x89\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-currency\ +-dollar\x22 viewBox\ +=\x220 0 16 16\x22>\x0a \ +\x0a\ +\x00\x00\x02H\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-file-ear\ +mark-zip\x22 viewBo\ +x=\x220 0 16 16\x22>\x0a \ + \x0a \ + \ +\x0a\ +\x00\x00\x01|\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-check-ci\ +rcle\x22 viewBox=\x220\ + 0 16 16\x22>\x0a \x0a \ + \x0a\ +\x00\x00\x01\x91\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-toggles\x22\ + viewBox=\x220 0 16\ + 16\x22>\x0a \x0a\ +\ +\x00\x00\x01\xa6\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-house\x22 v\ +iewBox=\x220 0 16 1\ +6\x22>\x0a \x0a<\ +/svg>\ +\x00\x00\x01Y\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-arrow-cl\ +ockwise\x22 viewBox\ +=\x220 0 16 16\x22>\x0a \ +\x0a\ + \x0a\ +\x00\x00\x06\x0c\ +<\ +?xml version=\x221.\ +0\x22 encoding=\x22UTF\ +-8\x22?>\x0a\ +\x0a\x0a\x0a \x0a\ + \x0a \x0a \x0a \x0a\x0a\ +\x00\x00\x02t\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-star\x22 vi\ +ewBox=\x220 0 16 16\ +\x22>\x0a \x0a\ +\x00\x00\x01\xdc\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-geo-alt\x22\ + viewBox=\x220 0 16\ + 16\x22>\x0a \x0a \x0a\ +\x00\x00\x01\x03\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-caret-do\ +wn-fill\x22 viewBox\ +=\x220 0 16 16\x22>\x0a \ +\x0a\x0a\ +\x00\x00\x01H\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2216\ +\x22 height=\x2216\x22 fi\ +ll=\x22white\x22 class\ +=\x22bi bi-phone\x22 v\ +iewBox=\x220 0 16 1\ +6\x22>\x0a \x0a\ + \ +\x0a\ +\x00\x00\x05\x87\ +<\ +?xml version=\x221.\ +0\x22 encoding=\x22UTF\ +-8\x22?>\x0a