├── .gitignore ├── CHANGELOG.md ├── CODE OF CONDUCT.md ├── CONTRIBUTORS.md ├── EmuGUI.ico ├── EmuGUI.png ├── Icon together.xcf ├── Icon.xcf ├── LICENSE ├── README.md ├── Text 2.png ├── Text colourized.png ├── Text colourized.xcf ├── Text.png ├── Text.xcf ├── banners ├── AdeleAngela.pdn ├── AdeleAngela.png ├── GarukaPula.png ├── IoanaRosa.png ├── RobertRabbit.png └── SaraAngeline.png ├── delcache.bat ├── delcache.sh ├── dialogExecution ├── editVMNew.py ├── errDialog.py ├── icelakeClientDepreciation.py ├── newVirtualMachine.py ├── noUpdateAvailable.py ├── qemuImgError.py ├── qemuSysError.py ├── settingsRequireRestart.py ├── startVirtualMachine.py ├── updateAvailable.py ├── usbTabletDepreciation.py ├── vhdExistsDialog.py ├── vmExistsDialog.py ├── vmTooNew.py ├── win2kDepreciation.py └── win81NearEOS.py ├── doc ├── CONTRIBUTION_GUIDE.md ├── OLD_FEATURES.md ├── TESTED.md └── THEME_CREATION.md ├── emugui.py ├── emugui_prep_linux.sh ├── emugui_run_linux.sh ├── errors ├── errCodes.py ├── logID.py └── logman.py ├── platformSpecific ├── unixSpecific.py └── windowsSpecific.py ├── plugins ├── hw_additions │ ├── aarch64_default_additions.json │ ├── alpha_default_additions.json │ ├── arm_default_additions.json │ ├── generic_additions.json │ ├── mips64_default_additions.json │ ├── mips64el_default_additions.json │ ├── mips_default_additions.json │ ├── mipsel_default_additions.json │ ├── ppc_default_additions.json │ ├── riscv32_default_additions.json │ ├── riscv64_default_additions.json │ ├── sparc64_default_additions.json │ ├── sparc_default_additions.json │ └── x86_default_additions.json └── pluginmgr │ └── hw_reader.py ├── services └── pathfinder.py ├── themes └── BlueExampleTheme.qss ├── translations ├── addexistingvhd.txt ├── addnovhd.txt ├── be.py ├── createnewvhd.txt ├── cz.py ├── de.py ├── en.py ├── es.py ├── fr.py ├── it.py ├── letqemudecide.txt ├── pl.py ├── pt.py ├── ro.py ├── ru.py ├── systemdefault.txt ├── systemdefaultset.py └── uk.py ├── ui ├── EditVM2.ui ├── ErrDialog.ui ├── IcelakeClientCPUDepreciated.ui ├── Main.ui ├── NewVM2.ui ├── NoUpdate.ui ├── QemuI386NotInstalled.ui ├── QemuImgNotInstalled.ui ├── SettingsPending1.ui ├── SettingsRestart.ui ├── StartVM.ui ├── USBTabletCheckboxDepreciated.ui ├── Update.ui ├── VhdExists.ui ├── VmExists.ui ├── VmTooNew.ui ├── Win2KCheckboxDepreciated.ui ├── Win81SupportNearsEnd.ui ├── ui_EditVM.py └── ui_Main.py ├── uiScripts ├── ui_EditVM2.py ├── ui_ErrDialog.py ├── ui_IcelakeClientCPUDepreciated.py ├── ui_Main.py ├── ui_NewVM2.py ├── ui_NoUpdate.py ├── ui_QemuI386NotInstalled.py ├── ui_QemuImgNotInstalled.py ├── ui_SettingsPending1.py ├── ui_SettingsRestart.py ├── ui_StartVM.py ├── ui_USBTabletCheckboxDepreciated.py ├── ui_Update.py ├── ui_VhdExists.py ├── ui_VmExists.py ├── ui_VmTooNew.py ├── ui_Win2KCheckboxDepreciated.py └── ui_Win81SupportNearsEnd.py └── update.txt /.gitignore: -------------------------------------------------------------------------------- 1 | emugui.spec 2 | dist/* 3 | build/* 4 | -------------------------------------------------------------------------------- /CODE OF CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, gender identity and expression, level of experience, 9 | education, socio-economic status, nationality, personal appearance, race, 10 | religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at {{ email }}. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | # EmuGUI Contributors 2 | 3 | Nicolas Lucien/Tech-FZ (Author, coding, English, German, Romanian, French and Ukrainian translation, documentation) 4 | 5 | BasDeGamer (Documentation) 6 | 7 | the-amazing-atharva (Documentation) 8 | 9 | Maestro Finch/Danik2343 (Russian and Belarusian translation) 10 | 11 | SuperVitu64 (Spanish translation) 12 | 13 | PurpleVibe32 (Portuguese translation) 14 | 15 | Rafael Magalhães#2781 (Discord tag, Portuguese translation) 16 | 17 | ParmanCZ (Czech translation) 18 | 19 | Vichingo455 (Italian translation) 20 | 21 | rzglitch (Coding) 22 | 23 | Calibrato (Polish translation) 24 | 25 | imwez (Discord username, Portuguese translation) 26 | 27 | User0 (Debian packages) 28 | 29 | PrelevatedInsider18204 (Arch packages) 30 | 31 | Mizuki (Coding) 32 | 33 | # Banners 34 | 35 | | Version | Author | 36 | | ------- | ------ | 37 | | pre-1.0 | Tech-FZ | 38 | | 1.0 "Adèle Angela" | Tech-FZ | 39 | | Easter "Robert Rabbit" | Tech-FZ | 40 | | 1.1 "Sara Angeline" | Tech-FZ | 41 | | 1.2 "Garuka Pula" | Tech-FZ | 42 | | 2.0 "Ioana Rosa" | Tech-FZ | -------------------------------------------------------------------------------- /EmuGUI.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/EmuGUI.ico -------------------------------------------------------------------------------- /EmuGUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/EmuGUI.png -------------------------------------------------------------------------------- /Icon together.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/Icon together.xcf -------------------------------------------------------------------------------- /Icon.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/Icon.xcf -------------------------------------------------------------------------------- /Text 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/Text 2.png -------------------------------------------------------------------------------- /Text colourized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/Text colourized.png -------------------------------------------------------------------------------- /Text colourized.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/Text colourized.xcf -------------------------------------------------------------------------------- /Text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/Text.png -------------------------------------------------------------------------------- /Text.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/Text.xcf -------------------------------------------------------------------------------- /banners/AdeleAngela.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/banners/AdeleAngela.pdn -------------------------------------------------------------------------------- /banners/AdeleAngela.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/banners/AdeleAngela.png -------------------------------------------------------------------------------- /banners/GarukaPula.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/banners/GarukaPula.png -------------------------------------------------------------------------------- /banners/IoanaRosa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/banners/IoanaRosa.png -------------------------------------------------------------------------------- /banners/RobertRabbit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/banners/RobertRabbit.png -------------------------------------------------------------------------------- /banners/SaraAngeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tech-FZ/EmuGUI/40983249854cab867b0bdd799c05f361db21ba97/banners/SaraAngeline.png -------------------------------------------------------------------------------- /delcache.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | if exist dialogExecution\__pycache__\ ( 4 | del dialogExecution\__pycache__\*.* /q 5 | rd dialogExecution\__pycache__\ 6 | ) 7 | 8 | if exist errors\__pycache__\ ( 9 | del errors\__pycache__\*.* /q 10 | rd errors\__pycache__\ 11 | ) 12 | 13 | if exist platformSpecific\__pycache__\ ( 14 | del platformSpecific\__pycache__\*.* /q 15 | rd platformSpecific\__pycache__\ 16 | ) 17 | 18 | if exist translations\__pycache__\ ( 19 | del translations\__pycache__\*.* /q 20 | rd translations\__pycache__\ 21 | ) 22 | 23 | if exist uiScripts\__pycache__\ ( 24 | del uiScripts\__pycache__\*.* /q 25 | rd uiScripts\__pycache__\ 26 | ) 27 | 28 | if exist plugins\pluginmgr\__pycache__\ ( 29 | del plugins\pluginmgr\__pycache__\*.* /q 30 | rd plugins\pluginmgr\__pycache__\ 31 | ) 32 | 33 | if exist services\__pycache__\ ( 34 | del services\__pycache__\*.* /q 35 | rd services\__pycache__\ 36 | ) -------------------------------------------------------------------------------- /delcache.sh: -------------------------------------------------------------------------------- 1 | if [ -d dialogExecution/__pycache__ ]; then 2 | rm -r dialogExecution/__pycache__ 3 | fi 4 | 5 | if [ -d errors/__pycache__ ]; then 6 | rm -r errors/__pycache__ 7 | fi 8 | 9 | if [ -d platformSpecific/__pycache__ ]; then 10 | rm -r platformSpecific/__pycache__ 11 | fi 12 | 13 | if [ -d translations/__pycache__ ]; then 14 | rm -r translations/__pycache__ 15 | fi 16 | 17 | if [ -d uiScripts/__pycache__ ]; then 18 | rm -r uiScripts/__pycache__ 19 | fi 20 | 21 | if [ -d plugins/pluginmgr/__pycache__ ]; then 22 | rm -r plugins/pluginmgr/__pycache__ 23 | fi 24 | 25 | if [ -d services/__pycache__ ]; then 26 | rm -r services/__pycache__ 27 | fi -------------------------------------------------------------------------------- /dialogExecution/errDialog.py: -------------------------------------------------------------------------------- 1 | from uiScripts.ui_ErrDialog import Ui_Dialog 2 | from PySide6.QtWidgets import * 3 | from PySide6 import QtGui 4 | import platform 5 | 6 | if platform.system() == "Windows": 7 | import platformSpecific.windowsSpecific 8 | 9 | else: 10 | import platformSpecific.unixSpecific 11 | 12 | import translations.de 13 | import translations.uk 14 | import translations.en 15 | import translations.fr 16 | import translations.es 17 | import translations.ro 18 | import translations.be 19 | import translations.cz 20 | import translations.ru 21 | import translations.pt 22 | import translations.it 23 | import translations.pl 24 | import locale 25 | import sqlite3 26 | import services.pathfinder as pf 27 | 28 | class ErrDialog(QDialog, Ui_Dialog): 29 | def __init__(self, parent = None): 30 | try: 31 | super().__init__(parent) 32 | 33 | except: 34 | super().__init__() 35 | 36 | self.setupUi(self) 37 | self.exec_folder = pf.retrieveExecFolder() 38 | self.setWindowTitle("EmuGUI - Error") 39 | 40 | try: 41 | self.setWindowIcon(QtGui.QIcon(f"{self.exec_folder}EmuGUI.png")) 42 | 43 | except: 44 | pass 45 | 46 | self.connectSignalsSlots() 47 | self.vmSpecs = self.readTempVmFile() 48 | self.langDetect() 49 | 50 | def connectSignalsSlots(self): 51 | self.pushButton.clicked.connect(self.pushBtnClicked) 52 | 53 | def pushBtnClicked(self): 54 | if self.vmSpecs[0].startswith("C"): 55 | exit() 56 | 57 | else: 58 | self.close() 59 | 60 | def readTempVmFile(self): 61 | # Searching temporary files 62 | if platform.system() == "Windows": 63 | tempVmDef = platformSpecific.windowsSpecific.windowsErrorFile() 64 | 65 | else: 66 | tempVmDef = platformSpecific.unixSpecific.unixErrorFile() 67 | 68 | vmSpecs = [] 69 | 70 | with open(tempVmDef, "r+") as tempVmDefFile: 71 | vmSpecsRaw = tempVmDefFile.readlines() 72 | 73 | for vmSpec in vmSpecsRaw: 74 | vmSpecNew = vmSpec.replace("\n", "") 75 | vmSpecs.append(vmSpecNew) 76 | 77 | return vmSpecs 78 | 79 | def langDetect(self): 80 | select_language = """ 81 | SELECT name, value FROM settings 82 | WHERE name = "lang"; 83 | """ 84 | 85 | if platform.system() == "Windows": 86 | connection = platformSpecific.windowsSpecific.setupWindowsBackend() 87 | 88 | else: 89 | connection = platformSpecific.unixSpecific.setupUnixBackend() 90 | 91 | cursor = connection.cursor() 92 | 93 | try: 94 | cursor.execute(select_language) 95 | connection.commit() 96 | result = cursor.fetchall() 97 | 98 | # Language modes 99 | # system: language of OS 100 | # en: English 101 | # de: German 102 | langmode = "system" 103 | 104 | try: 105 | qemu_img_slot = str(result[0]) 106 | 107 | if result[0][1] == "en": 108 | langmode = "en" 109 | 110 | elif result[0][1] == "de": 111 | langmode = "de" 112 | 113 | elif result[0][1] == "uk": 114 | langmode = "uk" 115 | 116 | elif result[0][1] == "fr": 117 | langmode = "fr" 118 | 119 | elif result[0][1] == "es": 120 | langmode = "es" 121 | 122 | elif result[0][1] == "ro": 123 | langmode = "ro" 124 | 125 | elif result[0][1] == "ru": 126 | langmode = "ru" 127 | 128 | elif result[0][1] == "be": 129 | langmode = "be" 130 | 131 | elif result[0][1] == "cz": 132 | langmode = "cz" 133 | 134 | elif result[0][1] == "pt": 135 | langmode = "pt" 136 | 137 | elif result[0][1] == "it": 138 | langmode = "it" 139 | 140 | elif result[0][1] == "pl": 141 | langmode = "pl" 142 | 143 | elif result[0][1] == "system": 144 | langmode = "system" 145 | 146 | self.setLanguage(langmode) 147 | print("The query was executed successfully. The language slot already is in the database.") 148 | 149 | except: 150 | langmode = "system" 151 | self.setLanguage(langmode) 152 | print("The query was executed successfully. The language slot has been created.") 153 | 154 | except sqlite3.Error as e: 155 | print(f"The SQLite module encountered an error: {e}.") 156 | 157 | def setLanguage(self, langmode): 158 | if langmode == "system" or langmode == None: 159 | languageToUse = locale.getlocale()[0] 160 | 161 | else: 162 | languageToUse = langmode 163 | 164 | if languageToUse != None: 165 | if languageToUse.startswith("de"): 166 | translations.de.translateErrDialogDE(self, self.vmSpecs[0]) 167 | 168 | elif languageToUse.startswith("uk"): 169 | translations.uk.translateErrDialogUK(self, self.vmSpecs[0]) 170 | 171 | elif languageToUse.startswith("fr"): 172 | translations.fr.translateErrDialogFR(self, self.vmSpecs[0]) 173 | 174 | elif languageToUse.startswith("es"): 175 | translations.es.translateErrDialogES(self, self.vmSpecs[0]) 176 | 177 | elif languageToUse.startswith("ro"): 178 | translations.ro.translateErrDialogRO(self, self.vmSpecs[0]) 179 | 180 | elif languageToUse.startswith("ru"): 181 | translations.ru.translateErrDialogRU(self, self.vmSpecs[0]) 182 | 183 | elif languageToUse.startswith("be"): 184 | translations.be.translateErrDialogBE(self, self.vmSpecs[0]) 185 | 186 | elif languageToUse.startswith("cz"): 187 | translations.cz.translateErrDialogCZ(self, self.vmSpecs[0]) 188 | 189 | elif languageToUse.startswith("pt"): 190 | translations.pt.translateErrDialogPT(self, self.vmSpecs[0]) 191 | 192 | elif languageToUse.startswith("pl"): 193 | translations.pl.translateErrDialogPL(self, self.vmSpecs[0]) 194 | 195 | elif languageToUse.startswith("it"): 196 | translations.it.translateErrDialogIT(self, self.vmSpecs[0]) 197 | 198 | else: 199 | translations.en.translateErrDialogEN(self, self.vmSpecs[0]) 200 | 201 | else: 202 | if platform.system() == "Windows": 203 | langfile = platformSpecific.windowsSpecific.windowsLanguageFile() 204 | 205 | else: 206 | langfile = platformSpecific.unixSpecific.unixLanguageFile() 207 | 208 | try: 209 | with open(langfile, "r+") as language: 210 | languageContent = language.readlines() 211 | languageToUse = languageContent[0].replace("\n", "") 212 | 213 | if languageToUse != None: 214 | if languageToUse.startswith("de"): 215 | translations.de.translateErrDialogDE(self, self.vmSpecs[0]) 216 | 217 | elif languageToUse.startswith("uk"): 218 | translations.uk.translateErrDialogUK(self, self.vmSpecs[0]) 219 | 220 | elif languageToUse.startswith("fr"): 221 | translations.fr.translateErrDialogFR(self, self.vmSpecs[0]) 222 | 223 | elif languageToUse.startswith("es"): 224 | translations.es.translateErrDialogES(self, self.vmSpecs[0]) 225 | 226 | elif languageToUse.startswith("ro"): 227 | translations.ro.translateErrDialogRO(self, self.vmSpecs[0]) 228 | 229 | elif languageToUse.startswith("ru"): 230 | translations.ru.translateErrDialogRU(self, self.vmSpecs[0]) 231 | 232 | elif languageToUse.startswith("be"): 233 | translations.be.translateErrDialogBE(self, self.vmSpecs[0]) 234 | 235 | elif languageToUse.startswith("cz"): 236 | translations.cz.translateErrDialogCZ(self, self.vmSpecs[0]) 237 | 238 | elif languageToUse.startswith("pt"): 239 | translations.pt.translateErrDialogPT(self, self.vmSpecs[0]) 240 | 241 | elif languageToUse.startswith("pl"): 242 | translations.pl.translateErrDialogPL(self, self.vmSpecs[0]) 243 | 244 | elif languageToUse.startswith("it"): 245 | translations.it.translateErrDialogIT(self, self.vmSpecs[0]) 246 | 247 | else: 248 | translations.en.translateErrDialogEN(self, self.vmSpecs[0]) 249 | 250 | except: 251 | print("Translation can't be figured out. Using English language.") 252 | translations.en.translateErrDialogEN(self, self.vmSpecs[1]) -------------------------------------------------------------------------------- /dialogExecution/icelakeClientDepreciation.py: -------------------------------------------------------------------------------- 1 | from uiScripts.ui_IcelakeClientCPUDepreciated import Ui_Dialog 2 | from PySide6.QtWidgets import * 3 | from PySide6 import QtGui 4 | import platform 5 | 6 | if platform.system() == "Windows": 7 | import platformSpecific.windowsSpecific 8 | 9 | else: 10 | import platformSpecific.unixSpecific 11 | 12 | class IcelakeClientCPUDepreciation(QDialog, Ui_Dialog): 13 | def __init__(self, parent = None): 14 | try: 15 | super().__init__(parent) 16 | 17 | except: 18 | super().__init__() 19 | 20 | self.setupUi(self) 21 | self.vmSpecs = self.readTempVmFile() 22 | self.setWindowTitle(f"EmuGUI - {self.vmSpecs[0]} uses a depreciated feature") 23 | 24 | try: 25 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 26 | 27 | except: 28 | pass 29 | 30 | self.connectSignalsSlots() 31 | 32 | def connectSignalsSlots(self): 33 | self.pushButton.clicked.connect(self.close) 34 | 35 | def readTempVmFile(self): 36 | # Searching temporary files 37 | if platform.system() == "Windows": 38 | tempVmDef = platformSpecific.windowsSpecific.windowsTempVmStarterFile() 39 | 40 | else: 41 | tempVmDef = platformSpecific.unixSpecific.unixTempVmStarterFile() 42 | 43 | vmSpecs = [] 44 | 45 | with open(tempVmDef, "r+") as tempVmDefFile: 46 | vmSpecsRaw = tempVmDefFile.readlines() 47 | 48 | for vmSpec in vmSpecsRaw: 49 | vmSpecNew = vmSpec.replace("\n", "") 50 | vmSpecs.append(vmSpecNew) 51 | 52 | return vmSpecs -------------------------------------------------------------------------------- /dialogExecution/noUpdateAvailable.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import * 2 | from PySide6 import QtGui 3 | from uiScripts.ui_NoUpdate import Ui_Dialog 4 | import platform 5 | 6 | if platform.system() == "Windows": 7 | import platformSpecific.windowsSpecific 8 | 9 | else: 10 | import platformSpecific.unixSpecific 11 | 12 | import sqlite3 13 | import translations.de 14 | import translations.uk 15 | import translations.en 16 | import locale 17 | 18 | class NoUpdateAvailable(QDialog, Ui_Dialog): 19 | def __init__(self, parent=None): 20 | super().__init__(parent) 21 | self.setupUi(self) 22 | self.setWindowTitle("EmuGUI Update") 23 | self.langDetect() 24 | 25 | try: 26 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 27 | 28 | except: 29 | pass 30 | 31 | self.connectSignalsSlots() 32 | 33 | def connectSignalsSlots(self): 34 | self.pushButton.clicked.connect(self.close) 35 | 36 | def langDetect(self): 37 | select_language = """ 38 | SELECT name, value FROM settings 39 | WHERE name = "lang"; 40 | """ 41 | 42 | if platform.system() == "Windows": 43 | connection = platformSpecific.windowsSpecific.setupWindowsBackend() 44 | 45 | else: 46 | connection = platformSpecific.unixSpecific.setupUnixBackend() 47 | 48 | cursor = connection.cursor() 49 | 50 | try: 51 | cursor.execute(select_language) 52 | connection.commit() 53 | result = cursor.fetchall() 54 | 55 | # Language modes 56 | # system: language of OS 57 | # en: English 58 | # de: German 59 | langmode = "system" 60 | 61 | try: 62 | qemu_img_slot = str(result[0]) 63 | 64 | if result[0][1] == "en": 65 | langmode = "en" 66 | 67 | elif result[0][1] == "de": 68 | langmode = "de" 69 | 70 | elif result[0][1] == "uk": 71 | langmode = "uk" 72 | 73 | elif result[0][1] == "system": 74 | langmode = "system" 75 | 76 | self.setLanguage(langmode) 77 | print("The query was executed successfully. The language slot already is in the database.") 78 | 79 | except: 80 | langmode = "system" 81 | self.setLanguage(langmode) 82 | print("The query was executed successfully. The language slot has been created.") 83 | 84 | except sqlite3.Error as e: 85 | print(f"The SQLite module encountered an error: {e}.") 86 | 87 | def setLanguage(self, langmode): 88 | if langmode == "system" or langmode == None: 89 | languageToUse = locale.getlocale()[0] 90 | 91 | else: 92 | languageToUse = langmode 93 | 94 | if languageToUse != None: 95 | if languageToUse.startswith("de"): 96 | translations.de.translateNoUpdateAvailableDE(self) 97 | 98 | elif languageToUse.startswith("uk"): 99 | translations.uk.translateNoUpdateAvailableUK(self) 100 | 101 | else: 102 | translations.en.translateNoUpdateAvailableEN(self) 103 | 104 | else: 105 | if platform.system() == "Windows": 106 | langfile = platformSpecific.windowsSpecific.windowsLanguageFile() 107 | 108 | else: 109 | langfile = platformSpecific.unixSpecific.unixLanguageFile() 110 | 111 | try: 112 | with open(langfile, "r+") as language: 113 | languageContent = language.readlines() 114 | languageToUse = languageContent[0].replace("\n", "") 115 | 116 | if languageToUse != None: 117 | if languageToUse.startswith("de"): 118 | translations.de.translateNoUpdateAvailableDE(self) 119 | 120 | elif languageToUse.startswith("uk"): 121 | translations.uk.translateNoUpdateAvailableUK(self) 122 | 123 | else: 124 | translations.en.translateNoUpdateAvailableEN(self) 125 | 126 | except: 127 | print("Translation can't be figured out. Using English language.") 128 | translations.en.translateNoUpdateAvailableEN(self) -------------------------------------------------------------------------------- /dialogExecution/qemuImgError.py: -------------------------------------------------------------------------------- 1 | from uiScripts.ui_QemuImgNotInstalled import Ui_Dialog 2 | from PySide6.QtWidgets import * 3 | from PySide6 import QtGui 4 | import platform 5 | 6 | if platform.system() == "Windows": 7 | import platformSpecific.windowsSpecific 8 | 9 | else: 10 | import platformSpecific.unixSpecific 11 | 12 | import translations.de 13 | import translations.uk 14 | import translations.en 15 | import translations.fr 16 | import translations.es 17 | import translations.ro 18 | import translations.be 19 | import translations.cz 20 | import translations.ru 21 | import translations.pt 22 | import translations.it 23 | import locale 24 | import sqlite3 25 | 26 | class QemuImgMissing(QDialog, Ui_Dialog): 27 | def __init__(self, parent = None): 28 | try: 29 | super().__init__(parent) 30 | 31 | except: 32 | super().__init__() 33 | 34 | self.setupUi(self) 35 | self.setWindowTitle("EmuGUI - Component is missing") 36 | 37 | try: 38 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 39 | 40 | except: 41 | pass 42 | 43 | self.connectSignalsSlots() 44 | self.langDetect() 45 | 46 | def connectSignalsSlots(self): 47 | self.pushButton.clicked.connect(self.close) 48 | 49 | def langDetect(self): 50 | select_language = """ 51 | SELECT name, value FROM settings 52 | WHERE name = "lang"; 53 | """ 54 | 55 | if platform.system() == "Windows": 56 | connection = platformSpecific.windowsSpecific.setupWindowsBackend() 57 | 58 | else: 59 | connection = platformSpecific.unixSpecific.setupUnixBackend() 60 | 61 | cursor = connection.cursor() 62 | 63 | try: 64 | cursor.execute(select_language) 65 | connection.commit() 66 | result = cursor.fetchall() 67 | 68 | # Language modes 69 | # system: language of OS 70 | # en: English 71 | # de: German 72 | langmode = "system" 73 | 74 | try: 75 | qemu_img_slot = str(result[0]) 76 | 77 | if result[0][1] == "en": 78 | langmode = "en" 79 | 80 | elif result[0][1] == "de": 81 | langmode = "de" 82 | 83 | elif result[0][1] == "uk": 84 | langmode = "uk" 85 | 86 | elif result[0][1] == "fr": 87 | langmode = "fr" 88 | 89 | elif result[0][1] == "es": 90 | langmode = "es" 91 | 92 | elif result[0][1] == "ro": 93 | langmode = "ro" 94 | 95 | elif result[0][1] == "ru": 96 | langmode = "ru" 97 | 98 | elif result[0][1] == "be": 99 | langmode = "be" 100 | 101 | elif result[0][1] == "cz": 102 | langmode = "cz" 103 | 104 | elif result[0][1] == "pt": 105 | langmode = "pt" 106 | 107 | elif result[0][1] == "it": 108 | langmode = "it" 109 | 110 | elif result[0][1] == "system": 111 | langmode = "system" 112 | 113 | self.setLanguage(langmode) 114 | print("The query was executed successfully. The language slot already is in the database.") 115 | 116 | except: 117 | langmode = "system" 118 | self.setLanguage(langmode) 119 | print("The query was executed successfully. The language slot has been created.") 120 | 121 | except sqlite3.Error as e: 122 | print(f"The SQLite module encountered an error: {e}.") 123 | 124 | def setLanguage(self, langmode): 125 | if langmode == "system" or langmode == None: 126 | languageToUse = locale.getlocale()[0] 127 | 128 | else: 129 | languageToUse = langmode 130 | 131 | if languageToUse != None: 132 | if languageToUse.startswith("de"): 133 | translations.de.translateQemuImgMissingDE(self) 134 | 135 | elif languageToUse.startswith("uk"): 136 | translations.uk.translateQemuImgMissingUK(self) 137 | 138 | elif languageToUse.startswith("fr"): 139 | translations.fr.translateQemuImgMissingFR(self) 140 | 141 | elif languageToUse.startswith("es"): 142 | translations.es.translateQemuImgMissingES(self) 143 | 144 | elif languageToUse.startswith("ro"): 145 | translations.ro.translateQemuImgMissingRO(self) 146 | 147 | elif languageToUse.startswith("ru"): 148 | translations.ru.translateQemuImgMissingRU(self) 149 | 150 | elif languageToUse.startswith("be"): 151 | translations.be.translateQemuImgMissingBE(self) 152 | 153 | elif languageToUse.startswith("cz"): 154 | translations.cz.translateQemuImgMissingCZ(self) 155 | 156 | elif languageToUse.startswith("pt"): 157 | translations.pt.translateQemuImgMissingPT(self) 158 | 159 | elif languageToUse.startswith("it"): 160 | translations.it.translateQemuImgMissingIT(self) 161 | 162 | else: 163 | translations.en.translateQemuImgMissingEN(self) 164 | 165 | else: 166 | if platform.system() == "Windows": 167 | langfile = platformSpecific.windowsSpecific.windowsLanguageFile() 168 | 169 | else: 170 | langfile = platformSpecific.unixSpecific.unixLanguageFile() 171 | 172 | try: 173 | with open(langfile, "r+") as language: 174 | languageContent = language.readlines() 175 | languageToUse = languageContent[0].replace("\n", "") 176 | 177 | if languageToUse != None: 178 | if languageToUse.startswith("de"): 179 | translations.de.translateQemuImgMissingDE(self) 180 | 181 | elif languageToUse.startswith("uk"): 182 | translations.uk.translateQemuImgMissingUK(self) 183 | 184 | elif languageToUse.startswith("fr"): 185 | translations.fr.translateQemuImgMissingFR(self) 186 | 187 | elif languageToUse.startswith("es"): 188 | translations.es.translateQemuImgMissingES(self) 189 | 190 | elif languageToUse.startswith("ro"): 191 | translations.ro.translateQemuImgMissingRO(self) 192 | 193 | elif languageToUse.startswith("ru"): 194 | translations.ru.translateQemuImgMissingRU(self) 195 | 196 | elif languageToUse.startswith("be"): 197 | translations.be.translateQemuImgMissingBE(self) 198 | 199 | elif languageToUse.startswith("cz"): 200 | translations.cz.translateQemuImgMissingCZ(self) 201 | 202 | elif languageToUse.startswith("pt"): 203 | translations.pt.translateQemuImgMissingPT(self) 204 | 205 | elif languageToUse.startswith("it"): 206 | translations.it.translateQemuImgMissingIT(self) 207 | 208 | else: 209 | translations.en.translateQemuImgMissingEN(self) 210 | 211 | except: 212 | print("Translation can't be figured out. Using English language.") 213 | translations.en.translateQemuImgMissingEN(self) -------------------------------------------------------------------------------- /dialogExecution/qemuSysError.py: -------------------------------------------------------------------------------- 1 | from uiScripts.ui_QemuI386NotInstalled import Ui_Dialog 2 | from PySide6.QtWidgets import * 3 | from PySide6 import QtGui 4 | import platform 5 | 6 | if platform.system() == "Windows": 7 | import platformSpecific.windowsSpecific 8 | 9 | else: 10 | import platformSpecific.unixSpecific 11 | 12 | import translations.de 13 | import translations.uk 14 | import translations.en 15 | import translations.fr 16 | import translations.es 17 | import translations.ro 18 | import translations.be 19 | import translations.cz 20 | import translations.ru 21 | import translations.pt 22 | import translations.it 23 | import locale 24 | import sqlite3 25 | 26 | class QemuSysMissing(QDialog, Ui_Dialog): 27 | def __init__(self, parent = None): 28 | try: 29 | super().__init__(parent) 30 | 31 | except: 32 | super().__init__() 33 | 34 | self.setupUi(self) 35 | self.setWindowTitle("EmuGUI - Component is missing") 36 | 37 | try: 38 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 39 | 40 | except: 41 | pass 42 | 43 | self.connectSignalsSlots() 44 | self.vmSpecs = self.readTempVmFile() 45 | self.langDetect() 46 | 47 | def connectSignalsSlots(self): 48 | self.pushButton.clicked.connect(self.close) 49 | 50 | def readTempVmFile(self): 51 | # Searching temporary files 52 | if platform.system() == "Windows": 53 | tempVmDef = platformSpecific.windowsSpecific.windowsTempVmStarterFile() 54 | 55 | else: 56 | tempVmDef = platformSpecific.unixSpecific.unixTempVmStarterFile() 57 | 58 | vmSpecs = [] 59 | 60 | with open(tempVmDef, "r+") as tempVmDefFile: 61 | vmSpecsRaw = tempVmDefFile.readlines() 62 | 63 | for vmSpec in vmSpecsRaw: 64 | vmSpecNew = vmSpec.replace("\n", "") 65 | vmSpecs.append(vmSpecNew) 66 | 67 | return vmSpecs 68 | 69 | def langDetect(self): 70 | select_language = """ 71 | SELECT name, value FROM settings 72 | WHERE name = "lang"; 73 | """ 74 | 75 | if platform.system() == "Windows": 76 | connection = platformSpecific.windowsSpecific.setupWindowsBackend() 77 | 78 | else: 79 | connection = platformSpecific.unixSpecific.setupUnixBackend() 80 | 81 | cursor = connection.cursor() 82 | 83 | try: 84 | cursor.execute(select_language) 85 | connection.commit() 86 | result = cursor.fetchall() 87 | 88 | # Language modes 89 | # system: language of OS 90 | # en: English 91 | # de: German 92 | langmode = "system" 93 | 94 | try: 95 | qemu_img_slot = str(result[0]) 96 | 97 | if result[0][1] == "en": 98 | langmode = "en" 99 | 100 | elif result[0][1] == "de": 101 | langmode = "de" 102 | 103 | elif result[0][1] == "uk": 104 | langmode = "uk" 105 | 106 | elif result[0][1] == "fr": 107 | langmode = "fr" 108 | 109 | elif result[0][1] == "es": 110 | langmode = "es" 111 | 112 | elif result[0][1] == "ro": 113 | langmode = "ro" 114 | 115 | elif result[0][1] == "ru": 116 | langmode = "ru" 117 | 118 | elif result[0][1] == "be": 119 | langmode = "be" 120 | 121 | elif result[0][1] == "cz": 122 | langmode = "cz" 123 | 124 | elif result[0][1] == "pt": 125 | langmode = "pt" 126 | 127 | elif result[0][1] == "it": 128 | langmode = "it" 129 | 130 | elif result[0][1] == "system": 131 | langmode = "system" 132 | 133 | self.setLanguage(langmode) 134 | print("The query was executed successfully. The language slot already is in the database.") 135 | 136 | except: 137 | langmode = "system" 138 | self.setLanguage(langmode) 139 | print("The query was executed successfully. The language slot has been created.") 140 | 141 | except sqlite3.Error as e: 142 | print(f"The SQLite module encountered an error: {e}.") 143 | 144 | def setLanguage(self, langmode): 145 | if langmode == "system" or langmode == None: 146 | languageToUse = locale.getlocale()[0] 147 | 148 | else: 149 | languageToUse = langmode 150 | 151 | if languageToUse != None: 152 | if languageToUse.startswith("de"): 153 | translations.de.translateQemuSysMissingDE(self, self.vmSpecs[1]) 154 | 155 | elif languageToUse.startswith("uk"): 156 | translations.uk.translateQemuSysMissingUK(self, self.vmSpecs[1]) 157 | 158 | elif languageToUse.startswith("fr"): 159 | translations.fr.translateQemuSysMissingFR(self, self.vmSpecs[1]) 160 | 161 | elif languageToUse.startswith("es"): 162 | translations.es.translateQemuSysMissingES(self, self.vmSpecs[1]) 163 | 164 | elif languageToUse.startswith("ro"): 165 | translations.ro.translateQemuSysMissingRO(self, self.vmSpecs[1]) 166 | 167 | elif languageToUse.startswith("ru"): 168 | translations.ru.translateQemuSysMissingRU(self, self.vmSpecs[1]) 169 | 170 | elif languageToUse.startswith("be"): 171 | translations.be.translateQemuSysMissingBE(self, self.vmSpecs[1]) 172 | 173 | elif languageToUse.startswith("cz"): 174 | translations.cz.translateQemuSysMissingCZ(self, self.vmSpecs[1]) 175 | 176 | elif languageToUse.startswith("pt"): 177 | translations.pt.translateQemuSysMissingPT(self, self.vmSpecs[1]) 178 | 179 | elif languageToUse.startswith("it"): 180 | translations.it.translateQemuSysMissingIT(self, self.vmSpecs[1]) 181 | 182 | else: 183 | translations.en.translateQemuSysMissingEN(self, self.vmSpecs[1]) 184 | 185 | else: 186 | if platform.system() == "Windows": 187 | langfile = platformSpecific.windowsSpecific.windowsLanguageFile() 188 | 189 | else: 190 | langfile = platformSpecific.unixSpecific.unixLanguageFile() 191 | 192 | try: 193 | with open(langfile, "r+") as language: 194 | languageContent = language.readlines() 195 | languageToUse = languageContent[0].replace("\n", "") 196 | 197 | if languageToUse != None: 198 | if languageToUse.startswith("de"): 199 | translations.de.translateQemuSysMissingDE(self, self.vmSpecs[1]) 200 | 201 | elif languageToUse.startswith("uk"): 202 | translations.uk.translateQemuSysMissingUK(self, self.vmSpecs[1]) 203 | 204 | elif languageToUse.startswith("fr"): 205 | translations.fr.translateQemuSysMissingFR(self, self.vmSpecs[1]) 206 | 207 | elif languageToUse.startswith("es"): 208 | translations.es.translateQemuSysMissingES(self, self.vmSpecs[1]) 209 | 210 | elif languageToUse.startswith("ro"): 211 | translations.ro.translateQemuSysMissingRO(self, self.vmSpecs[1]) 212 | 213 | elif languageToUse.startswith("ru"): 214 | translations.ru.translateQemuSysMissingRU(self, self.vmSpecs[1]) 215 | 216 | elif languageToUse.startswith("be"): 217 | translations.be.translateQemuSysMissingBE(self, self.vmSpecs[1]) 218 | 219 | elif languageToUse.startswith("cz"): 220 | translations.cz.translateQemuSysMissingCZ(self, self.vmSpecs[1]) 221 | 222 | elif languageToUse.startswith("pt"): 223 | translations.pt.translateQemuSysMissingPT(self, self.vmSpecs[1]) 224 | 225 | elif languageToUse.startswith("it"): 226 | translations.it.translateQemuSysMissingIT(self, self.vmSpecs[1]) 227 | 228 | else: 229 | translations.en.translateQemuSysMissingEN(self, self.vmSpecs[1]) 230 | 231 | except: 232 | print("Translation can't be figured out. Using English language.") 233 | translations.en.translateQemuSysMissingEN(self, self.vmSpecs[1]) -------------------------------------------------------------------------------- /dialogExecution/settingsRequireRestart.py: -------------------------------------------------------------------------------- 1 | from uiScripts.ui_SettingsRestart import Ui_Dialog 2 | from PySide6.QtWidgets import * 3 | from PySide6 import QtGui 4 | import services.pathfinder as pf 5 | 6 | class SettingsRequireEmuGUIReboot(QDialog, Ui_Dialog): 7 | def __init__(self, parent = None): 8 | try: 9 | super().__init__(parent) 10 | 11 | except: 12 | super().__init__() 13 | 14 | self.setupUi(self) 15 | self.exec_folder = pf.retrieveExecFolder() 16 | self.setWindowTitle("EmuGUI Settings") 17 | 18 | try: 19 | self.setWindowIcon(QtGui.QIcon(f"{self.exec_folder}EmuGUI.png")) 20 | 21 | except: 22 | pass 23 | 24 | self.connectSignalsSlots() 25 | 26 | def connectSignalsSlots(self): 27 | self.pushButton.clicked.connect(self.close) -------------------------------------------------------------------------------- /dialogExecution/updateAvailable.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import * 2 | from PySide6 import QtGui 3 | from uiScripts.ui_Update import Ui_Dialog 4 | import webbrowser 5 | import platform 6 | 7 | if platform.system() == "Windows": 8 | import platformSpecific.windowsSpecific 9 | 10 | else: 11 | import platformSpecific.unixSpecific 12 | 13 | import sqlite3 14 | import translations.de 15 | import translations.uk 16 | import translations.en 17 | import translations.be 18 | import translations.cz 19 | import translations.ru 20 | import locale 21 | 22 | class UpdateAvailable(QDialog, Ui_Dialog): 23 | def __init__(self, parent=None): 24 | super().__init__(parent) 25 | self.setupUi(self) 26 | self.setWindowTitle("EmuGUI Update") 27 | self.langDetect() 28 | 29 | try: 30 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 31 | 32 | except: 33 | pass 34 | 35 | self.connectSignalsSlots() 36 | 37 | def connectSignalsSlots(self): 38 | self.pushButton.clicked.connect(self.redirectToWebsite) 39 | self.pushButton_2.clicked.connect(self.close) 40 | self.pushButton_3.clicked.connect(self.tempRedirectToGitLab) # temporary line of code 41 | 42 | # Temporary 43 | def tempRedirectToGitLab(self): 44 | webbrowser.open("https://gitlab.com/Tech-FZ/emugui-prerelease") 45 | self.close() 46 | 47 | # This is the main code again. 48 | def redirectToWebsite(self): 49 | if platform.system() == "Windows": 50 | connection = platformSpecific.windowsSpecific.setupWindowsBackend() 51 | 52 | else: 53 | connection = platformSpecific.unixSpecific.setupUnixBackend() 54 | 55 | select_update_mirror = """ 56 | SELECT name, value FROM updater 57 | WHERE name = "updatemirror"; 58 | """ 59 | 60 | select_update_channel = """ 61 | SELECT name, value FROM updater 62 | WHERE name = "updatechannel"; 63 | """ 64 | 65 | cursor = connection.cursor() 66 | 67 | try: 68 | cursor.execute(select_update_channel) 69 | connection.commit() 70 | result = cursor.fetchall() 71 | 72 | try: 73 | qemu_img_slot = str(result[0]) 74 | 75 | if result[0][1] == "stable": 76 | try: 77 | cursor.execute(select_update_mirror) 78 | connection.commit() 79 | result = cursor.fetchall() 80 | 81 | try: 82 | qemu_img_slot = str(result[0]) 83 | 84 | if result[0][1] == "GitHub": 85 | webbrowser.open("https://github.com/Tech-FZ/EmuGUI") 86 | 87 | elif result[0][1] == "Codeberg": 88 | webbrowser.open("https://codeberg.org/lucien-rowan/EmuGUI") 89 | 90 | print("The query was executed successfully.") 91 | self.close() 92 | 93 | except: 94 | print("The query was executed successfully but the mirror couldn't be retrieved. Please check one of the following mirrors:") 95 | print("https://github.com/Tech-FZ/EmuGUI") 96 | print("https://codeberg.org/lucien-rowan/EmuGUI or") 97 | print("https://codeberg.org/lucien-rowan/EmuGUI-PreRelease") 98 | 99 | except sqlite3.Error as e: 100 | print(f"The SQLite module encountered an error: {e}.") 101 | 102 | elif result[0][1] == "pre-release": 103 | webbrowser.open("https://codeberg.org/lucien-rowan/EmuGUI-PreRelease") 104 | 105 | print("The query was executed successfully.") 106 | self.close() 107 | 108 | except: 109 | print("The query was executed successfully but the mirror couldn't be retrieved. Please check one of the following mirrors:") 110 | print("https://github.com/Tech-FZ/EmuGUI or") 111 | print("https://codeberg.org/lucien-rowan/EmuGUI") 112 | 113 | except sqlite3.Error as e: 114 | print(f"The SQLite module encountered an error: {e}.") 115 | 116 | def langDetect(self): 117 | select_language = """ 118 | SELECT name, value FROM settings 119 | WHERE name = "lang"; 120 | """ 121 | 122 | if platform.system() == "Windows": 123 | connection = platformSpecific.windowsSpecific.setupWindowsBackend() 124 | 125 | else: 126 | connection = platformSpecific.unixSpecific.setupUnixBackend() 127 | 128 | cursor = connection.cursor() 129 | 130 | try: 131 | cursor.execute(select_language) 132 | connection.commit() 133 | result = cursor.fetchall() 134 | 135 | # Language modes 136 | # system: language of OS 137 | # en: English 138 | # de: German 139 | langmode = "system" 140 | 141 | try: 142 | qemu_img_slot = str(result[0]) 143 | 144 | i = 0 145 | 146 | if result[0][1] == "en": 147 | langmode = "en" 148 | 149 | elif result[0][1] == "de": 150 | langmode = "de" 151 | 152 | elif result[0][1] == "uk": 153 | langmode = "uk" 154 | 155 | elif result[0][1] == "system": 156 | langmode = "system" 157 | 158 | self.setLanguage(langmode) 159 | print("The query was executed successfully. The language slot already is in the database.") 160 | 161 | except: 162 | langmode = "system" 163 | self.setLanguage(langmode) 164 | print("The query was executed successfully. The language slot has been created.") 165 | 166 | except sqlite3.Error as e: 167 | print(f"The SQLite module encountered an error: {e}.") 168 | 169 | def setLanguage(self, langmode): 170 | if langmode == "system" or langmode == None: 171 | languageToUse = locale.getlocale()[0] 172 | 173 | else: 174 | languageToUse = langmode 175 | 176 | if languageToUse != None: 177 | if languageToUse.startswith("de"): 178 | translations.de.translateUpdateAvailableDE(self) 179 | 180 | elif languageToUse.startswith("uk"): 181 | translations.uk.translateUpdateAvailableUK(self) 182 | 183 | else: 184 | translations.en.translateUpdateAvailableEN(self) 185 | 186 | else: 187 | if platform.system() == "Windows": 188 | langfile = platformSpecific.windowsSpecific.windowsLanguageFile() 189 | 190 | else: 191 | langfile = platformSpecific.unixSpecific.unixLanguageFile() 192 | 193 | try: 194 | with open(langfile, "r+") as language: 195 | languageContent = language.readlines() 196 | languageToUse = languageContent[0].replace("\n", "") 197 | 198 | if languageToUse != None: 199 | if languageToUse.startswith("de"): 200 | translations.de.translateUpdateAvailableDE(self) 201 | 202 | elif languageToUse.startswith("uk"): 203 | translations.uk.translateUpdateAvailableUK(self) 204 | 205 | else: 206 | translations.en.translateUpdateAvailableEN(self) 207 | 208 | except: 209 | print("Translation can't be figured out. Using English language.") 210 | translations.en.translateUpdateAvailableEN(self) -------------------------------------------------------------------------------- /dialogExecution/usbTabletDepreciation.py: -------------------------------------------------------------------------------- 1 | from uiScripts.ui_USBTabletCheckboxDepreciated import Ui_Dialog 2 | from PySide6.QtWidgets import * 3 | from PySide6 import QtGui 4 | import platform 5 | 6 | if platform.system() == "Windows": 7 | import platformSpecific.windowsSpecific 8 | 9 | else: 10 | import platformSpecific.unixSpecific 11 | 12 | class UsbTabletDepreciated(QDialog, Ui_Dialog): 13 | def __init__(self, parent = None): 14 | try: 15 | super().__init__(parent) 16 | 17 | except: 18 | super().__init__() 19 | 20 | self.setupUi(self) 21 | self.vmSpecs = self.readTempVmFile() 22 | self.setWindowTitle(f"EmuGUI - {self.vmSpecs[0]} uses a depreciated feature") 23 | 24 | try: 25 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 26 | 27 | except: 28 | pass 29 | 30 | self.connectSignalsSlots() 31 | 32 | def connectSignalsSlots(self): 33 | self.pushButton.clicked.connect(self.close) 34 | 35 | def readTempVmFile(self): 36 | # Searching temporary files 37 | if platform.system() == "Windows": 38 | tempVmDef = platformSpecific.windowsSpecific.windowsTempVmStarterFile() 39 | 40 | else: 41 | tempVmDef = platformSpecific.unixSpecific.unixTempVmStarterFile() 42 | 43 | vmSpecs = [] 44 | 45 | with open(tempVmDef, "r+") as tempVmDefFile: 46 | vmSpecsRaw = tempVmDefFile.readlines() 47 | 48 | for vmSpec in vmSpecsRaw: 49 | vmSpecNew = vmSpec.replace("\n", "") 50 | vmSpecs.append(vmSpecNew) 51 | 52 | return vmSpecs -------------------------------------------------------------------------------- /dialogExecution/vhdExistsDialog.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import * 2 | from PySide6 import QtGui 3 | from uiScripts.ui_VhdExists import Ui_Dialog 4 | import platform 5 | 6 | if platform.system() == "Windows": 7 | import platformSpecific.windowsSpecific 8 | 9 | else: 10 | import platformSpecific.unixSpecific 11 | 12 | import sqlite3 13 | import translations.de 14 | import translations.uk 15 | import translations.en 16 | import translations.fr 17 | import translations.es 18 | import translations.ro 19 | import translations.be 20 | import translations.cz 21 | import translations.ru 22 | import translations.pt 23 | import translations.it 24 | import locale 25 | 26 | class VhdAlreadyExists(QDialog, Ui_Dialog): 27 | def __init__(self, parent=None): 28 | try: 29 | super().__init__(parent) 30 | 31 | except: 32 | super().__init__() 33 | 34 | self.setupUi(self) 35 | self.setWindowTitle("EmuGUI - This virtual hard disk exists") 36 | self.langDetect() 37 | 38 | try: 39 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 40 | 41 | except: 42 | pass 43 | 44 | self.connectSignalsSlots() 45 | 46 | def connectSignalsSlots(self): 47 | self.pushButton.clicked.connect(self.overwriteDisk) 48 | self.pushButton_2.clicked.connect(self.keepDisk) 49 | 50 | def keepDisk(self): 51 | if platform.system() == "Windows": 52 | tempVmDef = platformSpecific.windowsSpecific.windowsTempVmStarterFile() 53 | 54 | else: 55 | tempVmDef = platformSpecific.unixSpecific.unixTempVmStarterFile() 56 | 57 | with open(tempVmDef, "w+") as tempVmDefFile: 58 | tempVmDefFile.write("keep") 59 | 60 | self.close() 61 | 62 | def overwriteDisk(self): 63 | if platform.system() == "Windows": 64 | tempVmDef = platformSpecific.windowsSpecific.windowsTempVmStarterFile() 65 | 66 | else: 67 | tempVmDef = platformSpecific.unixSpecific.unixTempVmStarterFile() 68 | 69 | with open(tempVmDef, "w+") as tempVmDefFile: 70 | tempVmDefFile.write("overwrite") 71 | 72 | self.close() 73 | 74 | def langDetect(self): 75 | select_language = """ 76 | SELECT name, value FROM settings 77 | WHERE name = "lang"; 78 | """ 79 | 80 | if platform.system() == "Windows": 81 | connection = platformSpecific.windowsSpecific.setupWindowsBackend() 82 | 83 | else: 84 | connection = platformSpecific.unixSpecific.setupUnixBackend() 85 | 86 | cursor = connection.cursor() 87 | 88 | try: 89 | cursor.execute(select_language) 90 | connection.commit() 91 | result = cursor.fetchall() 92 | 93 | # Language modes 94 | # system: language of OS 95 | # en: English 96 | # de: German 97 | langmode = "system" 98 | 99 | try: 100 | qemu_img_slot = str(result[0]) 101 | 102 | if result[0][1] == "en": 103 | langmode = "en" 104 | 105 | elif result[0][1] == "de": 106 | langmode = "de" 107 | 108 | elif result[0][1] == "uk": 109 | langmode = "uk" 110 | 111 | elif result[0][1] == "fr": 112 | langmode = "fr" 113 | 114 | elif result[0][1] == "es": 115 | langmode = "es" 116 | 117 | elif result[0][1] == "ro": 118 | langmode = "ro" 119 | 120 | elif result[0][1] == "ru": 121 | langmode = "ru" 122 | 123 | elif result[0][1] == "be": 124 | langmode = "be" 125 | 126 | elif result[0][1] == "cz": 127 | langmode = "cz" 128 | 129 | elif result[0][1] == "pt": 130 | langmode = "pt" 131 | 132 | elif result[0][1] == "it": 133 | langmode = "it" 134 | 135 | elif result[0][1] == "system": 136 | langmode = "system" 137 | 138 | self.setLanguage(langmode) 139 | print("The query was executed successfully. The language slot already is in the database.") 140 | 141 | except: 142 | langmode = "system" 143 | self.setLanguage(langmode) 144 | print("The query was executed successfully. The language slot has been created.") 145 | 146 | except sqlite3.Error as e: 147 | print(f"The SQLite module encountered an error: {e}.") 148 | 149 | def setLanguage(self, langmode): 150 | if langmode == "system" or langmode == None: 151 | languageToUse = locale.getlocale()[0] 152 | 153 | else: 154 | languageToUse = langmode 155 | 156 | if languageToUse != None: 157 | if languageToUse.startswith("de"): 158 | translations.de.translateVhdExistsDE(self) 159 | 160 | elif languageToUse.startswith("uk"): 161 | translations.uk.translateVhdExistsUK(self) 162 | 163 | elif languageToUse.startswith("fr"): 164 | translations.fr.translateVhdExistsFR(self) 165 | 166 | elif languageToUse.startswith("es"): 167 | translations.es.translateVhdExistsES(self) 168 | 169 | elif languageToUse.startswith("ro"): 170 | translations.ro.translateVhdExistsRO(self) 171 | 172 | elif languageToUse.startswith("ru"): 173 | translations.ru.translateVhdExistsRU(self) 174 | 175 | elif languageToUse.startswith("be"): 176 | translations.be.translateVhdExistsBE(self) 177 | 178 | elif languageToUse.startswith("cz"): 179 | translations.cz.translateVhdExistsCZ(self) 180 | 181 | elif languageToUse.startswith("pt"): 182 | translations.pt.translateVhdExistsPT(self) 183 | 184 | elif languageToUse.startswith("it"): 185 | translations.it.translateVhdExistsIT(self) 186 | 187 | else: 188 | translations.en.translateVhdExistsEN(self) 189 | 190 | else: 191 | if platform.system() == "Windows": 192 | langfile = platformSpecific.windowsSpecific.windowsLanguageFile() 193 | 194 | else: 195 | langfile = platformSpecific.unixSpecific.unixLanguageFile() 196 | 197 | try: 198 | with open(langfile, "r+") as language: 199 | languageContent = language.readlines() 200 | languageToUse = languageContent[0].replace("\n", "") 201 | 202 | if languageToUse != None: 203 | if languageToUse.startswith("de"): 204 | translations.de.translateVhdExistsDE(self) 205 | 206 | elif languageToUse.startswith("uk"): 207 | translations.uk.translateVhdExistsUK(self) 208 | 209 | elif languageToUse.startswith("fr"): 210 | translations.fr.translateVhdExistsFR(self) 211 | 212 | elif languageToUse.startswith("es"): 213 | translations.es.translateVhdExistsES(self) 214 | 215 | elif languageToUse.startswith("ro"): 216 | translations.ro.translateVhdExistsRO(self) 217 | 218 | elif languageToUse.startswith("ru"): 219 | translations.ru.translateVhdExistsRU(self) 220 | 221 | elif languageToUse.startswith("be"): 222 | translations.be.translateVhdExistsBE(self) 223 | 224 | elif languageToUse.startswith("cz"): 225 | translations.cz.translateVhdExistsCZ(self) 226 | 227 | elif languageToUse.startswith("pt"): 228 | translations.pt.translateVhdExistsPT(self) 229 | 230 | elif languageToUse.startswith("it"): 231 | translations.it.translateVhdExistsIT(self) 232 | 233 | else: 234 | translations.en.translateVhdExistsEN(self) 235 | 236 | except: 237 | print("Translation can't be figured out. Using English language.") 238 | translations.en.translateVhdExistsEN(self) -------------------------------------------------------------------------------- /dialogExecution/vmExistsDialog.py: -------------------------------------------------------------------------------- 1 | from uiScripts.ui_VmExists import Ui_Dialog 2 | from PySide6.QtWidgets import * 3 | from PySide6 import QtGui 4 | import sqlite3 5 | import platform 6 | 7 | if platform.system() == "Windows": 8 | import platformSpecific.windowsSpecific 9 | 10 | else: 11 | import platformSpecific.unixSpecific 12 | 13 | import translations.de 14 | import translations.uk 15 | import translations.en 16 | import translations.fr 17 | import translations.es 18 | import translations.ro 19 | import translations.be 20 | import translations.cz 21 | import translations.ru 22 | import translations.pt 23 | import translations.it 24 | import locale 25 | 26 | class VmAlreadyExistsDialog(QDialog, Ui_Dialog): 27 | def __init__(self, parent = None): 28 | try: 29 | super().__init__(parent) 30 | 31 | except: 32 | super().__init__() 33 | 34 | self.setupUi(self) 35 | self.setWindowTitle("EmuGUI - VM already exists") 36 | self.langDetect() 37 | 38 | try: 39 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 40 | 41 | except: 42 | pass 43 | 44 | self.connectSignalsSlots() 45 | 46 | def connectSignalsSlots(self): 47 | self.pushButton.clicked.connect(self.close) 48 | 49 | def langDetect(self): 50 | select_language = """ 51 | SELECT name, value FROM settings 52 | WHERE name = "lang"; 53 | """ 54 | 55 | if platform.system() == "Windows": 56 | connection = platformSpecific.windowsSpecific.setupWindowsBackend() 57 | 58 | else: 59 | connection = platformSpecific.unixSpecific.setupUnixBackend() 60 | 61 | cursor = connection.cursor() 62 | 63 | try: 64 | cursor.execute(select_language) 65 | connection.commit() 66 | result = cursor.fetchall() 67 | 68 | # Language modes 69 | # system: language of OS 70 | # en: English 71 | # de: German 72 | langmode = "system" 73 | 74 | try: 75 | qemu_img_slot = str(result[0]) 76 | 77 | if result[0][1] == "en": 78 | langmode = "en" 79 | 80 | elif result[0][1] == "de": 81 | langmode = "de" 82 | 83 | elif result[0][1] == "uk": 84 | langmode = "uk" 85 | 86 | elif result[0][1] == "fr": 87 | langmode = "fr" 88 | 89 | elif result[0][1] == "es": 90 | langmode = "es" 91 | 92 | elif result[0][1] == "ro": 93 | langmode = "ro" 94 | 95 | elif result[0][1] == "ru": 96 | langmode = "ru" 97 | 98 | elif result[0][1] == "be": 99 | langmode = "be" 100 | 101 | elif result[0][1] == "cz": 102 | langmode = "cz" 103 | 104 | elif result[0][1] == "pt": 105 | langmode = "pt" 106 | 107 | elif result[0][1] == "it": 108 | langmode = "it" 109 | 110 | elif result[0][1] == "system": 111 | langmode = "system" 112 | 113 | self.setLanguage(langmode) 114 | print("The query was executed successfully. The language slot already is in the database.") 115 | 116 | except: 117 | langmode = "system" 118 | self.setLanguage(langmode) 119 | print("The query was executed successfully. The language slot has been created.") 120 | 121 | except sqlite3.Error as e: 122 | print(f"The SQLite module encountered an error: {e}.") 123 | 124 | def setLanguage(self, langmode): 125 | if langmode == "system" or langmode == None: 126 | languageToUse = locale.getlocale()[0] 127 | 128 | else: 129 | languageToUse = langmode 130 | 131 | if languageToUse != None: 132 | if languageToUse.startswith("de"): 133 | translations.de.translateVmExistsDE(self) 134 | 135 | elif languageToUse.startswith("uk"): 136 | translations.uk.translateVmExistsUK(self) 137 | 138 | elif languageToUse.startswith("fr"): 139 | translations.fr.translateVmExistsFR(self) 140 | 141 | elif languageToUse.startswith("es"): 142 | translations.es.translateVmExistsES(self) 143 | 144 | elif languageToUse.startswith("ro"): 145 | translations.ro.translateVmExistsRO(self) 146 | 147 | elif languageToUse.startswith("ru"): 148 | translations.ru.translateVmExistsRU(self) 149 | 150 | elif languageToUse.startswith("be"): 151 | translations.be.translateVmExistsBE(self) 152 | 153 | elif languageToUse.startswith("cz"): 154 | translations.cz.translateVmExistsCZ(self) 155 | 156 | elif languageToUse.startswith("pt"): 157 | translations.pt.translateVmExistsPT(self) 158 | 159 | elif languageToUse.startswith("it"): 160 | translations.it.translateVmExistsIT(self) 161 | 162 | else: 163 | translations.en.translateVmExistsEN(self) 164 | 165 | else: 166 | if platform.system() == "Windows": 167 | langfile = platformSpecific.windowsSpecific.windowsLanguageFile() 168 | 169 | else: 170 | langfile = platformSpecific.unixSpecific.unixLanguageFile() 171 | 172 | try: 173 | with open(langfile, "r+") as language: 174 | languageContent = language.readlines() 175 | languageToUse = languageContent[0].replace("\n", "") 176 | 177 | if languageToUse != None: 178 | if languageToUse.startswith("de"): 179 | translations.de.translateVmExistsDE(self) 180 | 181 | elif languageToUse.startswith("uk"): 182 | translations.uk.translateVmExistsUK(self) 183 | 184 | elif languageToUse.startswith("fr"): 185 | translations.fr.translateVmExistsFR(self) 186 | 187 | elif languageToUse.startswith("es"): 188 | translations.es.translateVmExistsES(self) 189 | 190 | elif languageToUse.startswith("ro"): 191 | translations.ro.translateVmExistsRO(self) 192 | 193 | elif languageToUse.startswith("ru"): 194 | translations.ru.translateVmExistsRU(self) 195 | 196 | elif languageToUse.startswith("be"): 197 | translations.be.translateVmExistsBE(self) 198 | 199 | elif languageToUse.startswith("cz"): 200 | translations.cz.translateVmExistsCZ(self) 201 | 202 | elif languageToUse.startswith("pt"): 203 | translations.pt.translateVmExistsPT(self) 204 | 205 | elif languageToUse.startswith("it"): 206 | translations.it.translateVmExistsIT(self) 207 | 208 | else: 209 | translations.en.translateVmExistsEN(self) 210 | 211 | except: 212 | print("Translation can't be figured out. Using English language.") 213 | translations.en.translateVmExistsEN(self) -------------------------------------------------------------------------------- /dialogExecution/vmTooNew.py: -------------------------------------------------------------------------------- 1 | from uiScripts.ui_VmTooNew import Ui_Dialog 2 | from PySide6.QtWidgets import * 3 | from PySide6 import QtGui 4 | import platform 5 | 6 | if platform.system() == "Windows": 7 | import platformSpecific.windowsSpecific 8 | 9 | else: 10 | import platformSpecific.unixSpecific 11 | 12 | import sqlite3 13 | import translations.de 14 | import translations.uk 15 | import translations.en 16 | import translations.fr 17 | import translations.es 18 | import translations.ro 19 | import translations.be 20 | import translations.cz 21 | import translations.ru 22 | import translations.pt 23 | import translations.it 24 | import locale 25 | 26 | class VmIsMadeWithTooYoungEmuGUI(QDialog, Ui_Dialog): 27 | def __init__(self, parent = None): 28 | try: 29 | super().__init__(parent) 30 | 31 | except: 32 | super().__init__() 33 | 34 | self.setupUi(self) 35 | self.setWindowTitle("EmuGUI - VM is too new") 36 | 37 | try: 38 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 39 | 40 | except: 41 | pass 42 | 43 | self.connectSignalsSlots() 44 | 45 | def connectSignalsSlots(self): 46 | self.pushButton.clicked.connect(self.close) 47 | 48 | def langDetect(self): 49 | select_language = """ 50 | SELECT name, value FROM settings 51 | WHERE name = "lang"; 52 | """ 53 | 54 | if platform.system() == "Windows": 55 | connection = platformSpecific.windowsSpecific.setupWindowsBackend() 56 | 57 | else: 58 | connection = platformSpecific.unixSpecific.setupUnixBackend() 59 | 60 | cursor = connection.cursor() 61 | 62 | try: 63 | cursor.execute(select_language) 64 | connection.commit() 65 | result = cursor.fetchall() 66 | 67 | # Language modes 68 | # system: language of OS 69 | # en: English 70 | # de: German 71 | langmode = "system" 72 | 73 | try: 74 | qemu_img_slot = str(result[0]) 75 | 76 | i = 0 77 | 78 | if result[0][1] == "en": 79 | langmode = "en" 80 | 81 | elif result[0][1] == "de": 82 | langmode = "de" 83 | 84 | elif result[0][1] == "uk": 85 | langmode = "uk" 86 | 87 | elif result[0][1] == "fr": 88 | langmode = "fr" 89 | 90 | elif result[0][1] == "es": 91 | langmode = "es" 92 | 93 | elif result[0][1] == "ro": 94 | langmode = "ro" 95 | 96 | elif result[0][1] == "ru": 97 | langmode = "ru" 98 | 99 | elif result[0][1] == "be": 100 | langmode = "be" 101 | 102 | elif result[0][1] == "cz": 103 | langmode = "cz" 104 | 105 | elif result[0][1] == "pt": 106 | langmode = "pt" 107 | 108 | elif result[0][1] == "it": 109 | langmode = "it" 110 | 111 | elif result[0][1] == "system": 112 | langmode = "system" 113 | 114 | self.setLanguage(langmode) 115 | print("The query was executed successfully. The language slot already is in the database.") 116 | 117 | except: 118 | langmode = "system" 119 | self.setLanguage(langmode) 120 | print("The query was executed successfully. The language slot has been created.") 121 | 122 | except sqlite3.Error as e: 123 | print(f"The SQLite module encountered an error: {e}.") 124 | 125 | def setLanguage(self, langmode): 126 | if langmode == "system" or langmode == None: 127 | languageToUse = locale.getlocale()[0] 128 | 129 | else: 130 | languageToUse = langmode 131 | 132 | if languageToUse != None: 133 | if languageToUse.startswith("de"): 134 | translations.de.translateVmTooNewDE(self) 135 | 136 | elif languageToUse.startswith("uk"): 137 | translations.uk.translateVmTooNewUK(self) 138 | 139 | elif languageToUse.startswith("fr"): 140 | translations.fr.translateVmTooNewFR(self) 141 | 142 | elif languageToUse.startswith("es"): 143 | translations.es.translateVmTooNewES(self) 144 | 145 | elif languageToUse.startswith("ro"): 146 | translations.ro.translateVmTooNewRO(self) 147 | 148 | elif languageToUse.startswith("ru"): 149 | translations.ru.translateVmTooNewRU(self) 150 | 151 | elif languageToUse.startswith("be"): 152 | translations.be.translateVmTooNewBE(self) 153 | 154 | elif languageToUse.startswith("cz"): 155 | translations.cz.translateVmTooNewCZ(self) 156 | 157 | elif languageToUse.startswith("pt"): 158 | translations.pt.translateVmTooNewPT(self) 159 | 160 | elif languageToUse.startswith("it"): 161 | translations.it.translateVmTooNewIT(self) 162 | 163 | else: 164 | translations.en.translateVmTooNewEN(self) 165 | 166 | else: 167 | if platform.system() == "Windows": 168 | langfile = platformSpecific.windowsSpecific.windowsLanguageFile() 169 | 170 | else: 171 | langfile = platformSpecific.unixSpecific.unixLanguageFile() 172 | 173 | try: 174 | with open(langfile, "r+") as language: 175 | languageContent = language.readlines() 176 | languageToUse = languageContent[0].replace("\n", "") 177 | 178 | if languageToUse != None: 179 | if languageToUse.startswith("de"): 180 | translations.de.translateVmTooNewDE(self) 181 | 182 | elif languageToUse.startswith("uk"): 183 | translations.uk.translateVmTooNewUK(self) 184 | 185 | elif languageToUse.startswith("fr"): 186 | translations.fr.translateVmTooNewFR(self) 187 | 188 | elif languageToUse.startswith("es"): 189 | translations.es.translateVmTooNewES(self) 190 | 191 | elif languageToUse.startswith("ro"): 192 | translations.ro.translateVmTooNewRO(self) 193 | 194 | elif languageToUse.startswith("ru"): 195 | translations.ru.translateVmTooNewRU(self) 196 | 197 | elif languageToUse.startswith("be"): 198 | translations.be.translateVmTooNewBE(self) 199 | 200 | elif languageToUse.startswith("cz"): 201 | translations.cz.translateVmTooNewCZ(self) 202 | 203 | elif languageToUse.startswith("pt"): 204 | translations.pt.translateVmTooNewPT(self) 205 | 206 | elif languageToUse.startswith("it"): 207 | translations.it.translateVmTooNewIT(self) 208 | 209 | else: 210 | translations.en.translateVmTooNewEN(self) 211 | 212 | except: 213 | print("Translation can't be figured out. Using English language.") 214 | translations.en.translateVmTooNewEN(self) -------------------------------------------------------------------------------- /dialogExecution/win2kDepreciation.py: -------------------------------------------------------------------------------- 1 | from uiScripts.ui_Win2KCheckboxDepreciated import Ui_Dialog 2 | from PySide6.QtWidgets import * 3 | from PySide6 import QtGui 4 | import platform 5 | 6 | if platform.system() == "Windows": 7 | import platformSpecific.windowsSpecific 8 | 9 | else: 10 | import platformSpecific.unixSpecific 11 | 12 | class Win2KDepreciated(QDialog, Ui_Dialog): 13 | def __init__(self, parent = None): 14 | try: 15 | super().__init__(parent) 16 | 17 | except: 18 | super().__init__() 19 | 20 | self.setupUi(self) 21 | self.vmSpecs = self.readTempVmFile() 22 | self.setWindowTitle(f"EmuGUI - {self.vmSpecs[0]} uses a depreciated feature") 23 | 24 | try: 25 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 26 | 27 | except: 28 | pass 29 | 30 | self.connectSignalsSlots() 31 | 32 | def connectSignalsSlots(self): 33 | self.pushButton.clicked.connect(self.close) 34 | 35 | def readTempVmFile(self): 36 | # Searching temporary files 37 | if platform.system() == "Windows": 38 | tempVmDef = platformSpecific.windowsSpecific.windowsTempVmStarterFile() 39 | 40 | else: 41 | tempVmDef = platformSpecific.unixSpecific.unixTempVmStarterFile() 42 | 43 | vmSpecs = [] 44 | 45 | with open(tempVmDef, "r+") as tempVmDefFile: 46 | vmSpecsRaw = tempVmDefFile.readlines() 47 | 48 | for vmSpec in vmSpecsRaw: 49 | vmSpecNew = vmSpec.replace("\n", "") 50 | vmSpecs.append(vmSpecNew) 51 | 52 | return vmSpecs -------------------------------------------------------------------------------- /dialogExecution/win81NearEOS.py: -------------------------------------------------------------------------------- 1 | from uiScripts.ui_Win81SupportNearsEnd import Ui_Dialog 2 | from PySide6.QtWidgets import * 3 | from PySide6 import QtGui 4 | 5 | class Win812012R2NearEOS(QDialog, Ui_Dialog): 6 | def __init__(self, parent = None): 7 | super().__init__(parent) 8 | self.setupUi(self) 9 | self.setWindowTitle("EmuGUI - OS Support") 10 | 11 | try: 12 | self.setWindowIcon(QtGui.QIcon("EmuGUI.png")) 13 | 14 | except: 15 | pass 16 | 17 | self.connectSignalsSlots() 18 | 19 | def connectSignalsSlots(self): 20 | self.pushButton.clicked.connect(self.close) -------------------------------------------------------------------------------- /doc/CONTRIBUTION_GUIDE.md: -------------------------------------------------------------------------------- 1 | # Guide to contributing to EmuGUI 2 | 3 | There are a few ways to contribute to EmuGUI. Here we will discuss them more precisely. 4 | 5 | ## General information 6 | 7 | While stable releases are maintained on both GitHub and Codeberg, the development builds are maintained on a seperate repository on Codeberg only. See README.md for the mirrors. Generally, bugfixes, security fixes and corrections of existing translations can be considered something for both releases while new features, translations etc. are for pre-release builds. I also recommend you to state your changes in CHANGELOG.md, however, if you forgot it, I may be clever enough to do it for you. Also, you will be listed in CONTRIBUTORS.md if you commited at least one time. 8 | 9 | ## Programming 10 | 11 | EmuGUI is written in Python, although some SQL scripts are embedded into the Python scripts in order to save your settings and virtual machines. Of course, this all needs attention. 12 | 13 | ### Dependencies 14 | 15 | - Python 3 16 | - Qt 6 17 | - PySide6 18 | - QEMU 19 | - requests 20 | - Python Magic 21 | 22 | ### Coding style 23 | 24 | Well, I don't like specifying a specific coding style. Just make sure it can be easily checked if it's dangerous or not. 25 | 26 | ### Converting Qt files into Python scripts 27 | 28 | Qt Designer: Edit > Show Python code > Save to uiScripts/ui_(ui_file_here).py 29 | 30 | Qt Creator: `pyside6-uic ui/(ui_file_here).ui -o uiScripts/ui_(ui_file_here).py` 31 | 32 | ## Translation 33 | 34 | If you are able to speak English and another language, you should be able to translate EmuGUI to your language. 35 | 36 | ### What I care about 37 | 38 | - You don't have to speak this language natively, so if you can speak more than that and all of them are not available yet, don't fear to stay away because of it. 39 | - If unsure, you may look into a dictionary to look up specific words. 40 | - Translation solutions (like Google Translate) may only be used to check the grammar. 41 | - Translations must be in their specific alphabet (e.g. Latin alphabet for English, German, French etc., Cyrillic for Russian, Ukrainian, ...). 42 | - Special stuff (like EmuGUI, QEMU or i386) stay in the Latin alphabet. 43 | - If you can't translate it at all, leave it in English. 44 | 45 | If you follow these rules (which are quite nice in my opinion), your translation will get approved. 46 | 47 | ### Languages and their current state 48 | 49 | #### Available languages 50 | 51 | | Language | Completeness | 52 | | -------- | ------------ | 53 | | English | Default language for EmuGUI | 54 | | German | Translated everything what is possible | 55 | | Ukrainian | Only single words have been translated | 56 | 57 | There are still a lot of languages that are not available in EmuGUI. If you feel like you can at least start to translate EmuGUI to your desired language, copy the English translation, rename that copy to the short form of your desired language and start translating. 58 | 59 | ## Adding stuff to the EmuGUI wiki 60 | 61 | For EmuGUI, a wiki is hosted on a stable repository on Codeberg: https://codeberg.org/lucien-rowan/EmuGUI/wiki 62 | 63 | Basically, if you know how to write Markdown, you know how to contribute to these wikis. 64 | 65 | ### Ways to contribute to the wiki 66 | 67 | Not everyone can do everything for the wiki but you don't have to be able to do everything for the wiki! Here are the things how you can contribute. 68 | 69 | #### Making new articles 70 | 71 | Managed to install an operating system which is not mentioned in the EmuGUI wiki? Go ahead, write a tutorial about this! I'm pretty sure there are some users who struggle to install it. 72 | 73 | However, there are some rules: 74 | - New articles must be written in English - they can be translated into other languages afterwards. 75 | - Pictures of the operating system are recommended, but not required as you will have to host them on an external site or repository. 76 | - Due to copyright, not every download link is allowed. General rule: Linux/BSD/FOSS distributions and (probably) free-to-distribute BIOSes are allowed while paid software is not. 77 | 78 | #### Updating existing articles 79 | 80 | Some articles are outdated or not correct? Updating these will help users to install their desired operating system. The rules from above apply. 81 | 82 | #### Translating existing articles 83 | 84 | The article is not available in your language or not fully translated yet? I've got an idea: Make or complete the translation! The translation rules from above apply. -------------------------------------------------------------------------------- /doc/OLD_FEATURES.md: -------------------------------------------------------------------------------- 1 | # Old features of EmuGUI 2 | 3 | As features come, they also have to go! That's for every program. EmuGUI heavily relies on QEMU and therefore, has to fit the emulator. Here you can see what is depreciated/removed and EmuGUI's depreciation policy. 4 | 5 | ## Features of EmuGUI 6 | 7 | ### Depreciation policy of features 8 | 9 | EmuGUI's depreciation policy for built-in features is as follows: When one feature gets depreciated, e.g. because a better solution has been made or it simply doesn't do its job anymore, it will be removed after ten (until 1.2) or five (starting 2.0) other feature levels. The first feature level (the second/minor number of EmuGUI's version string) to depreciate a feature doesn't count, for example, if version 0.4 depreciates the USB Tablet checkbox, the counting begins at 0.5 (0.5 = 1; 0.6 = 2; ... 0.14 = 10) and it would not be removed until 0.15.x. That way, you hopefully have got enough time to migrate your VMs before it's completely removed (although you could even change it when it's removed already, I guess). 10 | 11 | ### Features to be removed 12 | 13 | | Feature | State | Depreciated/Removed since | Minimum number of feature levels left | Reason for depreciation | 14 | | ------- | ----- | ------------------------- | ------------------------------------- | ----------------------- | 15 | | USB Tablet checkbox | Depreciated | 0.4 | 1 | A combobox with more possibilities has been created | 16 | | Windows 2000 checkbox | Depreciated | 0.6.5 | 3 | Rather prevents you from installing the OS in question than helping you | 17 | | doc/TESTED.md compatibility list | Depreciated | 0.7.2.5108 | 6 | It's not very productive to use two versions of the same file. Please visit the EmuGUI wiki on the stable repository on GitHub instead. | 18 | | Icelake-Client x86 CPU | Depreciated | 0.7.6.5112 | 6 | This CPU has been removed from QEMU 7.1 already, although EmuGUI is going to keep it for compatibility reasons (for now). Please change the CPU as soon as possible. | 19 | | HAXM accelerator | Depreciated | 2.0.0.5601_dev | 5 | After Intel discontinued the HAXM project, it also got removed from QEMU 8.2. For now, it will stay for compatibility, however, it's also for security reasons that you should switch to WHPX if possible. | 20 | 21 | ## Supported host operating systems 22 | 23 | ### Host depreciation policy 24 | 25 | This is only for orientation and may not apply because of technical problems. Generally, an operating system is supported until its End of Life or until one of EmuGUI's dependencies is no longer going to run on there. Also, this does NOT apply as soon as EmuGUI's development is stopped completely. -------------------------------------------------------------------------------- /doc/TESTED.md: -------------------------------------------------------------------------------- 1 | # Compatible guests list 2 | 3 | ## THIS DOCUMENT IS DEPRECIATED 4 | 5 | This list has been depreciated and will no longer be updated. Please go to https://codeberg.org/lucien-rowan/EmuGUI/wiki/Compatibility-list instead. 6 | 7 | Such a program needs tests in its lifetime. That's why I make this compatibility list. Feel free to grab your old installation disc and test it out. 8 | 9 | ## Microsoft operating systems 10 | 11 | | Operating system | Architecture | Working | Notes | 12 | | ------------------------------------------ | ------------ | --------- | ------------------------------------------------------------------------------ | 13 | | Windows 95 C | i386 | Yes | | 14 | | Windows NT 4.0 Workstation Service Pack 1 | MIPS64el | Yes | Needs external BIOS | 15 | | Windows NT 4.0 Workstation Service Pack 1 | i386 | Yes | Use only 256 colours and 800x600 pixels or else there are mouse problems | 16 | | Windows NT 4.0 Workstation Service Pack 6a | i386 | Yes | Use only 256 colours and 800x600 pixels or else there are mouse problems | 17 | | Windows 98 Second Edition | i386 | Partially | Prepare to boot Safe Mode with VBox; don't add sound card to installed systems | 18 | | Windows 2000 Professional Service Pack 4 | i386 | Yes | The Windows 2000 checkbox may NOT be checked. | 19 | | Windows Millenium Edition | i386 | Yes | If the bootscreen hangs, just close the VM and reopen it again | 20 | | Windows XP Home Edition Service Pack 3 | i386 | Yes | | 21 | | Windows Server 2003 R2 Standard SP2 | i386 | Yes | | 22 | | Windows Vista Ultimate Service Pack 2 | i386 | Yes | Aero not available despite drivers being available | 23 | | Windows 7 Ultimate Service Pack 1 | x86_64 | Yes | No VGA drivers, no Aero | 24 | | Windows 8.1 | x86_64 | No | This Windows version will corrupt the VHD upon first boot | 25 | 26 | ## Mac operating systems 27 | 28 | | Operating system | Architecture | Working | Notes | 29 | | ----------------------------------------- | ------------ | --------- | ------------------------------------------------------------------------------ | 30 | | Mac OS X 10.5.6 Snow Leopard | PowerPC | No | If someone knows how to deal with this, please let me know. | 31 | 32 | ## Linux operating systems 33 | 34 | ### Ubuntu-based distributions 35 | 36 | | Operating system | Architecture | Working | Notes | 37 | | ----------------------------------------- | ------------ | --------- | -------------------------------------------------------------------------------- | 38 | | Ubuntu Desktop 12.04 LTS | PowerPC | Partially | Severe mouse issues, never ever use any GUI on this distribution at anytime | 39 | 40 | ### SUSE-based distributions 41 | 42 | | Operating system | Architecture | Working | Notes | 43 | | ----------------------------------------- | ------------ | --------- | -------------------------------------------------------------------------------- | 44 | | openSUSE Leap 15.4 | Aarch64 | No | Installation is impossible | 45 | | openSUSE Tumbleweed | Aarch64 | Partially | For networking, please take the preinstalled Xfce image. There are mouse issues. | 46 | -------------------------------------------------------------------------------- /doc/THEME_CREATION.md: -------------------------------------------------------------------------------- 1 | # How to create custom EmuGUI themes 2 | 3 | POV: You find your system theme is getting boring and there is no other theme that you like. 4 | 5 | That might be a reason why you want to create a new EmuGUI theme. That is possible with QSS files. 6 | 7 | ## What is QSS? 8 | 9 | QSS (probably) stands for Qt Stylesheet and basically is a CSS (Cascade Stylesheet) dialect for Qt applications. With that, you can create themes for several Qt applications that support custom themes, including EmuGUI. 10 | 11 | ## What do I need to get started? 12 | 13 | It's simple, you just need an idea and a text editor which can handle QSS files. The default editor should do but I recommend to install a text editor which supports syntax highlighting (like Notepad++ or Visual Studio Code), especially on Windows. Linux users may have syntax highlighting with their text editor, but if not, I recommend to install VS Code here as well. 14 | 15 | ## I'm ready! How does it work? 16 | 17 | EmuGUI uses the following widgets which can be customized: 18 | - QWidget 19 | - QMainWindow 20 | - QTabBar::tab 21 | - QListView 22 | - QPushButton 23 | - QLabel 24 | - QComboBox 25 | - QCheckBox 26 | - QLineEdit 27 | - etc. 28 | 29 | To see how the syntax works, you can look into the example themes EmuGUI comes with. I'm aware that it's not the full potential of it, but at least you can see how it works in the first place. 30 | 31 | ## EmuGUI doesn't recognize my themes! 32 | 33 | Did you put it into the themes folder of EmuGUI? If not, please do that. 34 | 35 | Also, you must set the theme on "Settings/General" manually. -------------------------------------------------------------------------------- /emugui_prep_linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir $HOME/EmuGUIVenv 4 | python3 -m venv $HOME/EmuGUIVenv/emugui_venv 5 | source $HOME/EmuGUIVenv/emugui_venv/bin/activate 6 | $HOME/EmuGUIVenv/emugui_venv/bin/python -m pip install --upgrade pip PySide6 python-magic requests python-dateutil psutil 7 | echo You can now run EmuGUI with "emugui_run_linux.sh" -------------------------------------------------------------------------------- /emugui_run_linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source $HOME/EmuGUIVenv/emugui_venv/bin/activate 4 | $HOME/EmuGUIVenv/emugui_venv/bin/python -m pip install --upgrade pip PySide6 python-magic requests python-dateutil psutil 5 | $HOME/EmuGUIVenv/emugui_venv/bin/python ./emugui.py -------------------------------------------------------------------------------- /errors/errCodes.py: -------------------------------------------------------------------------------- 1 | errCodes = [ 2 | "C-00-LOVJL", "C-03-DR8ZW", "C-03-Q4H5C", "C-07-E2OJO", "C-06-2FZIM", # 0, 1, 2, 3, 4 3 | "C-07-39KHE", "C-07-DKVQY", "C-04-HSOW0", "E-00-QG3A3", "E-02-MA7TN", # 5, 6, 7, 8, 9 4 | "E-01-E5NAK", "W-08-LXG6H", "E-03-7OK38", "E-04-ZX924", "E-05-V3HRV", # 10, 11, 12, 13, 14 5 | "E-05-6KMIV", "E-06-H83GV", "E-05-ZIRBU", "E-05-EXIUG", "W-02-HV8FV", # 15, 16, 17, 18, 19 6 | "W-02-B2DV5", "W-02-IA8K0", "W-02-33J9X", "W-02-NIHI6", "W-02-I16GC", # 20, 21, 22, 23, 24 7 | "W-02-R92D2", "W-02-1FPOS", "W-04-XMKJT", "W-09-LQNBZ", "W-09-FQMAL", # 25, 26, 27, 28, 29 8 | "N-02-HF2JU", "N-07-NQTUB", "E-02-MXDUW", "E-02-6DN5P", "E-02-YD86J", # 30, 31, 32, 33, 34 9 | "E-02-HCINV", "E-02-G6YDW", "W-06-NPGOP", "G-10-SIYNK", "N-10-CKDQC", # 35, 36, 37, 38, 39 10 | "G-07-FI8W5", "G-10-YOHYF", "G-10-2CNMV", "N-10-64SJ5", "G-10-8NHE8", # 40, 41, 42, 43, 44 11 | "N-10-Z4PFZ", "N-07-QULXB", "E-02-VU8M1", "G-00-KCY90", "G-08-PXADA", # 45, 46, 47, 48, 49 12 | "W-08-RQA9R", "W-08-Q2YOU", "G-08-BDWA7", "E-02-8AAWW", "W-08-SV0B8", # 50, 51, 52, 53, 54 13 | "N-11-6RRJN", "W-12-JBJM9", "W-12-6JNMB", "W-12-F984Q" # 55, 56, 57, 58 14 | ] -------------------------------------------------------------------------------- /errors/logID.py: -------------------------------------------------------------------------------- 1 | logID = "" -------------------------------------------------------------------------------- /errors/logman.py: -------------------------------------------------------------------------------- 1 | import random 2 | import platform 3 | import datetime 4 | import errors.logID 5 | 6 | if platform.system() == "Windows": 7 | import platformSpecific.windowsSpecific 8 | 9 | else: 10 | import platformSpecific.unixSpecific 11 | 12 | class LogMan: 13 | def __init__(self): 14 | self.logFile = "" 15 | 16 | def generateLogID(self): 17 | possible_chars = "0123456789abcdefghijklmnopqrstuvwxyz" 18 | logID = "" 19 | 20 | for k in range(0, 32): 21 | logID = logID + possible_chars[random.randint(0, len(possible_chars) - 1)] 22 | 23 | errors.logID.logID = logID 24 | 25 | def setLogFile(self): 26 | if platform.system() == "Windows": 27 | logFile = platformSpecific.windowsSpecific.windowsLogFile(errors.logID.logID) 28 | 29 | else: 30 | logFile = platformSpecific.unixSpecific.unixLogFile(errors.logID.logID) 31 | 32 | return logFile 33 | 34 | def writeToLogFile(self, text): 35 | try: 36 | with open(self.logFile, "a+") as logger: 37 | logger.write( 38 | datetime.datetime.now().strftime("%Y-%m-%d, %H:%M:%S") + " " + text + "\n") 39 | 40 | except: 41 | if platform.system() == "Windows": 42 | platformSpecific.windowsSpecific.windowsCreEmuGUIFolder() 43 | 44 | else: 45 | platformSpecific.unixSpecific.unixCreEmuGUIFolder() -------------------------------------------------------------------------------- /platformSpecific/unixSpecific.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pwd 3 | import sqlite3 4 | 5 | def setupUnixBackend(): 6 | try: 7 | userName = os.getlogin() 8 | 9 | except: 10 | userName = pwd.getpwuid(os.getuid())[0] 11 | 12 | connection = None 13 | 14 | try: 15 | if userName == "root": 16 | connection = sqlite3.connect(f"/{userName}/EmuGUI/virtual_machines.sqlite") 17 | 18 | else: 19 | connection = sqlite3.connect(f"/home/{userName}/EmuGUI/virtual_machines.sqlite") 20 | 21 | print("Connection established.") 22 | 23 | except sqlite3.Error as e: 24 | print(f"The SQLite module encountered an error: {e}. Trying to create the file.") 25 | 26 | try: 27 | unixCreEmuGUIFolder() 28 | 29 | if userName == "root": 30 | file = open(f"/{userName}/EmuGUI/virtual_machines.sqlite", "w+") 31 | file.close() 32 | 33 | else: 34 | file = open(f"/home/{userName}/EmuGUI/virtual_machines.sqlite", "w+") 35 | file.close() 36 | 37 | except: 38 | print("EmuGUI wasn't able to create the file.") 39 | 40 | try: 41 | if userName == "root": 42 | connection = sqlite3.connect(f"/{userName}/EmuGUI/virtual_machines.sqlite") 43 | 44 | else: 45 | connection = sqlite3.connect(f"/home/{userName}/EmuGUI/virtual_machines.sqlite") 46 | 47 | except sqlite3.Error as e: 48 | print(f"The SQLite module encountered an error: {e}.") 49 | 50 | return connection 51 | 52 | def unixTempVmStarterFile(): 53 | try: 54 | userName = os.getlogin() 55 | 56 | except: 57 | userName = pwd.getpwuid(os.getuid())[0] 58 | 59 | if userName == "root": 60 | fileName = f"/{userName}/EmuGUI/vmstart.txt" 61 | 62 | else: 63 | fileName = f"/home/{userName}/EmuGUI/vmstart.txt" 64 | 65 | return fileName 66 | 67 | def unixLanguageFile(): 68 | try: 69 | userName = os.getlogin() 70 | 71 | except: 72 | userName = pwd.getpwuid(os.getuid())[0] 73 | 74 | if userName == "root": 75 | fileName = f"/{userName}/EmuGUI/lang.txt" 76 | 77 | else: 78 | fileName = f"/home/{userName}/EmuGUI/lang.txt" 79 | 80 | return fileName 81 | 82 | def unixUpdateFile(): 83 | try: 84 | userName = os.getlogin() 85 | 86 | except: 87 | userName = pwd.getpwuid(os.getuid())[0] 88 | 89 | if userName == "root": 90 | fileName = f"/{userName}/EmuGUI/update.txt" 91 | 92 | else: 93 | fileName = f"/home/{userName}/EmuGUI/update.txt" 94 | 95 | return fileName 96 | 97 | def unixExportFile(): 98 | try: 99 | userName = os.getlogin() 100 | 101 | except: 102 | userName = pwd.getpwuid(os.getuid())[0] 103 | 104 | if userName == "root": 105 | fileName = f"/{userName}/EmuGUI/vmdef.txt" 106 | 107 | else: 108 | fileName = f"/home/{userName}/EmuGUI/vmdef.txt" 109 | 110 | return fileName 111 | 112 | def unixErrorFile(): 113 | try: 114 | userName = os.getlogin() 115 | 116 | except: 117 | userName = pwd.getpwuid(os.getuid())[0] 118 | 119 | if userName == "root": 120 | fileName = f"/{userName}/EmuGUI/error.txt" 121 | 122 | else: 123 | fileName = f"/home/{userName}/EmuGUI/error.txt" 124 | 125 | return fileName 126 | 127 | def unixLogFile(logID): 128 | try: 129 | userName = os.getlogin() 130 | 131 | except: 132 | userName = pwd.getpwuid(os.getuid())[0] 133 | 134 | if userName == "root": 135 | fileName = f"/{userName}/EmuGUI/log-{logID}.txt" 136 | 137 | else: 138 | fileName = f"/home/{userName}/EmuGUI/log-{logID}.txt" 139 | 140 | return fileName 141 | 142 | def unixCreEmuGUIFolder(): 143 | try: 144 | userName = os.getlogin() 145 | 146 | except: 147 | userName = pwd.getpwuid(os.getuid())[0] 148 | 149 | if userName == "root": 150 | os.mkdir(f"/root/EmuGUI") 151 | 152 | else: 153 | os.mkdir(f"/home/{userName}/EmuGUI") -------------------------------------------------------------------------------- /platformSpecific/windowsSpecific.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sqlite3 3 | 4 | def setupWindowsBackend(): 5 | userName = os.getlogin() 6 | connection = None 7 | 8 | try: 9 | connection = sqlite3.connect(f"C:\\Users\\{userName}\\Documents\\EmuGUI\\virtual_machines.sqlite") 10 | print("Connection established.") 11 | 12 | except sqlite3.Error as e: 13 | print(f"The SQLite module encountered an error: {e}. Trying to create the file.") 14 | 15 | try: 16 | windowsCreEmuGUIFolder() 17 | file = open(f"C:\\Users\\{userName}\\Documents\\EmuGUI\\virtual_machines.sqlite", "w+") 18 | file.close() 19 | 20 | except: 21 | print("EmuGUI wasn't able to create the file.") 22 | 23 | try: 24 | connection = sqlite3.connect(f"C:\\Users\\{userName}\\Documents\\EmuGUI\\virtual_machines.sqlite") 25 | print("Connection established.") 26 | 27 | except sqlite3.Error as e: 28 | print(f"The SQLite module encountered an error: {e}.") 29 | 30 | return connection 31 | 32 | def windowsTempVmStarterFile(): 33 | userName = os.getlogin() 34 | fileName = f"C:\\Users\\{userName}\\Documents\\EmuGUI\\vmstart.txt" 35 | return fileName 36 | 37 | def windowsLanguageFile(): 38 | userName = os.getlogin() 39 | fileName = f"C:\\Users\\{userName}\\Documents\\EmuGUI\\lang.txt" 40 | return fileName 41 | 42 | def windowsUpdateFile(): 43 | userName = os.getlogin() 44 | fileName = f"C:\\Users\\{userName}\\Documents\\EmuGUI\\update.txt" 45 | return fileName 46 | 47 | def windowsExportFile(): 48 | userName = os.getlogin() 49 | fileName = f"C:\\Users\\{userName}\\Documents\\EmuGUI\\vmdef.txt" 50 | return fileName 51 | 52 | def windowsErrorFile(): 53 | userName = os.getlogin() 54 | 55 | fileName = f"C:\\Users\\{userName}\\Documents\\EmuGUI\\error.txt" 56 | 57 | return fileName 58 | 59 | def windowsLogFile(logID): 60 | userName = os.getlogin() 61 | 62 | fileName = f"C:\\Users\\{userName}\\Documents\\EmuGUI\\log-{logID}.txt" 63 | 64 | return fileName 65 | 66 | def windowsCreEmuGUIFolder(): 67 | userName = os.getlogin() 68 | os.mkdir(f"C:\\Users\\{userName}\\Documents\\EmuGUI") -------------------------------------------------------------------------------- /plugins/hw_additions/aarch64_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "aarch64_cpus": [ 3 | "base", "max", "host", "arm1026", "arm1136", "arm1136-r2", "arm1176", "arm11mpcore", "arm926", "arm946", "cortex-a15", "cortex-a7", "cortex-a8", 4 | "cortex-a9", "cortex-m0", "cortex-m3", "cortex-m33", "cortex-m4", "cortex-m55", "cortex-m7", "cortex-r5", "cortex-r52", "cortex-r5f", "pxa250", 5 | "pxa255", "pxa260", "pxa261", "pxa262", "pxa270-a0", "pxa270-a1", "pxa270", "pxa270-b0", "pxa270-b1", "pxa270-c0", "pxa270-c5", "sa1100", "sa1110", 6 | "ti925t", "a64fx", "cortex-a35", "cortex-a53", "cortex-a55", "cortex-a57", "cortex-a710", "cortex-a72", "cortex-a76", "neoverse-n1", "neoverse-n2", 7 | "neoverse-v1" 8 | ], 9 | "aarch64_machines": [ 10 | "none", "akita", "ast1030-evb", "ast2500-evb", "ast2600-evb", "bletchley-bmc", "borzoi", "bpim2u", "canon-a1100", "cheetah", "collie", "connex", 11 | "cubieboard", "emcraft-sf2", "fby35-bmc", "fby35", "fp5280g2-bmc", "fuji-bmc", "g220a-bmc", "highbank", "imx25-pdk", "integratorcp", "kudo-bmc", 12 | "kzm", "lm3s6965cvb", "lm3s811evb", "mainstone", "mcimx6ul-evk", "mcimx7d-sabre", "microbit", "midway", "mori-bmc", "mps2-an385", "mps2-an386", 13 | "mps-an500", "mps-an505", "mps-an511", "mps-an521", "mps-an524", "mps-an547", "musca-a", "musca-b1", "musicpal", "n800", "n810", "netduino2", 14 | "netduinoplus2", "npcm750-evb", "nuri", "olimex-stm32-h405", "orangepi-pc", "palmetto-bmc", "qcom-dc-scm-v1-bmc", "qcom-firework-bmc", 15 | "quanta-gbs-bmc", "quanta-gsj", "quanta-q71l-bmc", "rainier-bmc", "raspi0", "raspi1ap", "raspi2b", "realview-eb", "realview-eb-mpcore", 16 | "realview-pb-a8", "realview-pbx-a9", "romulus-bmc", "sabrelite", "smdkc210", "sonorapass-bmc", "spitz", "stm32vldiscovery", "supermicro-x11spi-bmc", 17 | "sx1", "sx1-v1", "tacoma-bmc", "terrier", "tiogapass-bmc", "tosa", "verdex", "versatileab", "versatilepb", "vexpress-a15", "vexpress-a9", "virt", 18 | "witherspoon-bmc", "xilinx-zynq-a9", "yosemitev2-bmc", "z2", "raspi3b", "raspi3ap" 19 | ] 20 | } -------------------------------------------------------------------------------- /plugins/hw_additions/alpha_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "alpha_cpus": [ 3 | "base", "max", "host", "ev4-alpha-cpu", "ev5-alpha-cpu", "ev56-alpha-cpu", "ev6-alpha-cpu", "ev67-alpha-cpu", "ev68-alpha-cpu", "pca56-alpha-cpu" 4 | ], 5 | "alpha_machines": [ 6 | "none", "clipper" 7 | ] 8 | } -------------------------------------------------------------------------------- /plugins/hw_additions/arm_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "arm_cpus": [ 3 | "base", "max", "host", "arm1026", "arm1136", "arm1136-r2", "arm1176", "arm11mpcore", "arm926", "arm946", "cortex-a15", "cortex-a7", "cortex-a8", 4 | "cortex-a9", "cortex-m0", "cortex-m3", "cortex-m33", "cortex-m4", "cortex-m55", "cortex-m7", "cortex-r5", "cortex-r52", "cortex-r5f", "pxa250", 5 | "pxa255", "pxa260", "pxa261", "pxa262", "pxa270-a0", "pxa270-a1", "pxa270", "pxa270-b0", "pxa270-b1", "pxa270-c0", "pxa270-c5", "sa1100", "sa1110", 6 | "ti925t" 7 | ], 8 | "arm_machines": [ 9 | "none", "akita", "ast1030-evb", "ast2500-evb", "ast2600-evb", "bletchley-bmc", "borzoi", "bpim2u", "canon-a1100", "cheetah", "collie", "connex", 10 | "cubieboard", "emcraft-sf2", "fby35-bmc", "fby35", "fp5280g2-bmc", "fuji-bmc", "g220a-bmc", "highbank", "imx25-pdk", "integratorcp", "kudo-bmc", 11 | "kzm", "lm3s6965cvb", "lm3s811evb", "mainstone", "mcimx6ul-evk", "mcimx7d-sabre", "microbit", "midway", "mori-bmc", "mps2-an385", "mps2-an386", 12 | "mps-an500", "mps-an505", "mps-an511", "mps-an521", "mps-an524", "mps-an547", "musca-a", "musca-b1", "musicpal", "n800", "n810", "netduino2", 13 | "netduinoplus2", "npcm750-evb", "nuri", "olimex-stm32-h405", "orangepi-pc", "palmetto-bmc", "qcom-dc-scm-v1-bmc", "qcom-firework-bmc", 14 | "quanta-gbs-bmc", "quanta-gsj", "quanta-q71l-bmc", "rainier-bmc", "raspi0", "raspi1ap", "raspi2b", "realview-eb", "realview-eb-mpcore", 15 | "realview-pb-a8", "realview-pbx-a9", "romulus-bmc", "sabrelite", "smdkc210", "sonorapass-bmc", "spitz", "stm32vldiscovery", "supermicro-x11spi-bmc", 16 | "sx1", "sx1-v1", "tacoma-bmc", "terrier", "tiogapass-bmc", "tosa", "verdex", "versatileab", "versatilepb", "vexpress-a15", "vexpress-a9", "virt", 17 | "witherspoon-bmc", "xilinx-zynq-a9", "yosemitev2-bmc", "z2" 18 | ] 19 | } -------------------------------------------------------------------------------- /plugins/hw_additions/generic_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "usb_controllers": [ 3 | "ich9-usb-echi1", "ich9-usb-echi2", "ich9-usb-echi3", "ich9-usb-echi4", "ich9-usb-echi5", "ich9-usb-echi6", "nec-usb-xhci", "pci-ohci", 4 | "piix3-usb-uchi", "piix4-usb-uhci", "qemu-xhci", "usb-ehci", "nec-usb-ehci" 5 | ], 6 | "networking": [ 7 | "e1000", "e1000-82544gc", "e1000-82545em", "e1000e", "i82550", "i82551", "i82557a", "i82557b", "i82557c", "i82558a", "i82558b", "i82559a", "i82559b", 8 | "i82559c", "i82559er", "i82562", "i82801", "igb", "ne2k_isa", "ne2k_pci", "pcnet", "rocker", "rtl8139", "tulip", "usb-net", "virtio-net-device", 9 | "virtio-net-pci", "virtio-net-pci-non-transitional", "virtio-net-pci-transitional", "vmxnet3", "spapr-vlan", "sungem", "sunhme" 10 | ], 11 | "graphics": [ 12 | "ati-vga", "bochs-display", "cirrus-vga", "isa-cirrus-vga", "qxl", "qxl-vga", "ramfb", "secondary-vga", "virtio-gpu-device", "std", 13 | "virtio-gpu-gl-device", "virtio-gpu-gl-pci", "virtio-gpu-pci", "virtio-vga", "virtio-vga-gl", "vmware-svga", "sm501", "tcx", "cg3", "cirrus" 14 | ], 15 | "sound": [ 16 | "AC97", "adlib", "cs4231a", "ES1370", "gus", "hda-duplex", "hda-micro", "hda-output", "ich9-intel-hda", "intel-hda", "sb16", "usb-audio", 17 | "virtio-sound-device", "virtio-sound-pci" 18 | ] 19 | } -------------------------------------------------------------------------------- /plugins/hw_additions/mips64_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "mips64_cpus": [ 3 | "base", "max", "host", "4Kc", "4Km", "4KEcR1", "4KEc", "4KEm", "24Kc", "24KEc", "24Kf", "34Kf", "74Kf", "XBurstR2", "M14K", "M14Kc", "P5600", 4 | "mips32r6-generic", "I7200", "XBurstR1", "4KEmR1", "R4000", "VR5432", "5Kc", "5Kf", "20Kc", "MIPS64R2-generic", "5KEc", "5KEf", "I6400", "I6500", 5 | "Loongson-2E", "Loongson-2F", "Loongson-3A1000", "Loongson-3A4000", "mips64dspr2", "Octeon68XX" 6 | ], 7 | "mips64_machines": [ 8 | "none", "malta", "mipssim", "magnum", "pica61" 9 | ] 10 | } -------------------------------------------------------------------------------- /plugins/hw_additions/mips64el_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "mips64el_cpus": [ 3 | "base", "max", "host", "4Kc", "4Km", "4KEcR1", "4KEc", "4KEm", "24Kc", "24KEc", "24Kf", "34Kf", "74Kf", "XBurstR2", "M14K", "M14Kc", "P5600", 4 | "mips32r6-generic", "I7200", "XBurstR1", "4KEmR1", "R4000", "VR5432", "5Kc", "5Kf", "20Kc", "MIPS64R2-generic", "5KEc", "5KEf", "I6400", "I6500", 5 | "Loongson-2E", "Loongson-2F", "Loongson-3A1000", "Loongson-3A4000", "mips64dspr2", "Octeon68XX" 6 | ], 7 | "mips64el_machines": [ 8 | "none", "malta", "mipssim", "magnum", "pica61", "boston", "fuloong2e", "loongson3-virt" 9 | ] 10 | } -------------------------------------------------------------------------------- /plugins/hw_additions/mips_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "mips_cpus": [ 3 | "base", "max", "host", "4Kc", "4Km", "4KEcR1", "4KEc", "4KEm", "24Kc", "24KEc", "24Kf", "34Kf", "74Kf", "XBurstR2", "M14K", "M14Kc", "P5600", 4 | "mips32r6-generic", "I7200", "XBurstR1" 5 | ], 6 | "mips_machines": [ 7 | "none", "malta", "mipssim" 8 | ] 9 | } -------------------------------------------------------------------------------- /plugins/hw_additions/mipsel_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "mipsel_cpus": [ 3 | "base", "max", "host", "4Kc", "4Km", "4KEcR1", "4KEc", "4KEm", "24Kc", "24KEc", "24Kf", "34Kf", "74Kf", "XBurstR2", "M14K", "M14Kc", "P5600", 4 | "mips32r6-generic", "I7200", "XBurstR1", "4KEmR1" 5 | ], 6 | "mipsel_machines": [ 7 | "none", "malta", "mipssim" 8 | ] 9 | } -------------------------------------------------------------------------------- /plugins/hw_additions/ppc_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "ppc_cpus": [ 3 | "603", "604", "603e", "base", "max", "host", "603p", "603e7v", "603e7", "603e7v2", "603e7v1", "603e7t", "740", "740e", "750", "750e", "750cx", "745", 4 | "755", "750cxe", "750cxr", "750cl", "750l", "604e", "604r", "7400", "g2", "mpc603", "g2hip3", "e300", "mpc8343ea", "mpc8349e", "mpc8347ep", 5 | "mpc8347p", "mpc8347eap", "mpc8349", "mpc8347et", "mpc8347t", "mpc8343a", "mpc8347eat", "mpc8347ap", "mpc8349ea", "mpc8343e", "mpc8379e", "e300c4", 6 | "mpc8377e", "mpc8377", "mpc8378", "mpc8379", "mpc8378e", "740p", "750p", "460exb", "460ex", "440epx", "405d2", "x2vp4", "x2vp20", "405gpa", "405gpb", 7 | "405cra", "405gpc", "405gpd", "405crb", "405cr", "stb03", "npe4gs3", "npe405h", "npe405h2", "405ez", "npe405l", "stb04", "405", "405lp", "440epa", "440ep", 8 | "405gpr", "405ep", "stb25", "750fx", "750fl", "750gl", "750gx", "440-xilinx-w-dfpu", "440-xilinx", "7450", "vger", "7451", "7441", "7455", "7445", "7447", 9 | "7457", "7457a", "7447a", "mpc8641d", "mpc8610", "e600", "mpc8641", "7448", "7410", "mpc8560", "mpc8555", "mpc8541", "mpc8555e", "mpc 8541e", "mpc8540", 10 | "e500v1", "mpc8540_v10", "mpc8545e", "mpc8547e", "mpc8548", "mpc8545", "mpc8543e", "e500", "mpc8543", "mpc8548e", "mpc8544", "mpc8533e", "mpc8544e", 11 | "mpc8567", "mpc8567e", "mpc8568", "mpc8533", "mpc8572e", "mpc8572", "e500mc", "g2h4", "g2hip4", "g2le", "g2gp", "g2legp", "mpc5200b", "mpc5200", "g2legp1", 12 | "g2legp3", "e200", "g2ls", "g2lels" 13 | ], 14 | "ppc_machines": [ 15 | "none", "40p", "amigaone", "bamboo", "g3beige", "mac99", "mac99,via=pmu", "mac99,via=pmu-adb", "mpc8544ds", "pegasos2", "ppce500", "ref405ep", "sam460ex", 16 | "virtex-ml507", "powernv10", "powernv8", "powernv9", "pseries" 17 | ] 18 | } -------------------------------------------------------------------------------- /plugins/hw_additions/riscv32_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "riscv32_cpus": [ 3 | "base", "max", "host", "any", "lowrisc-ibex", "rv32", "sifive-e31", "sifive-e34", "sifive-u34" 4 | ], 5 | "riscv32_machines": [ 6 | "none", "opentitan", "sifive_e", "sifive_u", "spike", "virt" 7 | ] 8 | } -------------------------------------------------------------------------------- /plugins/hw_additions/riscv64_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "riscv64_cpus": [ 3 | "base", "max", "host", "any", "shakti-c", "rv64", "sifive-e51", "thead-c906", "sifive-u54", "veyron-v1", "x-rv128" 4 | ], 5 | "riscv64_machines": [ 6 | "none", "shakti_c", "sifive_e", "sifive_u", "spike", "virt" 7 | ] 8 | } -------------------------------------------------------------------------------- /plugins/hw_additions/sparc64_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "sparc64_cpus": [ 3 | "base", "max", "host" 4 | ], 5 | "sparc64_machines": [ 6 | "none", "niagara", "sun4u", "sun4v" 7 | ] 8 | } -------------------------------------------------------------------------------- /plugins/hw_additions/sparc_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "sparc_cpus": [ 3 | "base", "max", "host" 4 | ], 5 | "sparc_machines": [ 6 | "none", "LX", "SPARCClassic", "SPARCbook", "SS-10", "SS-20", "SS-4", "SS-5", "SS-600MP", "Voyager", "leon3_generic" 7 | ] 8 | } -------------------------------------------------------------------------------- /plugins/hw_additions/x86_default_additions.json: -------------------------------------------------------------------------------- 1 | { 2 | "x86_cpus": [ 3 | "486", "Broadwell", "Cascadelake-Server", "Conroe", "Copperlake", "Denverton", "Dhyana", "EPYC", "EPYC-Genoa", "EPYC-Milan", "EPYC-Rome", 4 | "GraniteRapids", "Icelake-Server", "IvyBridge", "KnightsMill", "Nehalem", "Opteron-G1", "Opteron-G2", "Opteron-G3", "Opteron-G4", "Opteron-G5", 5 | "Penryn", "SandyBridge", "Skylake-Client", "Skylake-Server", "Snowridge", "Westmere", "athlon", "core2duo", "coreduo", "kvm32", "kvm64", 6 | "n270", "pentium", "pentium2", "pentium3", "phenom", "qemu32", "qemu64", "base", "max", "host" 7 | ], 8 | "x86_machines": [ 9 | "pc", "q35", "isapc", "none" 10 | ] 11 | } -------------------------------------------------------------------------------- /plugins/pluginmgr/hw_reader.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | import services.pathfinder as pf 4 | 5 | def read_hw_plugin(): 6 | exec_folder = pf.retrieveExecFolder() 7 | pluginContent = [] 8 | pluginFiles = [f for f in os.listdir(f"{exec_folder}plugins/hw_additions") if os.path.isfile(os.path.join(f"{exec_folder}plugins/hw_additions", f))] 9 | 10 | for plugin in pluginFiles: 11 | with open(f"{exec_folder}plugins/hw_additions/{plugin}", "r+") as pluginFile: 12 | jsonplugin = json.load(pluginFile) 13 | pluginContent.append(jsonplugin) 14 | 15 | return pluginContent -------------------------------------------------------------------------------- /services/pathfinder.py: -------------------------------------------------------------------------------- 1 | import re 2 | import platform 3 | 4 | def retrieveExecFolder(): 5 | print(__file__) 6 | exec_dir = "" 7 | 8 | if platform.system() == "Windows": 9 | if __file__.endswith(".py"): 10 | exec_dir = re.sub(r"services\\pathfinder.py$", "", __file__) 11 | 12 | elif __file__.endswith(".pyc"): 13 | exec_dir = re.sub(r"_internal\\services\\pathfinder.pyc$", "", __file__) 14 | 15 | """ else: 16 | if __file__.endswith(".py"): 17 | exec_dir = re.sub("services/pathfinder.py$", "", __file__) 18 | 19 | elif __file__.endswith(".pyc"): 20 | exec_dir = re.sub("_internal/services/pathfinder.pyc$", "", __file__) """ 21 | 22 | return exec_dir 23 | 24 | #retrieveExecFolder() -------------------------------------------------------------------------------- /themes/BlueExampleTheme.qss: -------------------------------------------------------------------------------- 1 | QMainWindow { 2 | background-color: #47B5FF; 3 | } 4 | 5 | QTabBar::tab { 6 | background-color: #47B5FF; 7 | border: 1px solid black; 8 | padding: 3px; 9 | } 10 | 11 | QTabBar::tab:selected { 12 | background: #2192FF; 13 | margin-bottom: -1px; 14 | } 15 | 16 | QWidget { 17 | background-color: #47B5FF; 18 | } 19 | 20 | QListView { 21 | background-color: #3B9AE1; 22 | } 23 | 24 | QListView::item:hover { 25 | background-color: #2192FF; 26 | color: black; 27 | } 28 | 29 | QListView::item:selected { 30 | background-color: #083AA9; 31 | color: white; 32 | } 33 | 34 | QPushButton { 35 | background-color: #083AA9; 36 | color: white; 37 | } 38 | 39 | QPushButton::hover { 40 | background-color: #2192FF; 41 | color: black; 42 | } 43 | 44 | QCheckBox::indicator { 45 | background-color: red; 46 | } 47 | 48 | QCheckBox::indicator:checked { 49 | background-color: green; 50 | } -------------------------------------------------------------------------------- /translations/addexistingvhd.txt: -------------------------------------------------------------------------------- 1 | Add an existing virtual hard drive 2 | Existierende virtuelle Festplatte anfügen 3 | Дадаць існуючы віртуальны жорсткі дыск 4 | Добавить существующий виртуальный жесткий диск 5 | Añadir un disco duro virtual existente 6 | Adicionar um disco virtual existente 7 | Přidejte existující virtuální pevný disk 8 | Aggiungi un hard disk virtuale esistente 9 | Dodaj istniejący wirtualny dysk twardy -------------------------------------------------------------------------------- /translations/addnovhd.txt: -------------------------------------------------------------------------------- 1 | Don't add a virtual hard drive 2 | Keine virtuelle Festplatte anfügen 3 | Не дадаваць віртуальны жорсткі дыск 4 | Не добавлять виртуальный жесткий диск 5 | No añadir un disco duro virtual 6 | Não adicionar um Disco Virtual 7 | Nepřidávejte virtuální pevný disk 8 | Non aggiungere un hard disk virtuale 9 | Nie dodawaj wirtualnego dysku twardego -------------------------------------------------------------------------------- /translations/createnewvhd.txt: -------------------------------------------------------------------------------- 1 | Create a new virtual hard drive 2 | Neue virtuelle Festplatte erstellen 3 | Стварыць новы віртуальны жорсткі дыск 4 | Создать новый виртуальный жесткий диск 5 | Crear nuevo disco duro virtual 6 | Crie um novo disco virtual 7 | Vytvořte nový virtuální pevný disk 8 | Crea un nuovo hard disk virtuale 9 | Stwórz nowy wirtualny dysk twardy -------------------------------------------------------------------------------- /translations/letqemudecide.txt: -------------------------------------------------------------------------------- 1 | Let QEMU decide 2 | QEMU überlassen 3 | Няхай QEMU вырашае 4 | Пусть QEMU решает 5 | Dejar que QEMU decida 6 | Deixe o QEMU Decidir 7 | Ať rozhodne QEMU 8 | Lascia che QEMU decida 9 | Daj QEMU zdecydować -------------------------------------------------------------------------------- /translations/systemdefault.txt: -------------------------------------------------------------------------------- 1 | System default 2 | Systemstandard 3 | По умолчанию системы 4 | Па змаўчанні сістэмы 5 | Predeterminado del sistema 6 | Padrão do Sistema 7 | Výchozí nastavení systému 8 | Predefinito di sistema 9 | Systemowe domyślne -------------------------------------------------------------------------------- /translations/systemdefaultset.py: -------------------------------------------------------------------------------- 1 | import services.pathfinder as pf 2 | 3 | def sysDefSet(finalStr, comboBox, comboBoxIndex): 4 | exec_folder = pf.retrieveExecFolder() 5 | with open(f"{exec_folder}translations/systemdefault.txt", "r+", encoding="utf8") as sysDefFile: 6 | sysDefContent = sysDefFile.read() 7 | 8 | if sysDefContent.__contains__(comboBox.itemText(comboBoxIndex)): 9 | comboBox.setItemText(comboBoxIndex, finalStr) -------------------------------------------------------------------------------- /ui/ErrDialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | Dialog 15 | 16 | 17 | 18 | 19 | 10 20 | 10 21 | 381 22 | 281 23 | 24 | 25 | 26 | 27 | 28 | 29 | EmuGUI encountered an error. 30 | 31 | 32 | true 33 | 34 | 35 | 36 | 37 | 38 | 39 | Error Code: 40 | 41 | 42 | 43 | 44 | 45 | 46 | If this error occurs multiple times, contact your administrator and/or ask for help on the EmuGUI Discord Server or on its GitHub repository. 47 | 48 | 49 | true 50 | 51 | 52 | 53 | 54 | 55 | 56 | OK 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /ui/IcelakeClientCPUDepreciated.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | 15 | 400 16 | 300 17 | 18 | 19 | 20 | 21 | 400 22 | 300 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 10 35 | 10 36 | 371 37 | 271 38 | 39 | 40 | 41 | 42 | 43 | 44 | Sorry, but you decided to use the Icelake-Client CPU which has been removed from QEMU 7.1. As a response, it is depreciated on EmuGUI now. If you updated to QEMU 7.1 or later, your VM won't work anymore, so please change the CPU by clicking on "Edit selected virtual machine" with this VM selected. You can try to start this VM anyway, but please don't blame me if it doesn't show up. 45 | 46 | 47 | true 48 | 49 | 50 | 51 | 52 | 53 | 54 | OK 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /ui/NoUpdate.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | Dialog 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 10 23 | 10 24 | 381 25 | 281 26 | 27 | 28 | 29 | 30 | 31 | 32 | OK 33 | 34 | 35 | 36 | 37 | 38 | 39 | You are already running the latest version of EmuGUI. 40 | 41 | 42 | true 43 | 44 | 45 | 46 | 47 | 48 | 49 | ...or don't have an internet connection. 50 | 51 | 52 | true 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /ui/QemuI386NotInstalled.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | 15 | 400 16 | 300 17 | 18 | 19 | 20 | 21 | 400 22 | 300 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 10 35 | 0 36 | 381 37 | 291 38 | 39 | 40 | 41 | 42 | 43 | 44 | Sorry but EmuGUI is not configured for using "qemu-system-i386" yet. 45 | This component however is necessary to start this virtual machine. 46 | Please go to Settings/QEMU to solve this issue. 47 | 48 | 49 | true 50 | 51 | 52 | 53 | 54 | 55 | 56 | OK 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /ui/QemuImgNotInstalled.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | 15 | 400 16 | 300 17 | 18 | 19 | 20 | 21 | 400 22 | 300 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 10 35 | 0 36 | 381 37 | 291 38 | 39 | 40 | 41 | 42 | 43 | 44 | Sorry but EmuGUI is not configured for using "qemu-img" yet. 45 | This component however is necessary to create or edit virtual machines. 46 | Please go to Settings/QEMU to solve this issue. 47 | 48 | 49 | true 50 | 51 | 52 | 53 | 54 | 55 | 56 | OK 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /ui/SettingsPending1.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 195 11 | 12 | 13 | 14 | Dialog 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 10 23 | 20 24 | 371 25 | 31 26 | 27 | 28 | 29 | You didn't setup the QEMU paths. 30 | 31 | 32 | true 33 | 34 | 35 | 36 | 37 | 38 | 10 39 | 90 40 | 381 41 | 16 42 | 43 | 44 | 45 | Please go to settings to do that and try again afterwards. 46 | 47 | 48 | true 49 | 50 | 51 | 52 | 53 | 54 | 160 55 | 140 56 | 75 57 | 24 58 | 59 | 60 | 61 | OK 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /ui/SettingsRestart.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | 15 | 400 16 | 300 17 | 18 | 19 | 20 | 21 | 400 22 | 300 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 10 35 | 10 36 | 381 37 | 281 38 | 39 | 40 | 41 | 42 | 43 | 44 | Sorry but you applied some settings that require a reboot. Please restart EmuGUI. 45 | Tut uns leid, aber Sie haben Einstellungen verändert, welche einen Neustart benötigen. Bitte starten Sie EmuGUI neu. 46 | 47 | 48 | true 49 | 50 | 51 | 52 | 53 | 54 | 55 | OK 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /ui/StartVM.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 410 10 | 300 11 | 12 | 13 | 14 | 15 | 410 16 | 300 17 | 18 | 19 | 20 | 21 | 410 22 | 300 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 10 35 | 10 36 | 397 37 | 281 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Boot from 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | cdrom 2 58 | 59 | 60 | 61 | 62 | 63 | 64 | Browse 65 | 66 | 67 | 68 | 69 | 70 | 71 | Set to system 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | yyyy-MM-ddThh:mm:ss 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | Date & Time 92 | 93 | 94 | 95 | 96 | 97 | 98 | Browse 99 | 100 | 101 | 102 | 103 | 104 | 105 | Browse 106 | 107 | 108 | 109 | 110 | 111 | 112 | Cancel 113 | 114 | 115 | 116 | 117 | 118 | 119 | fda 120 | 121 | 122 | 123 | 124 | 125 | 126 | TPM path (Linux only) 127 | 128 | 129 | 130 | 131 | 132 | 133 | Create the TPM from the terminal! 134 | 135 | 136 | Qt::AlignCenter 137 | 138 | 139 | true 140 | 141 | 142 | 143 | 144 | 145 | 146 | Note: If the VM doesn't start within five minutes, then you should check the VM and QEMU settings. 147 | 148 | 149 | Qt::AlignCenter 150 | 151 | 152 | true 153 | 154 | 155 | 156 | 157 | 158 | 159 | Start VM 160 | 161 | 162 | 163 | 164 | 165 | 166 | cdrom 1 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | c 175 | 176 | 177 | 178 | 179 | a 180 | 181 | 182 | 183 | 184 | d 185 | 186 | 187 | 188 | 189 | Let QEMU decide 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | Use RTC option 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | lineEdit 206 | pushButton 207 | lineEdit_2 208 | pushButton_2 209 | lineEdit_4 210 | pushButton_6 211 | comboBox 212 | lineEdit_3 213 | dateTimeEdit 214 | pushButton_5 215 | pushButton_3 216 | pushButton_4 217 | 218 | 219 | 220 | 221 | -------------------------------------------------------------------------------- /ui/USBTabletCheckboxDepreciated.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | 15 | 400 16 | 300 17 | 18 | 19 | 20 | 21 | 400 22 | 300 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 10 35 | 10 36 | 381 37 | 281 38 | 39 | 40 | 41 | 42 | 43 | 44 | OK 45 | 46 | 47 | 48 | 49 | 50 | 51 | You checked the USB Tablet Device checkbox. The checkbox in question is depreciated, going to be removed in a future update and therefore should not be used anymore. You can still boot the virtual machine but it's not recommended. 52 | 53 | 54 | true 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /ui/Update.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | Dialog 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 10 23 | 10 24 | 381 25 | 281 26 | 27 | 28 | 29 | 30 | 31 | 32 | No 33 | 34 | 35 | 36 | 37 | 38 | 39 | Yes 40 | 41 | 42 | 43 | 44 | 45 | 46 | An update is available! Do you want to be redirected to download? 47 | Note: If you check for pre-release updates, you will be redirected to the pre-release repository on Codeberg regardless of your preferred update mirror. 48 | 49 | The "I want to download a pre-release from GitLab!" button is only here temporarily as the stable repository hasn't been hosted on there yet at the time this pre-release version has been worked on. 50 | 51 | 52 | true 53 | 54 | 55 | 56 | 57 | 58 | 59 | I want to download a pre-release from GitLab! 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /ui/VhdExists.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 482 10 | 218 11 | 12 | 13 | 14 | 15 | 482 16 | 218 17 | 18 | 19 | 20 | 21 | 482 22 | 218 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 10 35 | 10 36 | 461 37 | 191 38 | 39 | 40 | 41 | 42 | 43 | 44 | Do you want to keep or overwrite it? 45 | 46 | 47 | true 48 | 49 | 50 | 51 | 52 | 53 | 54 | Overwrite 55 | 56 | 57 | 58 | 59 | 60 | 61 | Sorry, but the disk you want to create is already existant. 62 | 63 | 64 | true 65 | 66 | 67 | 68 | 69 | 70 | 71 | Keep 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /ui/VmExists.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 440 10 | 170 11 | 12 | 13 | 14 | 15 | 440 16 | 170 17 | 18 | 19 | 20 | 21 | 440 22 | 170 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 10 35 | 10 36 | 421 37 | 151 38 | 39 | 40 | 41 | 42 | 43 | 44 | Please consider either deleting that VM or thinking of a new name. 45 | 46 | 47 | true 48 | 49 | 50 | 51 | 52 | 53 | 54 | Sorry, but a VM with this name already exists. 55 | 56 | 57 | 58 | 59 | 60 | 61 | OK 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /ui/VmTooNew.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | 15 | 400 16 | 300 17 | 18 | 19 | 20 | 21 | 400 22 | 300 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 0 35 | 0 36 | 391 37 | 291 38 | 39 | 40 | 41 | 42 | 43 | 44 | This VM is made with a version of EmuGUI that is too new. Please use a later version! 45 | 46 | 47 | true 48 | 49 | 50 | 51 | 52 | 53 | 54 | OK 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /ui/Win2KCheckboxDepreciated.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | 15 | 400 16 | 300 17 | 18 | 19 | 20 | 21 | 400 22 | 300 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 10 35 | 0 36 | 381 37 | 291 38 | 39 | 40 | 41 | 42 | 43 | 44 | Sorry but you checked the "I want to install Windows 2000 checkbox" which however rather destroys Windows 2000 installations. Therefore, the feature in question is depreciated and will be removed in a future update. 45 | 46 | 47 | true 48 | 49 | 50 | 51 | 52 | 53 | 54 | OK 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /ui/Win81SupportNearsEnd.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 400 10 | 300 11 | 12 | 13 | 14 | 15 | 400 16 | 300 17 | 18 | 19 | 20 | 21 | 400 22 | 300 23 | 24 | 25 | 26 | Dialog 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 0 35 | 0 36 | 391 37 | 291 38 | 39 | 40 | 41 | 42 | 43 | 44 | Sorry to notify you but Windows 8.1 and Windows Server 2012 R2 are only supported until February 14th, 2023. 45 | 46 | 47 | true 48 | 49 | 50 | 51 | 52 | 53 | 54 | OK 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /uiScripts/ui_ErrDialog.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'ErrDialog.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.3 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QLabel, QPushButton, 19 | QSizePolicy, QVBoxLayout, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | self.verticalLayoutWidget = QWidget(Dialog) 27 | self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget") 28 | self.verticalLayoutWidget.setGeometry(QRect(10, 10, 381, 281)) 29 | self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget) 30 | self.verticalLayout.setObjectName(u"verticalLayout") 31 | self.verticalLayout.setContentsMargins(0, 0, 0, 0) 32 | self.label = QLabel(self.verticalLayoutWidget) 33 | self.label.setObjectName(u"label") 34 | self.label.setWordWrap(True) 35 | 36 | self.verticalLayout.addWidget(self.label) 37 | 38 | self.label_2 = QLabel(self.verticalLayoutWidget) 39 | self.label_2.setObjectName(u"label_2") 40 | 41 | self.verticalLayout.addWidget(self.label_2) 42 | 43 | self.label_3 = QLabel(self.verticalLayoutWidget) 44 | self.label_3.setObjectName(u"label_3") 45 | self.label_3.setWordWrap(True) 46 | 47 | self.verticalLayout.addWidget(self.label_3) 48 | 49 | self.pushButton = QPushButton(self.verticalLayoutWidget) 50 | self.pushButton.setObjectName(u"pushButton") 51 | 52 | self.verticalLayout.addWidget(self.pushButton) 53 | 54 | 55 | self.retranslateUi(Dialog) 56 | 57 | QMetaObject.connectSlotsByName(Dialog) 58 | # setupUi 59 | 60 | def retranslateUi(self, Dialog): 61 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 62 | self.label.setText(QCoreApplication.translate("Dialog", u"EmuGUI encountered an error.", None)) 63 | self.label_2.setText(QCoreApplication.translate("Dialog", u"Error Code:", None)) 64 | self.label_3.setText(QCoreApplication.translate("Dialog", u"If this error occurs multiple times, contact your administrator and/or ask for help on the EmuGUI Discord Server or on its GitHub repository.", None)) 65 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 66 | # retranslateUi 67 | 68 | -------------------------------------------------------------------------------- /uiScripts/ui_IcelakeClientCPUDepreciated.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'IcelakeClientCPUDepreciated.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | Dialog.setMinimumSize(QSize(400, 300)) 27 | Dialog.setMaximumSize(QSize(400, 300)) 28 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 29 | self.gridLayoutWidget = QWidget(Dialog) 30 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 31 | self.gridLayoutWidget.setGeometry(QRect(10, 10, 371, 271)) 32 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 33 | self.gridLayout.setObjectName(u"gridLayout") 34 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 35 | self.label = QLabel(self.gridLayoutWidget) 36 | self.label.setObjectName(u"label") 37 | self.label.setWordWrap(True) 38 | 39 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 40 | 41 | self.pushButton = QPushButton(self.gridLayoutWidget) 42 | self.pushButton.setObjectName(u"pushButton") 43 | 44 | self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1) 45 | 46 | 47 | self.retranslateUi(Dialog) 48 | 49 | QMetaObject.connectSlotsByName(Dialog) 50 | # setupUi 51 | 52 | def retranslateUi(self, Dialog): 53 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 54 | self.label.setText(QCoreApplication.translate("Dialog", u"Sorry, but you decided to use the Icelake-Client CPU which has been removed from QEMU 7.1. As a response, it is depreciated on EmuGUI now. If you updated to QEMU 7.1 or later, your VM won't work anymore, so please change the CPU by clicking on \"Edit selected virtual machine\" with this VM selected. You can try to start this VM anyway, but please don't blame me if it doesn't show up.", None)) 55 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 56 | # retranslateUi 57 | 58 | -------------------------------------------------------------------------------- /uiScripts/ui_NoUpdate.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'NoUpdate.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.3.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 27 | self.gridLayoutWidget = QWidget(Dialog) 28 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 29 | self.gridLayoutWidget.setGeometry(QRect(10, 10, 381, 281)) 30 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 31 | self.gridLayout.setObjectName(u"gridLayout") 32 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 33 | self.pushButton = QPushButton(self.gridLayoutWidget) 34 | self.pushButton.setObjectName(u"pushButton") 35 | 36 | self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1) 37 | 38 | self.label = QLabel(self.gridLayoutWidget) 39 | self.label.setObjectName(u"label") 40 | self.label.setWordWrap(True) 41 | 42 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 43 | 44 | self.label_2 = QLabel(self.gridLayoutWidget) 45 | self.label_2.setObjectName(u"label_2") 46 | self.label_2.setWordWrap(True) 47 | 48 | self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) 49 | 50 | 51 | self.retranslateUi(Dialog) 52 | 53 | QMetaObject.connectSlotsByName(Dialog) 54 | # setupUi 55 | 56 | def retranslateUi(self, Dialog): 57 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 58 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 59 | self.label.setText(QCoreApplication.translate("Dialog", u"You are already running the latest version of EmuGUI.", None)) 60 | self.label_2.setText(QCoreApplication.translate("Dialog", u"...or don't have an internet connection.", None)) 61 | # retranslateUi 62 | 63 | -------------------------------------------------------------------------------- /uiScripts/ui_QemuI386NotInstalled.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'QemuI386NotInstalled.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | Dialog.setMinimumSize(QSize(400, 300)) 27 | Dialog.setMaximumSize(QSize(400, 300)) 28 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 29 | self.gridLayoutWidget = QWidget(Dialog) 30 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 31 | self.gridLayoutWidget.setGeometry(QRect(10, 0, 381, 291)) 32 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 33 | self.gridLayout.setObjectName(u"gridLayout") 34 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 35 | self.label = QLabel(self.gridLayoutWidget) 36 | self.label.setObjectName(u"label") 37 | self.label.setWordWrap(True) 38 | 39 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 40 | 41 | self.pushButton = QPushButton(self.gridLayoutWidget) 42 | self.pushButton.setObjectName(u"pushButton") 43 | 44 | self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1) 45 | 46 | 47 | self.retranslateUi(Dialog) 48 | 49 | QMetaObject.connectSlotsByName(Dialog) 50 | # setupUi 51 | 52 | def retranslateUi(self, Dialog): 53 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 54 | self.label.setText(QCoreApplication.translate("Dialog", u"Sorry but EmuGUI is not configured for using \"qemu-system-i386\" yet.\n" 55 | "This component however is necessary to start this virtual machine.\n" 56 | "Please go to Settings/QEMU to solve this issue.", None)) 57 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 58 | # retranslateUi 59 | 60 | -------------------------------------------------------------------------------- /uiScripts/ui_QemuImgNotInstalled.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'QemuImgNotInstalled.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | Dialog.setMinimumSize(QSize(400, 300)) 27 | Dialog.setMaximumSize(QSize(400, 300)) 28 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 29 | self.gridLayoutWidget = QWidget(Dialog) 30 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 31 | self.gridLayoutWidget.setGeometry(QRect(10, 0, 381, 291)) 32 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 33 | self.gridLayout.setObjectName(u"gridLayout") 34 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 35 | self.label = QLabel(self.gridLayoutWidget) 36 | self.label.setObjectName(u"label") 37 | self.label.setWordWrap(True) 38 | 39 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 40 | 41 | self.pushButton = QPushButton(self.gridLayoutWidget) 42 | self.pushButton.setObjectName(u"pushButton") 43 | 44 | self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1) 45 | 46 | 47 | self.retranslateUi(Dialog) 48 | 49 | QMetaObject.connectSlotsByName(Dialog) 50 | # setupUi 51 | 52 | def retranslateUi(self, Dialog): 53 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 54 | self.label.setText(QCoreApplication.translate("Dialog", u"Sorry but EmuGUI is not configured for using \"qemu-img\" yet.\n" 55 | "This component however is necessary to create or edit virtual machines.\n" 56 | "Please go to Settings/QEMU to solve this issue.", None)) 57 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 58 | # retranslateUi 59 | 60 | -------------------------------------------------------------------------------- /uiScripts/ui_SettingsPending1.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'SettingsPending1.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.3.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QLabel, QPushButton, 19 | QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 195) 26 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 27 | self.label = QLabel(Dialog) 28 | self.label.setObjectName(u"label") 29 | self.label.setGeometry(QRect(10, 20, 371, 31)) 30 | self.label.setWordWrap(True) 31 | self.label_2 = QLabel(Dialog) 32 | self.label_2.setObjectName(u"label_2") 33 | self.label_2.setGeometry(QRect(10, 90, 381, 16)) 34 | self.label_2.setWordWrap(True) 35 | self.pushButton = QPushButton(Dialog) 36 | self.pushButton.setObjectName(u"pushButton") 37 | self.pushButton.setGeometry(QRect(160, 140, 75, 24)) 38 | 39 | self.retranslateUi(Dialog) 40 | 41 | QMetaObject.connectSlotsByName(Dialog) 42 | # setupUi 43 | 44 | def retranslateUi(self, Dialog): 45 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 46 | self.label.setText(QCoreApplication.translate("Dialog", u"You didn't setup the QEMU paths.", None)) 47 | self.label_2.setText(QCoreApplication.translate("Dialog", u"Please go to settings to do that and try again afterwards.", None)) 48 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 49 | # retranslateUi 50 | 51 | -------------------------------------------------------------------------------- /uiScripts/ui_SettingsRestart.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'SettingsRestart.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QLabel, QPushButton, 19 | QSizePolicy, QVBoxLayout, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | Dialog.setMinimumSize(QSize(400, 300)) 27 | Dialog.setMaximumSize(QSize(400, 300)) 28 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 29 | self.verticalLayoutWidget = QWidget(Dialog) 30 | self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget") 31 | self.verticalLayoutWidget.setGeometry(QRect(10, 10, 381, 281)) 32 | self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget) 33 | self.verticalLayout.setObjectName(u"verticalLayout") 34 | self.verticalLayout.setContentsMargins(0, 0, 0, 0) 35 | self.label = QLabel(self.verticalLayoutWidget) 36 | self.label.setObjectName(u"label") 37 | self.label.setWordWrap(True) 38 | 39 | self.verticalLayout.addWidget(self.label) 40 | 41 | self.pushButton = QPushButton(self.verticalLayoutWidget) 42 | self.pushButton.setObjectName(u"pushButton") 43 | 44 | self.verticalLayout.addWidget(self.pushButton) 45 | 46 | 47 | self.retranslateUi(Dialog) 48 | 49 | QMetaObject.connectSlotsByName(Dialog) 50 | # setupUi 51 | 52 | def retranslateUi(self, Dialog): 53 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 54 | self.label.setText(QCoreApplication.translate("Dialog", u"Sorry but you applied some settings that require a reboot. Please restart EmuGUI.\n" 55 | "Tut uns leid, aber Sie haben Einstellungen ver\u00e4ndert, welche einen Neustart ben\u00f6tigen. Bitte starten Sie EmuGUI neu.", None)) 56 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 57 | # retranslateUi 58 | 59 | -------------------------------------------------------------------------------- /uiScripts/ui_StartVM.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'StartVM.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.5.3 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QDateTimeEdit, 19 | QDialog, QGridLayout, QLabel, QLineEdit, 20 | QPushButton, QSizePolicy, QWidget) 21 | 22 | class Ui_Dialog(object): 23 | def setupUi(self, Dialog): 24 | if not Dialog.objectName(): 25 | Dialog.setObjectName(u"Dialog") 26 | Dialog.resize(410, 300) 27 | Dialog.setMinimumSize(QSize(410, 300)) 28 | Dialog.setMaximumSize(QSize(410, 300)) 29 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 30 | self.gridLayoutWidget = QWidget(Dialog) 31 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 32 | self.gridLayoutWidget.setGeometry(QRect(10, 10, 397, 281)) 33 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 34 | self.gridLayout.setObjectName(u"gridLayout") 35 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 36 | self.lineEdit_4 = QLineEdit(self.gridLayoutWidget) 37 | self.lineEdit_4.setObjectName(u"lineEdit_4") 38 | 39 | self.gridLayout.addWidget(self.lineEdit_4, 4, 1, 1, 1) 40 | 41 | self.label_3 = QLabel(self.gridLayoutWidget) 42 | self.label_3.setObjectName(u"label_3") 43 | 44 | self.gridLayout.addWidget(self.label_3, 5, 0, 1, 1) 45 | 46 | self.lineEdit = QLineEdit(self.gridLayoutWidget) 47 | self.lineEdit.setObjectName(u"lineEdit") 48 | 49 | self.gridLayout.addWidget(self.lineEdit, 1, 1, 1, 1) 50 | 51 | self.label_8 = QLabel(self.gridLayoutWidget) 52 | self.label_8.setObjectName(u"label_8") 53 | 54 | self.gridLayout.addWidget(self.label_8, 4, 0, 1, 1) 55 | 56 | self.pushButton_2 = QPushButton(self.gridLayoutWidget) 57 | self.pushButton_2.setObjectName(u"pushButton_2") 58 | 59 | self.gridLayout.addWidget(self.pushButton_2, 2, 2, 1, 1) 60 | 61 | self.pushButton_5 = QPushButton(self.gridLayoutWidget) 62 | self.pushButton_5.setObjectName(u"pushButton_5") 63 | 64 | self.gridLayout.addWidget(self.pushButton_5, 8, 2, 1, 1) 65 | 66 | self.lineEdit_3 = QLineEdit(self.gridLayoutWidget) 67 | self.lineEdit_3.setObjectName(u"lineEdit_3") 68 | 69 | self.gridLayout.addWidget(self.lineEdit_3, 6, 1, 1, 2) 70 | 71 | self.dateTimeEdit = QDateTimeEdit(self.gridLayoutWidget) 72 | self.dateTimeEdit.setObjectName(u"dateTimeEdit") 73 | 74 | self.gridLayout.addWidget(self.dateTimeEdit, 8, 1, 1, 1) 75 | 76 | self.lineEdit_2 = QLineEdit(self.gridLayoutWidget) 77 | self.lineEdit_2.setObjectName(u"lineEdit_2") 78 | 79 | self.gridLayout.addWidget(self.lineEdit_2, 2, 1, 1, 1) 80 | 81 | self.label_4 = QLabel(self.gridLayoutWidget) 82 | self.label_4.setObjectName(u"label_4") 83 | 84 | self.gridLayout.addWidget(self.label_4, 8, 0, 1, 1) 85 | 86 | self.pushButton_6 = QPushButton(self.gridLayoutWidget) 87 | self.pushButton_6.setObjectName(u"pushButton_6") 88 | 89 | self.gridLayout.addWidget(self.pushButton_6, 4, 2, 1, 1) 90 | 91 | self.pushButton = QPushButton(self.gridLayoutWidget) 92 | self.pushButton.setObjectName(u"pushButton") 93 | 94 | self.gridLayout.addWidget(self.pushButton, 1, 2, 1, 1) 95 | 96 | self.pushButton_4 = QPushButton(self.gridLayoutWidget) 97 | self.pushButton_4.setObjectName(u"pushButton_4") 98 | 99 | self.gridLayout.addWidget(self.pushButton_4, 9, 2, 1, 1) 100 | 101 | self.label = QLabel(self.gridLayoutWidget) 102 | self.label.setObjectName(u"label") 103 | 104 | self.gridLayout.addWidget(self.label, 1, 0, 1, 1) 105 | 106 | self.label_6 = QLabel(self.gridLayoutWidget) 107 | self.label_6.setObjectName(u"label_6") 108 | 109 | self.gridLayout.addWidget(self.label_6, 6, 0, 1, 1) 110 | 111 | self.label_7 = QLabel(self.gridLayoutWidget) 112 | self.label_7.setObjectName(u"label_7") 113 | self.label_7.setAlignment(Qt.AlignCenter) 114 | self.label_7.setWordWrap(True) 115 | 116 | self.gridLayout.addWidget(self.label_7, 11, 0, 1, 3) 117 | 118 | self.label_5 = QLabel(self.gridLayoutWidget) 119 | self.label_5.setObjectName(u"label_5") 120 | self.label_5.setAlignment(Qt.AlignCenter) 121 | self.label_5.setWordWrap(True) 122 | 123 | self.gridLayout.addWidget(self.label_5, 10, 0, 1, 3) 124 | 125 | self.pushButton_3 = QPushButton(self.gridLayoutWidget) 126 | self.pushButton_3.setObjectName(u"pushButton_3") 127 | 128 | self.gridLayout.addWidget(self.pushButton_3, 9, 1, 1, 1) 129 | 130 | self.label_2 = QLabel(self.gridLayoutWidget) 131 | self.label_2.setObjectName(u"label_2") 132 | 133 | self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1) 134 | 135 | self.comboBox = QComboBox(self.gridLayoutWidget) 136 | self.comboBox.addItem("") 137 | self.comboBox.addItem("") 138 | self.comboBox.addItem("") 139 | self.comboBox.addItem("") 140 | self.comboBox.setObjectName(u"comboBox") 141 | 142 | self.gridLayout.addWidget(self.comboBox, 5, 1, 1, 2) 143 | 144 | self.checkBox = QCheckBox(self.gridLayoutWidget) 145 | self.checkBox.setObjectName(u"checkBox") 146 | 147 | self.gridLayout.addWidget(self.checkBox, 7, 0, 1, 2) 148 | 149 | QWidget.setTabOrder(self.lineEdit, self.pushButton) 150 | QWidget.setTabOrder(self.pushButton, self.lineEdit_2) 151 | QWidget.setTabOrder(self.lineEdit_2, self.pushButton_2) 152 | QWidget.setTabOrder(self.pushButton_2, self.lineEdit_4) 153 | QWidget.setTabOrder(self.lineEdit_4, self.pushButton_6) 154 | QWidget.setTabOrder(self.pushButton_6, self.comboBox) 155 | QWidget.setTabOrder(self.comboBox, self.lineEdit_3) 156 | QWidget.setTabOrder(self.lineEdit_3, self.dateTimeEdit) 157 | QWidget.setTabOrder(self.dateTimeEdit, self.pushButton_5) 158 | QWidget.setTabOrder(self.pushButton_5, self.pushButton_3) 159 | QWidget.setTabOrder(self.pushButton_3, self.pushButton_4) 160 | 161 | self.retranslateUi(Dialog) 162 | 163 | QMetaObject.connectSlotsByName(Dialog) 164 | # setupUi 165 | 166 | def retranslateUi(self, Dialog): 167 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 168 | self.label_3.setText(QCoreApplication.translate("Dialog", u"Boot from", None)) 169 | self.label_8.setText(QCoreApplication.translate("Dialog", u"cdrom 2", None)) 170 | self.pushButton_2.setText(QCoreApplication.translate("Dialog", u"Browse", None)) 171 | self.pushButton_5.setText(QCoreApplication.translate("Dialog", u"Set to system", None)) 172 | self.dateTimeEdit.setDisplayFormat(QCoreApplication.translate("Dialog", u"yyyy-MM-ddThh:mm:ss", None)) 173 | self.label_4.setText(QCoreApplication.translate("Dialog", u"Date & Time", None)) 174 | self.pushButton_6.setText(QCoreApplication.translate("Dialog", u"Browse", None)) 175 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"Browse", None)) 176 | self.pushButton_4.setText(QCoreApplication.translate("Dialog", u"Cancel", None)) 177 | self.label.setText(QCoreApplication.translate("Dialog", u"fda", None)) 178 | self.label_6.setText(QCoreApplication.translate("Dialog", u"TPM path (Linux only)", None)) 179 | self.label_7.setText(QCoreApplication.translate("Dialog", u"Create the TPM from the terminal!", None)) 180 | self.label_5.setText(QCoreApplication.translate("Dialog", u"Note: If the VM doesn't start within five minutes, then you should check the VM and QEMU settings.", None)) 181 | self.pushButton_3.setText(QCoreApplication.translate("Dialog", u"Start VM", None)) 182 | self.label_2.setText(QCoreApplication.translate("Dialog", u"cdrom 1", None)) 183 | self.comboBox.setItemText(0, QCoreApplication.translate("Dialog", u"c", None)) 184 | self.comboBox.setItemText(1, QCoreApplication.translate("Dialog", u"a", None)) 185 | self.comboBox.setItemText(2, QCoreApplication.translate("Dialog", u"d", None)) 186 | self.comboBox.setItemText(3, QCoreApplication.translate("Dialog", u"Let QEMU decide", None)) 187 | 188 | self.checkBox.setText(QCoreApplication.translate("Dialog", u"Use RTC option", None)) 189 | # retranslateUi 190 | 191 | -------------------------------------------------------------------------------- /uiScripts/ui_USBTabletCheckboxDepreciated.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'USBTabletCheckboxDepreciated.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | Dialog.setMinimumSize(QSize(400, 300)) 27 | Dialog.setMaximumSize(QSize(400, 300)) 28 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 29 | self.gridLayoutWidget = QWidget(Dialog) 30 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 31 | self.gridLayoutWidget.setGeometry(QRect(10, 10, 381, 281)) 32 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 33 | self.gridLayout.setObjectName(u"gridLayout") 34 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 35 | self.pushButton = QPushButton(self.gridLayoutWidget) 36 | self.pushButton.setObjectName(u"pushButton") 37 | 38 | self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1) 39 | 40 | self.label = QLabel(self.gridLayoutWidget) 41 | self.label.setObjectName(u"label") 42 | self.label.setWordWrap(True) 43 | 44 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 45 | 46 | 47 | self.retranslateUi(Dialog) 48 | 49 | QMetaObject.connectSlotsByName(Dialog) 50 | # setupUi 51 | 52 | def retranslateUi(self, Dialog): 53 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 54 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 55 | self.label.setText(QCoreApplication.translate("Dialog", u"You checked the USB Tablet Device checkbox. The checkbox in question is depreciated, going to be removed in a future update and therefore should not be used anymore. You can still boot the virtual machine but it's not recommended.", None)) 56 | # retranslateUi 57 | 58 | -------------------------------------------------------------------------------- /uiScripts/ui_Update.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'Update.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 27 | self.gridLayoutWidget = QWidget(Dialog) 28 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 29 | self.gridLayoutWidget.setGeometry(QRect(10, 10, 381, 281)) 30 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 31 | self.gridLayout.setObjectName(u"gridLayout") 32 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 33 | self.pushButton_2 = QPushButton(self.gridLayoutWidget) 34 | self.pushButton_2.setObjectName(u"pushButton_2") 35 | 36 | self.gridLayout.addWidget(self.pushButton_2, 3, 0, 1, 1) 37 | 38 | self.pushButton = QPushButton(self.gridLayoutWidget) 39 | self.pushButton.setObjectName(u"pushButton") 40 | 41 | self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1) 42 | 43 | self.label = QLabel(self.gridLayoutWidget) 44 | self.label.setObjectName(u"label") 45 | self.label.setWordWrap(True) 46 | 47 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 48 | 49 | self.pushButton_3 = QPushButton(self.gridLayoutWidget) 50 | self.pushButton_3.setObjectName(u"pushButton_3") 51 | 52 | self.gridLayout.addWidget(self.pushButton_3, 2, 0, 1, 1) 53 | 54 | 55 | self.retranslateUi(Dialog) 56 | 57 | QMetaObject.connectSlotsByName(Dialog) 58 | # setupUi 59 | 60 | def retranslateUi(self, Dialog): 61 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 62 | self.pushButton_2.setText(QCoreApplication.translate("Dialog", u"No", None)) 63 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"Yes", None)) 64 | self.label.setText(QCoreApplication.translate("Dialog", u"An update is available! Do you want to be redirected to download?\n" 65 | "Note: If you check for pre-release updates, you will be redirected to the pre-release repository on Codeberg regardless of your preferred update mirror.\n" 66 | "\n" 67 | "The \"I want to download a pre-release from GitLab!\" button is only here temporarily as the stable repository hasn't been hosted on there yet at the time this pre-release version has been worked on.", None)) 68 | self.pushButton_3.setText(QCoreApplication.translate("Dialog", u"I want to download a pre-release from GitLab!", None)) 69 | # retranslateUi 70 | 71 | -------------------------------------------------------------------------------- /uiScripts/ui_VhdExists.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'VhdExists.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(482, 218) 26 | Dialog.setMinimumSize(QSize(482, 218)) 27 | Dialog.setMaximumSize(QSize(482, 218)) 28 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 29 | self.gridLayoutWidget = QWidget(Dialog) 30 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 31 | self.gridLayoutWidget.setGeometry(QRect(10, 10, 461, 191)) 32 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 33 | self.gridLayout.setObjectName(u"gridLayout") 34 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 35 | self.label_2 = QLabel(self.gridLayoutWidget) 36 | self.label_2.setObjectName(u"label_2") 37 | self.label_2.setWordWrap(True) 38 | 39 | self.gridLayout.addWidget(self.label_2, 1, 1, 1, 1) 40 | 41 | self.pushButton = QPushButton(self.gridLayoutWidget) 42 | self.pushButton.setObjectName(u"pushButton") 43 | 44 | self.gridLayout.addWidget(self.pushButton, 1, 2, 1, 1) 45 | 46 | self.label = QLabel(self.gridLayoutWidget) 47 | self.label.setObjectName(u"label") 48 | self.label.setWordWrap(True) 49 | 50 | self.gridLayout.addWidget(self.label, 0, 1, 1, 1) 51 | 52 | self.pushButton_2 = QPushButton(self.gridLayoutWidget) 53 | self.pushButton_2.setObjectName(u"pushButton_2") 54 | 55 | self.gridLayout.addWidget(self.pushButton_2, 0, 2, 1, 1) 56 | 57 | 58 | self.retranslateUi(Dialog) 59 | 60 | QMetaObject.connectSlotsByName(Dialog) 61 | # setupUi 62 | 63 | def retranslateUi(self, Dialog): 64 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 65 | self.label_2.setText(QCoreApplication.translate("Dialog", u"Do you want to keep or overwrite it?", None)) 66 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"Overwrite", None)) 67 | self.label.setText(QCoreApplication.translate("Dialog", u"Sorry, but the disk you want to create is already existant.", None)) 68 | self.pushButton_2.setText(QCoreApplication.translate("Dialog", u"Keep", None)) 69 | # retranslateUi 70 | 71 | -------------------------------------------------------------------------------- /uiScripts/ui_VmExists.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'VmExists.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(440, 170) 26 | Dialog.setMinimumSize(QSize(440, 170)) 27 | Dialog.setMaximumSize(QSize(440, 170)) 28 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 29 | self.gridLayoutWidget = QWidget(Dialog) 30 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 31 | self.gridLayoutWidget.setGeometry(QRect(10, 10, 421, 151)) 32 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 33 | self.gridLayout.setObjectName(u"gridLayout") 34 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 35 | self.label_2 = QLabel(self.gridLayoutWidget) 36 | self.label_2.setObjectName(u"label_2") 37 | self.label_2.setWordWrap(True) 38 | 39 | self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) 40 | 41 | self.label = QLabel(self.gridLayoutWidget) 42 | self.label.setObjectName(u"label") 43 | 44 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 45 | 46 | self.pushButton = QPushButton(self.gridLayoutWidget) 47 | self.pushButton.setObjectName(u"pushButton") 48 | 49 | self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1) 50 | 51 | 52 | self.retranslateUi(Dialog) 53 | 54 | QMetaObject.connectSlotsByName(Dialog) 55 | # setupUi 56 | 57 | def retranslateUi(self, Dialog): 58 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 59 | self.label_2.setText(QCoreApplication.translate("Dialog", u"Please consider either deleting that VM or thinking of a new name.", None)) 60 | self.label.setText(QCoreApplication.translate("Dialog", u"Sorry, but a VM with this name already exists.", None)) 61 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 62 | # retranslateUi 63 | 64 | -------------------------------------------------------------------------------- /uiScripts/ui_VmTooNew.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'VmTooNew.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | Dialog.setMinimumSize(QSize(400, 300)) 27 | Dialog.setMaximumSize(QSize(400, 300)) 28 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 29 | self.gridLayoutWidget = QWidget(Dialog) 30 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 31 | self.gridLayoutWidget.setGeometry(QRect(0, 0, 391, 291)) 32 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 33 | self.gridLayout.setObjectName(u"gridLayout") 34 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 35 | self.label = QLabel(self.gridLayoutWidget) 36 | self.label.setObjectName(u"label") 37 | self.label.setWordWrap(True) 38 | 39 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 40 | 41 | self.pushButton = QPushButton(self.gridLayoutWidget) 42 | self.pushButton.setObjectName(u"pushButton") 43 | 44 | self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1) 45 | 46 | 47 | self.retranslateUi(Dialog) 48 | 49 | QMetaObject.connectSlotsByName(Dialog) 50 | # setupUi 51 | 52 | def retranslateUi(self, Dialog): 53 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 54 | self.label.setText(QCoreApplication.translate("Dialog", u"This VM is made with a version of EmuGUI that is too new. Please use a later version!", None)) 55 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 56 | # retranslateUi 57 | 58 | -------------------------------------------------------------------------------- /uiScripts/ui_Win2KCheckboxDepreciated.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'Win2KCheckboxDepreciated.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | Dialog.setMinimumSize(QSize(400, 300)) 27 | Dialog.setMaximumSize(QSize(400, 300)) 28 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 29 | self.gridLayoutWidget = QWidget(Dialog) 30 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 31 | self.gridLayoutWidget.setGeometry(QRect(10, 0, 381, 291)) 32 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 33 | self.gridLayout.setObjectName(u"gridLayout") 34 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 35 | self.label = QLabel(self.gridLayoutWidget) 36 | self.label.setObjectName(u"label") 37 | self.label.setWordWrap(True) 38 | 39 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 40 | 41 | self.pushButton = QPushButton(self.gridLayoutWidget) 42 | self.pushButton.setObjectName(u"pushButton") 43 | 44 | self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1) 45 | 46 | 47 | self.retranslateUi(Dialog) 48 | 49 | QMetaObject.connectSlotsByName(Dialog) 50 | # setupUi 51 | 52 | def retranslateUi(self, Dialog): 53 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 54 | self.label.setText(QCoreApplication.translate("Dialog", u"Sorry but you checked the \"I want to install Windows 2000 checkbox\" which however rather destroys Windows 2000 installations. Therefore, the feature in question is depreciated and will be removed in a future update.", None)) 55 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 56 | # retranslateUi 57 | 58 | -------------------------------------------------------------------------------- /uiScripts/ui_Win81SupportNearsEnd.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'Win81SupportNearsEnd.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 6.4.1 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, 12 | QMetaObject, QObject, QPoint, QRect, 13 | QSize, QTime, QUrl, Qt) 14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, 15 | QFont, QFontDatabase, QGradient, QIcon, 16 | QImage, QKeySequence, QLinearGradient, QPainter, 17 | QPalette, QPixmap, QRadialGradient, QTransform) 18 | from PySide6.QtWidgets import (QApplication, QDialog, QGridLayout, QLabel, 19 | QPushButton, QSizePolicy, QWidget) 20 | 21 | class Ui_Dialog(object): 22 | def setupUi(self, Dialog): 23 | if not Dialog.objectName(): 24 | Dialog.setObjectName(u"Dialog") 25 | Dialog.resize(400, 300) 26 | Dialog.setMinimumSize(QSize(400, 300)) 27 | Dialog.setMaximumSize(QSize(400, 300)) 28 | Dialog.setLocale(QLocale(QLocale.English, QLocale.UnitedStates)) 29 | self.gridLayoutWidget = QWidget(Dialog) 30 | self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") 31 | self.gridLayoutWidget.setGeometry(QRect(0, 0, 391, 291)) 32 | self.gridLayout = QGridLayout(self.gridLayoutWidget) 33 | self.gridLayout.setObjectName(u"gridLayout") 34 | self.gridLayout.setContentsMargins(0, 0, 0, 0) 35 | self.label = QLabel(self.gridLayoutWidget) 36 | self.label.setObjectName(u"label") 37 | self.label.setWordWrap(True) 38 | 39 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1) 40 | 41 | self.pushButton = QPushButton(self.gridLayoutWidget) 42 | self.pushButton.setObjectName(u"pushButton") 43 | 44 | self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1) 45 | 46 | 47 | self.retranslateUi(Dialog) 48 | 49 | QMetaObject.connectSlotsByName(Dialog) 50 | # setupUi 51 | 52 | def retranslateUi(self, Dialog): 53 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None)) 54 | self.label.setText(QCoreApplication.translate("Dialog", u"If you got EmuGUI running on Windows 8.1 or Windows Server 2012 R2, congratulations. Unfortunately, these OSes aren't supported anymore.", None)) 55 | self.pushButton.setText(QCoreApplication.translate("Dialog", u"OK", None)) 56 | # retranslateUi 57 | 58 | -------------------------------------------------------------------------------- /update.txt: -------------------------------------------------------------------------------- 1 | stable = 5310 2 | pre_release = 5301 3 | --------------------------------------------------------------------------------