diff --git a/main.qml b/main.qml index 38e5633..619321e 100644 --- a/main.qml +++ b/main.qml @@ -152,17 +152,8 @@ ApplicationWindow { anchors.leftMargin: 120 textRole: "name" - model: [] - - Component.onCompleted: { - var screens = backend.screens; - var list = []; - for (var i = 0; i < screens.length; i++) { - list.push(screens[i]); - } - deviceComboBox.model = list; - deviceComboBox.currentIndex = backend.virtScreenIndex - } + model: backend.screens + currentIndex: backend.virtScreenIndex onActivated: function(index) { backend.virtScreenIndex = index @@ -287,6 +278,18 @@ ApplicationWindow { // Material.foreground: Material.Grey onClicked: backend.vncState == Backend.OFF ? backend.startVNC() : backend.stopVNC() } + + ListView { + // width: 180; + height: 200 + anchors.left: parent.left + anchors.right: parent.right + + model: backend.ipAddresses + delegate: Text { + text: modelData + } + } } } diff --git a/virtscreen.py b/virtscreen.py index c7ae20d..3c2568f 100755 --- a/virtscreen.py +++ b/virtscreen.py @@ -329,7 +329,9 @@ class Backend(QObject): # Signals onVirtScreenCreatedChanged = pyqtSignal(bool) + onVirtScreenIndexChanged = pyqtSignal(int) onVncStateChanged = pyqtSignal(VNCState) + onIPAddressesChanged = pyqtSignal() def __init__(self, parent=None): super(Backend, self).__init__(parent) @@ -348,6 +350,8 @@ class Backend(QObject): self._vncPort = 5900 self._vncPassword = "" self._vncState = Backend.VNCState.OFF + self._ipAddresses: List[str] = [] + self.updateIPAddresses() # Primary screen and mouse posistion self._primary: DisplayProperty() = self.xrandr.get_primary_screen() self._cursor_x: int @@ -387,7 +391,7 @@ class Backend(QObject): def screens(self): return QQmlListProperty(DisplayProperty, self, self._screens) - @pyqtProperty(int) + @pyqtProperty(int, notify=onVirtScreenIndexChanged) def virtScreenIndex(self): return self._virtScreenIndex @virtScreenIndex.setter @@ -418,6 +422,10 @@ class Backend(QObject): def vncState(self, state): self._vncState = state self.onVncStateChanged.emit(self._vncState) + + @pyqtProperty('QStringList', notify=onIPAddressesChanged) + def ipAddresses(self): + return self._ipAddresses @pyqtProperty(DisplayProperty) def primary(self): @@ -507,6 +515,20 @@ class Backend(QObject): else: print("stopVNC called while it is not running") + @pyqtSlot() + def updateIPAddresses(self): + self._ipAddresses.clear() + for interface in interfaces(): + if interface == 'lo': + continue + addresses = ifaddresses(interface).get(AF_INET, None) + if addresses is None: + continue + for link in addresses: + if link is not None: + self._ipAddresses.append(link['addr']) + self.onIPAddressesChanged.emit() + @pyqtSlot() def quitProgram(self): QApplication.instance().quit()