Meshroom/meshroom/ui/__main__.py
2018-01-15 14:34:57 +01:00

97 lines
3.7 KiB
Python

import os
import signal
import sys
from PySide2.QtCore import Qt, QObject, Slot
from PySide2.QtGui import QPalette, QColor, QIcon
from PySide2.QtWidgets import QApplication
from meshroom.ui.reconstruction import Reconstruction
from meshroom.ui.utils import QmlInstantEngine
from meshroom.ui import components
from meshroom.core import nodesDesc
class PaletteManager(QObject):
def __init__(self, qmlEngine, parent=None):
super(PaletteManager, self).__init__(parent)
self.qmlEngine = qmlEngine
darkPalette = QPalette()
window = QColor(50, 52, 55)
text = QColor(200, 200, 200)
disabledText = text.darker(170)
base = window.darker(150)
button = window.lighter(115)
dark = window.darker(170)
darkPalette.setColor(QPalette.Window, window)
darkPalette.setColor(QPalette.WindowText, text)
darkPalette.setColor(QPalette.Disabled, QPalette.WindowText, disabledText)
darkPalette.setColor(QPalette.Base, base)
darkPalette.setColor(QPalette.AlternateBase, QColor(46, 47, 48))
darkPalette.setColor(QPalette.ToolTipBase, base)
darkPalette.setColor(QPalette.ToolTipText, text)
darkPalette.setColor(QPalette.Text, text)
darkPalette.setColor(QPalette.Disabled, QPalette.Text, disabledText)
darkPalette.setColor(QPalette.Button, button)
darkPalette.setColor(QPalette.ButtonText, text)
darkPalette.setColor(QPalette.Disabled, QPalette.ButtonText, disabledText)
darkPalette.setColor(QPalette.Mid, button.lighter(120))
darkPalette.setColor(QPalette.Highlight, QColor(42, 130, 218))
darkPalette.setColor(QPalette.Disabled, QPalette.Highlight, QColor(80, 80, 80))
darkPalette.setColor(QPalette.HighlightedText, Qt.white)
darkPalette.setColor(QPalette.Disabled, QPalette.HighlightedText, QColor(127, 127, 127))
darkPalette.setColor(QPalette.Shadow, Qt.black)
self.darkPalette = darkPalette
self.defaultPalette = QApplication.instance().palette()
self.togglePalette()
@Slot()
def togglePalette(self):
app = QApplication.instance()
if app.palette() == self.darkPalette:
app.setPalette(self.defaultPalette)
else:
app.setPalette(self.darkPalette)
if self.qmlEngine.rootObjects():
self.qmlEngine.reload()
if __name__ == "__main__":
# Force exit on Keyboard Interrupt from command line (Ctrl+C)
signal.signal(signal.SIGINT, signal.SIG_DFL)
args = [sys.argv[0], '-style', 'fusion'] + sys.argv[1:] # force Fusion style as default
# use QApplication (QtWidgets) for Platform.FileDialog fallback on platform without native implementation
app = QApplication(args)
app.setOrganizationName('AliceVision')
app.setApplicationName('Meshroom')
app.setAttribute(Qt.AA_EnableHighDpiScaling)
pwd = os.path.dirname(__file__)
app.setWindowIcon(QIcon(os.path.join(pwd, "img/icon.png")))
qmlDir = os.path.join(pwd, "qml")
url = os.path.join(qmlDir, "main.qml")
engine = QmlInstantEngine()
engine.addFilesFromDirectory(qmlDir, recursive=True)
engine.setWatching(os.environ.get("MESHROOM_INSTANT_CODING", False))
engine.addImportPath(qmlDir)
components.registerTypes()
# expose available node types that can be instantiated
engine.rootContext().setContextProperty("_nodeTypes", sorted(nodesDesc.keys()))
r = Reconstruction(parent=app)
engine.rootContext().setContextProperty("_reconstruction", r)
pm = PaletteManager(engine, parent=app)
engine.rootContext().setContextProperty("_PaletteManager", pm)
# Request any potential computation to stop on exit
app.aboutToQuit.connect(r.stopExecution)
engine.load(os.path.normpath(url))
app.exec_()