1
0
Fork 0
mirror of https://github.com/kbumsik/VirtScreen.git synced 2025-02-13 03:41:50 +00:00
VirtScreen/virtscreen.py

128 lines
3.8 KiB
Python
Raw Normal View History

2018-04-25 19:14:11 +00:00
#!/usr/bin/env python
import sys, os
2018-05-07 00:11:30 +00:00
from enum import Enum
2018-04-25 19:14:11 +00:00
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QObject, QUrl, Qt
from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtQml import qmlRegisterType, QQmlApplicationEngine
2018-04-26 18:45:10 +00:00
#-------------------------------------------------------------------------------
2018-04-26 17:32:08 +00:00
# file path definitions
#-------------------------------------------------------------------------------
2018-04-26 17:32:08 +00:00
PROGRAM_PATH = "."
ICON_PATH = PROGRAM_PATH + "/icon/icon.png"
ICON_TABLET_OFF_PATH = PROGRAM_PATH + "/icon/icon_tablet_off.png"
ICON_TABLET_ON_PATH = PROGRAM_PATH + "/icon/icon_tablet_on.png"
2018-04-26 08:32:44 +00:00
#-------------------------------------------------------------------------------
# QML Backend class
2018-04-26 18:45:10 +00:00
#-------------------------------------------------------------------------------
2018-05-07 00:11:30 +00:00
class VNCState(Enum):
""" Enum to indicate a state of the VNC server """
OFF = "Off"
WAITING = "Waiting"
CONNECTED = "Connected"
class Backend(QObject):
2018-05-07 00:11:30 +00:00
""" Backend class for QML frontend """
# Signals
width_changed = pyqtSignal(int)
virtScreenChanged = pyqtSignal(bool)
2018-05-07 00:11:30 +00:00
vncChanged = pyqtSignal(str)
def __init__(self, parent=None):
super(Backend, self).__init__(parent)
# Virtual screen properties
self._width = 1368
self._height = 1024
self._portrait = True
self._hidpi = False
self._virtScreenCreated = False
# VNC server properties
self._vncPort = 5900
self._vncPassword = ""
2018-05-07 00:11:30 +00:00
self._vncState = VNCState.OFF
# Qt properties
@pyqtProperty(int, notify=width_changed)
def width(self):
return self._width
@width.setter
def width(self, width):
self._width = width
self.width_changed.emit(self._width)
2018-04-25 19:14:11 +00:00
@pyqtProperty(int)
def height(self):
return self._height
@height.setter
def height(self, height):
self._height = height
@pyqtProperty(bool)
def portrait(self):
return self._portrait
@portrait.setter
def portrait(self, portrait):
self._portrait = portrait
@pyqtProperty(bool)
def hidpi(self):
return self._hidpi
@hidpi.setter
def hidpi(self, hidpi):
self._hidpi = hidpi
2018-04-25 19:14:11 +00:00
@pyqtProperty(bool)
def virtScreenCreated(self):
return self._virtScreenCreated
2018-04-25 19:14:11 +00:00
@pyqtProperty(int)
def vncPort(self):
return self._vncPort
@vncPort.setter
def vncPort(self, vncPort):
self._vncPort = vncPort
@pyqtProperty(str)
def vncPassword(self):
return self._vncPassword
@vncPassword.setter
def vncPassword(self, vncPassword):
self._vncPassword = vncPassword
print(self._vncPassword)
2018-05-07 00:11:30 +00:00
@pyqtProperty(str)
def vncState(self):
return self._vncState.value
# Qt Slots
2018-04-26 04:55:37 +00:00
@pyqtSlot()
def quitProgram(self):
QApplication.instance().quit()
2018-04-25 19:14:11 +00:00
#-------------------------------------------------------------------------------
# Main Code
#-------------------------------------------------------------------------------
if __name__ == '__main__':
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
2018-04-25 19:14:11 +00:00
app = QApplication(sys.argv)
app.setWindowIcon(QIcon(ICON_PATH))
# os.environ["QT_QUICK_CONTROLS_STYLE"] = "Material"
os.environ["QT_QUICK_CONTROLS_STYLE"] = "Fusion"
# Register the Python type. Its URI is 'People', it's v1.0 and the type
# will be called 'Person' in QML.
qmlRegisterType(Backend, 'VirtScreen.Backend', 1, 0, 'Backend')
# Create a component factory and load the QML script.
engine = QQmlApplicationEngine()
engine.load(QUrl('main.qml'))
if not engine.rootObjects():
print("Failed to load qml")
exit(1)
2018-04-25 19:14:11 +00:00
sys.exit(app.exec_())