├── .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 |
--------------------------------------------------------------------------------