mirror of
https://github.com/ralsina/xrandroll.git
synced 2024-11-21 18:42:22 +00:00
List monitors to replicate
This commit is contained in:
parent
d71a677ee9
commit
df71c4ba28
66
main.py
66
main.py
@ -13,7 +13,7 @@ def parse_monitor(line):
|
|||||||
parts = line.split()
|
parts = line.split()
|
||||||
name = parts[0]
|
name = parts[0]
|
||||||
primary = "primary" in parts
|
primary = "primary" in parts
|
||||||
if '+' in line: # Is enabled
|
if "+" in line: # Is enabled
|
||||||
enabled = True
|
enabled = True
|
||||||
res_x, res_y = [p for p in parts if "x" in p][0].split("+")[0].split("x")
|
res_x, res_y = [p for p in parts if "x" in p][0].split("+")[0].split("x")
|
||||||
pos_x, pos_y = [p for p in parts if "x" in p][0].split("+")[1:]
|
pos_x, pos_y = [p for p in parts if "x" in p][0].split("+")[1:]
|
||||||
@ -30,7 +30,7 @@ def parse_monitor(line):
|
|||||||
int(h_in_mm),
|
int(h_in_mm),
|
||||||
int(pos_x),
|
int(pos_x),
|
||||||
int(pos_y),
|
int(pos_y),
|
||||||
enabled
|
enabled,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -55,7 +55,14 @@ class Window(QObject):
|
|||||||
|
|
||||||
for name, monitor in self.xrandr_info.items():
|
for name, monitor in self.xrandr_info.items():
|
||||||
self.ui.screenCombo.addItem(name)
|
self.ui.screenCombo.addItem(name)
|
||||||
mon_item = MonitorItem(0, 0, monitor["res_x"], monitor["res_y"], name=name, primary=monitor['primary'])
|
mon_item = MonitorItem(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
monitor["res_x"],
|
||||||
|
monitor["res_y"],
|
||||||
|
name=name,
|
||||||
|
primary=monitor["primary"],
|
||||||
|
)
|
||||||
mon_item.setPos(monitor["pos_x"], monitor["pos_y"])
|
mon_item.setPos(monitor["pos_x"], monitor["pos_y"])
|
||||||
self.scene.addItem(mon_item)
|
self.scene.addItem(mon_item)
|
||||||
monitor["item"] = mon_item
|
monitor["item"] = mon_item
|
||||||
@ -74,9 +81,17 @@ class Window(QObject):
|
|||||||
name = None
|
name = None
|
||||||
for line in data:
|
for line in data:
|
||||||
if line and line[0] not in "S \t": # Output line
|
if line and line[0] not in "S \t": # Output line
|
||||||
name, primary, res_x, res_y, w_in_mm, h_in_mm, pos_x, pos_y, enabled = parse_monitor(
|
(
|
||||||
line
|
name,
|
||||||
)
|
primary,
|
||||||
|
res_x,
|
||||||
|
res_y,
|
||||||
|
w_in_mm,
|
||||||
|
h_in_mm,
|
||||||
|
pos_x,
|
||||||
|
pos_y,
|
||||||
|
enabled,
|
||||||
|
) = parse_monitor(line)
|
||||||
self.xrandr_info[name] = dict(
|
self.xrandr_info[name] = dict(
|
||||||
primary=primary,
|
primary=primary,
|
||||||
res_x=res_x,
|
res_x=res_x,
|
||||||
@ -89,30 +104,39 @@ class Window(QObject):
|
|||||||
current_mode=None,
|
current_mode=None,
|
||||||
enabled=enabled,
|
enabled=enabled,
|
||||||
)
|
)
|
||||||
elif line[0] == ' ': # A mode
|
elif line[0] == " ": # A mode
|
||||||
mode_name = line.strip().split()[0]
|
mode_name = line.strip().split()[0]
|
||||||
self.xrandr_info[name]['modes'].append(mode_name)
|
self.xrandr_info[name]["modes"].append(mode_name)
|
||||||
if '*' in line:
|
if "*" in line:
|
||||||
print(f'Current mode for {name}: {mode_name}')
|
print(f"Current mode for {name}: {mode_name}")
|
||||||
self.xrandr_info[name]['current_mode'] = mode_name
|
self.xrandr_info[name]["current_mode"] = mode_name
|
||||||
|
|
||||||
def monitor_selected(self, name):
|
def monitor_selected(self, name):
|
||||||
# Show modes
|
# Show modes
|
||||||
self.ui.modes.clear()
|
self.ui.modes.clear()
|
||||||
for mode in self.xrandr_info[name]['modes']:
|
for mode in self.xrandr_info[name]["modes"]:
|
||||||
self.ui.modes.addItem(mode)
|
self.ui.modes.addItem(mode)
|
||||||
self.ui.modes.setCurrentText(self.xrandr_info[name]['current_mode'])
|
self.ui.modes.setCurrentText(self.xrandr_info[name]["current_mode"])
|
||||||
mod_x, mod_y = [int(x) for x in self.xrandr_info[name]['current_mode'].split('x')]
|
mod_x, mod_y = [
|
||||||
h_scale = self.xrandr_info[name]['res_x'] / mod_x
|
int(x) for x in self.xrandr_info[name]["current_mode"].split("x")
|
||||||
v_scale = self.xrandr_info[name]['res_y'] / mod_y
|
]
|
||||||
|
h_scale = self.xrandr_info[name]["res_x"] / mod_x
|
||||||
|
v_scale = self.xrandr_info[name]["res_y"] / mod_y
|
||||||
self.ui.horizontalScale.setValue(h_scale * 100)
|
self.ui.horizontalScale.setValue(h_scale * 100)
|
||||||
self.ui.verticalScale.setValue(v_scale * 100)
|
self.ui.verticalScale.setValue(v_scale * 100)
|
||||||
self.ui.primary.setChecked(self.xrandr_info[name]['primary'])
|
self.ui.primary.setChecked(self.xrandr_info[name]["primary"])
|
||||||
self.ui.enabled.setChecked(self.xrandr_info[name]['enabled'])
|
self.ui.enabled.setChecked(self.xrandr_info[name]["enabled"])
|
||||||
|
|
||||||
|
self.ui.replicaOf.clear()
|
||||||
|
self.ui.replicaOf.addItem("None")
|
||||||
|
for mon in self.xrandr_info:
|
||||||
|
if mon != name:
|
||||||
|
self.ui.replicaOf.addItem(mon)
|
||||||
|
|
||||||
def updateScaleLabels(self):
|
def updateScaleLabels(self):
|
||||||
self.ui.horizontalScaleLabel.setText(f'{self.ui.horizontalScale.value()}%')
|
self.ui.horizontalScaleLabel.setText(f"{self.ui.horizontalScale.value()}%")
|
||||||
self.ui.verticalScaleLabel.setText(f'{self.ui.verticalScale.value()}%')
|
self.ui.verticalScaleLabel.setText(f"{self.ui.verticalScale.value()}%")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
|
Loading…
Reference in New Issue
Block a user