1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
|
from PyQt6.QtCore import QObject, Qt, pyqtSignal
from PyQt6.QtWidgets import QComboBox, QHBoxLayout, QMessageBox, QProgressBar, QVBoxLayout, QWidget
from raveos_center import gaming, muveletek, proton
from raveos_center.elemek import Kapcsolo, Kartya, cimke, gomb
from raveos_center.folyamat import FolyamatAblak
from raveos_center.hatter import ervenytelenit, gyorsitott, hatterben, tarolt
AZON = "gaming"
CIM = "Gaming"
BEALLITASOK = [
("gamemode", "GameMode", "CPU és I/O prioritás játék közben. A Lutris és a Heroic magától használja, Steamben a "
"játék indítási opciójába írd: gamemoderun %command%"),
("mangohud", "MangoHud alapból", "FPS, hőmérséklet és terhelés kijelzése minden Vulkan és OpenGL játékban. "
"Játék közben a jobb Shift + F12 elrejti, a jobb Shift + F10 vált a kijelző módok között."),
("utemezo", "Játékra hangolt ütemező", "Az scx_lavd ütemező gaming módban: egyenletesebb képkockaidő, amikor a "
"háttérben más is fut. Kikapcsolva a kernel saját BORE ütemezője dolgozik."),
("gamescope", "Gamescope session", "Külön, konzolszerű Steam játékmenet, a bejelentkező képernyőn választható."),
("governor", "Performance CPU governor", "Játék közben teljes órajel, a játék bezárása után visszaáll."),
("ntsync", "NTSync", "Gyorsabb Windows-szinkronizáció Wine és Proton alatt."),
]
class _Jelzo(QObject):
haladas = pyqtSignal(int)
def alkalmaz(szulo, valtozasok):
lepesek = []
helyi = []
for azon, be in valtozasok:
l, h = gaming.lepesek(azon, be)
lepesek += l
if h:
helyi.append(h)
if lepesek:
ablak = FolyamatAblak(szulo, "Gaming beállítások", lepesek, "A beállítás elkészült.")
ablak.exec()
if not ablak.rendben:
return "A beállítás nem sikerült teljesen, a részleteket a napló mutatja."
for h in helyi:
try:
h()
except OSError as e:
return f"A beállítás nem sikerült: {e}"
return None
class Sor(QWidget):
def __init__(self, nev, leiras, utolso=False):
super().__init__()
self.setObjectName("appsor")
self.setProperty("utolso", utolso)
self.setAttribute(Qt.WidgetAttribute.WA_StyledBackground, True)
self.sor = QHBoxLayout(self)
self.sor.setContentsMargins(16, 14, 16, 14)
self.sor.setSpacing(16)
self.szovegek = QVBoxLayout()
self.szovegek.setSpacing(3)
cim = cimke(nev)
cim.setStyleSheet("font-size: 14px; font-weight: 600;")
self.szovegek.addWidget(cim)
self.szovegek.addWidget(cimke(leiras, "halvany", True))
self.megjegyzes = cimke("", "monohalvany", True)
self.megjegyzes.hide()
self.szovegek.addWidget(self.megjegyzes)
self.sor.addLayout(self.szovegek, 1)
def jegyzet(self, szoveg):
self.megjegyzes.setText(szoveg)
self.megjegyzes.setVisible(bool(szoveg))
class BeallitasSor(Sor):
def __init__(self, azon, nev, leiras, valt, utolso=False):
super().__init__(nev, leiras, utolso)
self.azon = azon
self.kapcsolo = Kapcsolo()
self.kapcsolo.setAccessibleName(nev)
self.kapcsolo.clicked.connect(lambda be: valt(self.azon, be))
self.sor.addWidget(self.kapcsolo, 0, Qt.AlignmentFlag.AlignVCenter)
def beallit(self, adat, foglalt):
self.kapcsolo.blockSignals(True)
self.kapcsolo.setChecked(adat["aktiv"])
self.kapcsolo.blockSignals(False)
helper = muveletek.helper_elerheto() or not adat["root"]
self.kapcsolo.setEnabled(adat["elerheto"] and helper and not foglalt)
self.jegyzet(adat["megjegyzes"])
self.kapcsolo.update()
class ProtonGeSor(Sor):
def __init__(self, szulo):
super().__init__(
"Proton-GE",
"A GloriousEggroll Proton-változata, több játékhoz tartalmaz javítást és videokodeket. A Steam "
"újraindítása után a játék Tulajdonságok > Kompatibilitás menüjében választható.",
)
self.szulo = szulo
self.kiadas = None
self.fut = False
self.jelzo = _Jelzo()
self.sav = QProgressBar()
self.sav.setObjectName("sav")
self.sav.setTextVisible(False)
self.sav.setFixedHeight(6)
self.sav.hide()
self.jelzo.haladas.connect(self.sav.setValue)
self.szovegek.addWidget(self.sav)
gombok = QVBoxLayout()
gombok.setSpacing(6)
self.telepit_gomb = gomb("Legújabb telepítése", fo=True, kicsi=True)
self.telepit_gomb.clicked.connect(self._telepit)
self.regiek_gomb = gomb("Régiek törlése", kicsi=True)
self.regiek_gomb.clicked.connect(self._regiek)
self.torol_gomb = gomb("Mind törlése", kicsi=True)
self.torol_gomb.clicked.connect(self._mind)
for g in (self.telepit_gomb, self.regiek_gomb, self.torol_gomb):
gombok.addWidget(g)
gombok.addStretch(1)
self.sor.addLayout(gombok)
def frissit(self):
if self.fut:
return
self._mutat()
gyorsitott("proton_ge", proton.legujabb, kesz=self._kiadas, hiba=lambda _: self._kiadas(None), kor=3600)
def _kiadas(self, kiadas):
self.kiadas = kiadas or self.kiadas
if not self.fut:
self._mutat()
def _mutat(self, szoveg=None):
lista = proton.telepitett()
van_steam = bool(proton.celmappak())
naprakesz = bool(self.kiadas and lista and lista[0] == self.kiadas["nev"])
if szoveg is None:
szoveg = f"Telepítve: {', '.join(lista)}" if lista else "Nincs telepítve."
if self.kiadas and not naprakesz:
szoveg += f" Legújabb: {self.kiadas['nev']}"
if not van_steam:
szoveg = "Nem található Steam. Telepítsd, és indítsd el egyszer."
self.jegyzet(szoveg)
self.telepit_gomb.setText("Naprakész" if naprakesz else "Legújabb telepítése")
self.telepit_gomb.setEnabled(not self.fut and not naprakesz and van_steam)
self.regiek_gomb.setVisible(bool(proton.regiek()))
self.regiek_gomb.setEnabled(not self.fut)
self.torol_gomb.setVisible(bool(lista))
self.torol_gomb.setEnabled(not self.fut)
def _telepit(self):
self.fut = True
self.sav.setValue(0)
self.sav.show()
self._mutat("Letöltés és ellenőrzés, ez néhány percig tarthat.")
hatterben(self._letolt, kesz=self._kesz, hiba=self._hiba)
def _letolt(self):
kiadas = self.kiadas or proton.legujabb()
proton.telepit(kiadas, self.jelzo.haladas.emit)
return kiadas
def _kesz(self, kiadas):
self.fut = False
self.kiadas = kiadas
self.sav.hide()
self._mutat()
def _hiba(self, uzenet):
self.fut = False
self.sav.hide()
self._mutat()
QMessageBox.warning(self.szulo, "Proton-GE", f"A telepítés nem sikerült: {uzenet}")
def _torles(self, parok, kerdes):
if not parok or QMessageBox.question(self.szulo, "Proton-GE", kerdes) != QMessageBox.StandardButton.Yes:
return
try:
for mappa, nev in parok:
proton.torol(nev, [mappa] if mappa else None)
except OSError as e:
QMessageBox.warning(self.szulo, "Proton-GE", f"A törlés nem sikerült: {e}")
self._mutat()
def _regiek(self):
parok = proton.regiek()
nevek = ", ".join(sorted({n for _, n in parok}))
self._torles(parok, f"Törlöd a régebbi verziókat ({nevek})? Minden Steam-telepítésben a legújabb megmarad.")
def _mind(self):
self._torles(
[(None, n) for n in proton.telepitett()],
"Törlöd az összes Proton-GE verziót? Az ezeket használó játékok a Steam alap Protonjára váltanak.",
)
class Gaming(QWidget):
def __init__(self, kozpont):
super().__init__()
self.kozpont = kozpont
self.adat = None
self.foglalt = False
self.hibauzenet = ""
doboz = QVBoxLayout(self)
doboz.setContentsMargins(0, 20, 0, 0)
doboz.setSpacing(16)
doboz.addWidget(
cimke(
"Játékhoz hasznos beállítások. Mindegyik bármikor visszakapcsolható. Az Áttekintés Gaming mód "
"kapcsolója a GameMode-ot, a performance governort, az NTSync-et és a játékra hangolt ütemezőt "
"kapcsolja egyszerre.",
"masodlagos",
True,
)
)
self.figyelem = cimke("", "figyelem", True)
self.figyelem.hide()
doboz.addWidget(self.figyelem)
kartya = Kartya(terkoz=0, margo=0)
self.sorok = {}
for i, (azon, nev, leiras) in enumerate(BEALLITASOK):
sor = BeallitasSor(azon, nev, leiras, self.valt, i == len(BEALLITASOK) - 1)
self.sorok[azon] = sor
kartya.elrendezes.addWidget(sor)
self.hud_mod = QComboBox()
for mod, nev in gaming.MANGOHUD_MODOK:
self.hud_mod.addItem(nev, mod)
self.hud_mod.activated.connect(self._hud_mod)
hud_sor = QHBoxLayout()
hud_sor.setSpacing(8)
hud_sor.addWidget(cimke("Kijelző:", "halvany"))
hud_sor.addWidget(self.hud_mod)
hud_sor.addStretch(1)
self.sorok["mangohud"].szovegek.addSpacing(6)
self.sorok["mangohud"].szovegek.addLayout(hud_sor)
doboz.addWidget(kartya)
doboz.addSpacing(8)
doboz.addWidget(cimke("PROTON VERZIÓK", "h2"))
proton_kartya = Kartya(terkoz=0, margo=0)
self.proton_ge = ProtonGeSor(self)
proton_kartya.elrendezes.addWidget(self.proton_ge)
self.sorok["proton_cachyos"] = BeallitasSor(
"proton_cachyos",
"Proton-CachyOS",
"A CachyOS Proton-változata a rendszer csomagkezelőjéből, a rendszerfrissítéssel együtt frissül. "
"Kb. 1,6 GB. A Steam újraindítása után választható.",
self.valt,
True,
)
proton_kartya.elrendezes.addWidget(self.sorok["proton_cachyos"])
doboz.addWidget(proton_kartya)
doboz.addStretch(1)
def megjelenik(self, *_):
self.frissit()
self.proton_ge.frissit()
def frissit(self):
if tarolt("gaming") is None:
self.foglalt = True
for sor in self.sorok.values():
sor.kapcsolo.setEnabled(False)
gyorsitott("gaming", gaming.allapot, kesz=self._kesz, hiba=lambda _: self._kesz(self.adat), kor=30)
def _kesz(self, adat):
self.foglalt = False
index = self.hud_mod.findData(gaming.mangohud_mod())
self.hud_mod.setCurrentIndex(max(0, index))
if adat is None:
self._figyelmeztet("Az állapot nem olvasható be, próbáld újra a fül újbóli megnyitásával.")
return
self.adat = adat
for azon, sor in self.sorok.items():
sor.beallit(adat[azon], self.foglalt)
if self.hibauzenet:
self._figyelmeztet(self.hibauzenet)
elif not muveletek.helper_elerheto():
self._figyelmeztet("A RaveOS Center rendszerhelpere nincs telepítve, a legtöbb beállítás nem módosítható.")
else:
self.figyelem.hide()
def _figyelmeztet(self, szoveg):
self.figyelem.setText(szoveg)
self.figyelem.show()
def _hud_mod(self):
try:
gaming.mangohud_mod_beallit(self.hud_mod.currentData())
except OSError as e:
QMessageBox.warning(self, "MangoHud", f"A beállítás nem sikerült: {e}")
def valt(self, azon, be):
self.alkalmaz([(azon, be)])
def alkalmaz(self, valtozasok):
self.hibauzenet = alkalmaz(self, valtozasok) or ""
ervenytelenit("gaming")
self.frissit()
FUL = Gaming
|