Skip to content

Commit 58aa098

Browse files
authored
Merge pull request #2 from Boria138/patch-1
Added new logo and reboot for apply mode
2 parents d3ee697 + 50391d6 commit 58aa098

File tree

2 files changed

+95
-31
lines changed

2 files changed

+95
-31
lines changed

main/envycontrol_qt.py

Lines changed: 95 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,73 @@
11
import sys, os, re, subprocess
2-
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton, QLineEdit, QInputDialog, QSystemTrayIcon, QMenu
2+
from PyQt5.QtWidgets import (
3+
QApplication,
4+
QWidget,
5+
QLabel,
6+
QVBoxLayout,
7+
QPushButton,
8+
QLineEdit,
9+
QInputDialog,
10+
QSystemTrayIcon,
11+
QMenu,
12+
QMessageBox,
13+
)
314
from PyQt5.QtGui import QIcon
415
from PyQt5 import QtGui
516

617
current_dir = os.path.dirname(os.path.abspath(__file__))
718
isHybrid = True
819

9-
class EnvyControl(QWidget):
1020

21+
class EnvyControl(QWidget):
1122
def start_status(self):
12-
status_output = subprocess.check_output(['envycontrol', '-q']).decode().strip()
23+
status_output = subprocess.check_output(["envycontrol", "-q"]).decode().strip()
1324
keywords = ["hybrid", "integrated", "nvidia"]
1425
for keyword in keywords:
1526
if re.search(keyword, status_output, re.IGNORECASE):
1627
return keyword
1728
return "envycontrol -q output style was changed"
1829

30+
def reboot_system(self):
31+
message_box = QMessageBox()
32+
message_box.setText("A reboot is required to switch mode, reboot ?")
33+
message_box.setWindowTitle("Confirmation")
34+
message_box.setIcon(QMessageBox.Question)
35+
message_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
36+
37+
# Execute the message box and get the result
38+
result = message_box.exec()
39+
40+
def get_igpu_vendor():
41+
lspci_output = subprocess.check_output(["lspci"]).decode("utf-8")
42+
for line in lspci_output.splitlines():
43+
if "VGA compatible controller" in line or "Display controller" in line:
44+
if "Intel" in line:
45+
return "intel"
46+
elif "ATI" in line or "AMD" in line or "AMD/ATI" in line:
47+
return "amd"
48+
return None
49+
50+
# Check the result and act accordingly
51+
if result == QMessageBox.Yes:
52+
print("You clicked Yes reboot")
53+
subprocess.run(["sudo", "reboot"])
54+
elif result == QMessageBox.No:
55+
print("You clicked No")
1956

2057
def quit(self):
2158
sys.exit()
2259

60+
igpu_vendor = get_igpu_vendor()
2361

2462
def nvidia_tray(self):
2563
icon_start = self.start_status()
2664
global isHybrid
2765
if icon_start == "hybrid" and isHybrid == True:
28-
password, ok = QInputDialog.getText(self, 'Password', 'Enter your sudo password:', QLineEdit.Password)
66+
password, ok = QInputDialog.getText(
67+
self, "Password", "Enter your sudo password:", QLineEdit.Password
68+
)
2969
if ok:
30-
self.run_command('nvidia', password)
70+
self.run_command("nvidia", password)
3171
app_path = os.path.join(current_dir, "nvidia.png")
3272
icon = QtGui.QIcon(app_path)
3373
self.tray_icon.setIcon(QIcon(icon))
@@ -37,18 +77,21 @@ def nvidia_tray(self):
3777
isHybrid = False
3878

3979
def integrated_tray(self):
40-
password, ok = QInputDialog.getText(self, 'Password', 'Enter your sudo password:', QLineEdit.Password)
80+
password, ok = QInputDialog.getText(
81+
self, "Password", "Enter your sudo password:", QLineEdit.Password
82+
)
4183
if ok:
42-
self.run_command('integrated', password)
43-
app_path = os.path.join(current_dir, "integrated_amd.png")
84+
self.run_command("integrated", password)
4485
icon = QtGui.QIcon(app_path)
4586
self.tray_icon.setIcon(QIcon(icon))
4687
self.update_status()
4788

4889
def hybrid_tray(self):
49-
password, ok = QInputDialog.getText(self, 'Password', 'Enter your sudo password:', QLineEdit.Password)
90+
password, ok = QInputDialog.getText(
91+
self, "Password", "Enter your sudo password:", QLineEdit.Password
92+
)
5093
if ok:
51-
self.run_command('hybrid', password)
94+
self.run_command("hybrid --rtd3", password)
5295
app_path = os.path.join(current_dir, "hybrid.png")
5396
icon = QtGui.QIcon(app_path)
5497
self.tray_icon.setIcon(QIcon(icon))
@@ -59,20 +102,20 @@ def __init__(self):
59102
self.initUI()
60103

61104
def initUI(self):
62-
self.setWindowTitle('EnvyControl Qt')
105+
self.setWindowTitle("EnvyControl Qt")
63106
app_path = os.path.join(current_dir, "envycontrol.png")
64107
icon = QtGui.QIcon(app_path)
65108
self.setWindowIcon(icon)
66109
self.status_label = QLabel()
67110
self.update_status()
68111

69-
integrated_button = QPushButton('Integrated')
112+
integrated_button = QPushButton("Integrated")
70113
integrated_button.clicked.connect(self.on_integrated_clicked)
71114

72-
hybrid_button = QPushButton('Hybrid')
115+
hybrid_button = QPushButton("Hybrid")
73116
hybrid_button.clicked.connect(self.on_hybrid_clicked)
74117

75-
nvidia_button = QPushButton('Nvidia')
118+
nvidia_button = QPushButton("Nvidia")
76119
nvidia_button.clicked.connect(self.on_nvidia_clicked)
77120

78121
vbox = QVBoxLayout()
@@ -87,9 +130,12 @@ def initUI(self):
87130

88131
icon_start = self.start_status()
89132
if icon_start == "integrated":
90-
app_path = os.path.join(current_dir, "./integrated_amd.png")
91-
icon = QtGui.QIcon(app_path)
92-
self.tray_icon.setIcon(QIcon(icon))
133+
if igpu_vendor == "intel":
134+
app_path = os.path.join(current_dir, "./integrated_intel.png")
135+
elif igpu_vendor == "amd":
136+
app_path = os.path.join(current_dir, "./integrated_amd.png")
137+
icon = QtGui.QIcon(app_path)
138+
self.tray_icon.setIcon(QIcon(icon))
93139
elif icon_start == "hybrid":
94140
app_path = os.path.join(current_dir, "hybrid.png")
95141
icon = QtGui.QIcon(app_path)
@@ -104,60 +150,78 @@ def initUI(self):
104150
print(icon_start)
105151

106152
self.tray_menu = QMenu()
107-
self.tray_menu.addAction('Integrated', self.integrated_tray)
108-
self.tray_menu.addAction('Hybrid', self.hybrid_tray)
109-
self.tray_menu.addAction('Nvidia', self.nvidia_tray)
110-
self.tray_menu.addAction('Show', self.show)
111-
self.tray_menu.addAction('Quit', self.quit)
153+
self.tray_menu.addAction("Integrated", self.integrated_tray)
154+
self.tray_menu.addAction("Hybrid", self.hybrid_tray)
155+
self.tray_menu.addAction("Nvidia", self.nvidia_tray)
156+
self.tray_menu.addAction("Show", self.show)
157+
self.tray_menu.addAction("Quit", self.quit)
112158
self.tray_icon.setContextMenu(self.tray_menu)
113159

114160
def closeEvent(self, event):
115161
self.hide()
116162
event.ignore()
117163

118164
def on_integrated_clicked(self):
119-
password, ok = QInputDialog.getText(self, 'Password', 'Enter your sudo password:', QLineEdit.Password)
165+
password, ok = QInputDialog.getText(
166+
self, "Password", "Enter your sudo password:", QLineEdit.Password
167+
)
120168
if ok:
121-
self.run_command('integrated', password)
169+
self.run_command("integrated", password)
170+
if igpu_vendor == "intel":
171+
app_path = os.path.join(current_dir, "./integrated_intel.png")
172+
elif igpu_vendor == "amd":
122173
app_path = os.path.join(current_dir, "./integrated_amd.png")
123174
icon = QtGui.QIcon(app_path)
124175
self.tray_icon.setIcon(QIcon(icon))
125176
self.update_status()
177+
self.reboot_system()
126178

127179
def on_hybrid_clicked(self):
128-
password, ok = QInputDialog.getText(self, 'Password', 'Enter your sudo password:', QLineEdit.Password)
180+
password, ok = QInputDialog.getText(
181+
self, "Password", "Enter your sudo password:", QLineEdit.Password
182+
)
129183
if ok:
130-
self.run_command('hybrid', password)
184+
self.run_command("hybrid", password)
131185
app_path = os.path.join(current_dir, "hybrid.png")
132186
icon = QtGui.QIcon(app_path)
133187
self.tray_icon.setIcon(QIcon(icon))
134188
self.update_status()
189+
self.reboot_system()
135190

136191
def on_nvidia_clicked(self):
137192
icon_start = self.start_status()
138193
global isHybrid
139194
if icon_start == "hybrid" and isHybrid == True:
140-
password, ok = QInputDialog.getText(self, 'Password', 'Enter your sudo password:', QLineEdit.Password)
195+
password, ok = QInputDialog.getText(
196+
self, "Password", "Enter your sudo password:", QLineEdit.Password
197+
)
141198
if ok:
142-
self.run_command('nvidia', password)
199+
self.run_command("nvidia", password)
143200
app_path = os.path.join(current_dir, "nvidia.png")
144201
icon = QtGui.QIcon(app_path)
145202
self.tray_icon.setIcon(QIcon(icon))
203+
self.reboot_system()
146204
else:
147205
status = "Try switching to hybrid mode first!"
148206
self.status_label.setText(status)
149207
isHybrid = False
150208

151209
def update_status(self):
152-
result = subprocess.check_output(['envycontrol', '-q'])
210+
result = subprocess.check_output(["envycontrol", "-q"])
153211
status = result.strip().decode()
154212
self.status_label.setText(status)
155213

156214
def run_command(self, mode, password):
157-
p = subprocess.Popen(['sudo', '-S', 'envycontrol', '-s', mode], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
215+
p = subprocess.Popen(
216+
["sudo", "-S", "envycontrol", "-s", mode],
217+
stdout=subprocess.PIPE,
218+
stdin=subprocess.PIPE,
219+
stderr=subprocess.PIPE,
220+
)
158221
stdout, stderr = p.communicate(input=password.encode())
159222

160-
if __name__ == '__main__':
223+
224+
if __name__ == "__main__":
161225
app = QApplication(sys.argv)
162226
envy = EnvyControl()
163227
envy.show()

main/integrated_intel.png

22.3 KB
Loading

0 commit comments

Comments
 (0)