Integrating up through commit 90f050496

This commit is contained in:
alexpete
2021-04-07 14:03:29 -07:00
parent 8f2ed080a9
commit c2cbd430fe
2694 changed files with 285622 additions and 176874 deletions
@@ -0,0 +1,93 @@
# -*- coding: utf-8 -*-
# !/usr/bin/python
#
# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
# its licensors.
#
# For complete copyright and license terms please see the LICENSE at the root of this
# distribution (the "License"). All use of this software is governed by the License,
# or, if provided, by the license below or the license accompanying this file. Do not
# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#
# -------------------------------------------------------------------------
# https://gist.github.com/blubberdiblub/007bb92991d01ad29877931f75260b39
import sys
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QProcess, QTextCodec
from PyQt5.QtGui import QTextCursor
from PyQt5.QtWidgets import QApplication, QPlainTextEdit
class ProcessOutputReader(QProcess):
produce_output = pyqtSignal(str)
def __init__(self, parent=None):
super().__init__(parent=parent)
# merge stderr channel into stdout channel
self.setProcessChannelMode(QProcess.MergedChannels)
# prepare decoding process' output to Unicode
codec = QTextCodec.codecForLocale()
self._decoder_stdout = codec.makeDecoder()
# only necessary when stderr channel isn't merged into stdout:
# self._decoder_stderr = codec.makeDecoder()
self.readyReadStandardOutput.connect(self._ready_read_standard_output)
# only necessary when stderr channel isn't merged into stdout:
# self.readyReadStandardError.connect(self._ready_read_standard_error)
@pyqtSlot()
def _ready_read_standard_output(self):
raw_bytes = self.readAllStandardOutput()
text = self._decoder_stdout.toUnicode(raw_bytes)
self.produce_output.emit(text)
# only necessary when stderr channel isn't merged into stdout:
# @pyqtSlot()
# def _ready_read_standard_error(self):
# raw_bytes = self.readAllStandardError()
# text = self._decoder_stderr.toUnicode(raw_bytes)
# self.produce_output.emit(text)
class MyConsole(QPlainTextEdit):
def __init__(self, parent=None):
super().__init__(parent=parent)
self.setReadOnly(True)
self.setMaximumBlockCount(10000) # limit console to 10000 lines
self._cursor_output = self.textCursor()
@pyqtSlot(str)
def append_output(self, text):
self._cursor_output.insertText(text)
self.scroll_to_last_line()
def scroll_to_last_line(self):
cursor = self.textCursor()
cursor.movePosition(QTextCursor.End)
cursor.movePosition(QTextCursor.Up if cursor.atBlockStart() else
QTextCursor.StartOfLine)
self.setTextCursor(cursor)
# create the application instance
app = QApplication(sys.argv)
# create a process output reader
reader = ProcessOutputReader()
# create a console and connect the process output reader to it
console = MyConsole()
reader.produce_output.connect(console.append_output)
reader.start('python', ['-u', 'C:\\dccapi\\dev\\Gems\\DccScriptingInterface\\LyPy\\si_substance\\builder\\watchdog'
'\\__init__.py', 'C:\\Users\\chunghao\\Documents\\Allegorithmic\\Substance Designer'
'\\sbsar']) # start the process
console.show() # make the console visible
app.exec_() # run the PyQt main loop
@@ -0,0 +1,99 @@
# -*- coding: utf-8 -*-
# !/usr/bin/python
#
# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
# its licensors.
#
# For complete copyright and license terms please see the LICENSE at the root of this
# distribution (the "License"). All use of this software is governed by the License,
# or, if provided, by the license below or the license accompanying this file. Do not
# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#
# -------------------------------------------------------------------------
import sys
from PySide2.QtCore import QProcess, Signal, Slot, QTextCodec
from PySide2.QtGui import QTextCursor
from PySide2.QtWidgets import QApplication, QPlainTextEdit
from PySide2.QtCore import QTimer
class ProcessOutputReader(QProcess):
produce_output = Signal(str)
def __init__(self, parent=None):
super().__init__(parent=parent)
# merge stderr channel into stdout channel
self.setProcessChannelMode(QProcess.MergedChannels)
# prepare decoding process' output to Unicode
self._codec = QTextCodec.codecForLocale()
self._decoder_stdout = self._codec.makeDecoder()
# only necessary when stderr channel isn't merged into stdout:
# self._decoder_stderr = codec.makeDecoder()
self.readyReadStandardOutput.connect(self._ready_read_standard_output)
# only necessary when stderr channel isn't merged into stdout:
# self.readyReadStandardError.connect(self._ready_read_standard_error)
@Slot()
def _ready_read_standard_output(self):
raw_bytes = self.readAllStandardOutput()
text = self._decoder_stdout.toUnicode(raw_bytes)
self.produce_output.emit(text)
# only necessary when stderr channel isn't merged into stdout:
# @Slot()
# def _ready_read_standard_error(self):
# raw_bytes = self.readAllStandardError()
# text = self._decoder_stderr.toUnicode(raw_bytes)
# self.produce_output.emit(text)
class MyConsole(QPlainTextEdit):
def __init__(self, parent=None):
super().__init__(parent=parent)
self.setReadOnly(True)
self.setMaximumBlockCount(10000) # limit console to 10000 lines
self._cursor_output = self.textCursor()
@Slot(str)
def append_output(self, text):
self._cursor_output.insertText(text)
self.scroll_to_last_line()
def scroll_to_last_line(self):
cursor = self.textCursor()
cursor.movePosition(QTextCursor.End)
cursor.movePosition(QTextCursor.Up if cursor.atBlockStart() else
QTextCursor.StartOfLine)
self.setTextCursor(cursor)
def output_text(self, text):
self._cursor_output.insertText(text)
self.scroll_to_last_line()
# create the application instance
app = QApplication(sys.argv)
# create a process output reader
reader = ProcessOutputReader()
# create a console and connect the process output reader to it
console = MyConsole()
reader.produce_output.connect(console.append_output)
reader.start('python', ['-u', 'C:\\dccapi\\dev\\Gems\\DccScriptingInterface\\LyPy\\si_substance\\builder\\watchdog'
'\\__init__.py', 'C:\\Users\\chunghao\\Documents\\Allegorithmic\\Substance Designer'
'\\sbsar']) # start the process
console.show() # make the console visible
# app.exec_() # run the PyQt main loop
timer = QTimer()
timer.timeout.connect(lambda: None)
timer.start(100)
sys.exit(app.exec_())
@@ -0,0 +1,79 @@
# -*- coding: utf-8 -*-
# !/usr/bin/python
#
# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
# its licensors.
#
# For complete copyright and license terms please see the LICENSE at the root of this
# distribution (the "License"). All use of this software is governed by the License,
# or, if provided, by the license below or the license accompanying this file. Do not
# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#
# -------------------------------------------------------------------------
import os
import sys
from PySide2.QtCore import QFile, QSize
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication, QSizePolicy
from PySide2.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QHBoxLayout
_MODULE_DIR_PATH = os.path.dirname(os.path.abspath(__file__))
_UI_FILEPATH = "{0}\\\\sbs_builder_widget.ui".format(_MODULE_DIR_PATH)
_PROGRAM_NAME_VERSION = 'Substance Builder'
class UiLoader(QUiLoader):
def __init__(self, baseInstance):
super(UiLoader, self).__init__(baseInstance)
self._baseInstance = baseInstance
def createWidget(self, classname, parent=None, name=""):
widget = super(UiLoader, self).createWidget(
classname, parent, name)
if parent is None:
return self._baseInstance
else:
setattr(self._baseInstance, name, widget)
return widget
class MainWindow(QMainWindow):
def __init__(self, ui_file=_UI_FILEPATH, parent=None):
super().__init__(parent)
# Setup central widget and layout
self.central_widget = QWidget()
self.central_layout = QVBoxLayout(self.central_widget)
self.central_layout.setContentsMargins(8, 8, 8, 8)
self.setCentralWidget(self.central_widget)
self.setup_layout(ui_file)
self.setMinimumSize(QSize(675, 825))
def setup_layout(self, ui_file):
self.layout = QHBoxLayout()
self.widget = MyWidget(ui_file, self)
self.widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.layout.addWidget(self.widget)
self.central_layout.addLayout(self.layout)
class MyWidget(QWidget):
def __init__(self, ui_file=_UI_FILEPATH, parent=None):
super().__init__(parent)
loader = UiLoader(parent)
file = QFile(ui_file)
file.open(QFile.ReadOnly)
loader.load(file, self)
file.close()
if __name__ == "__main__":
app = QApplication(sys.argv)
mainWindow = MainWindow(_UI_FILEPATH)
mainWindow.setWindowTitle(_PROGRAM_NAME_VERSION)
mainWindow.show()
sys.exit(app.exec_())
@@ -0,0 +1,565 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>560</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>560</height>
</size>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="minimumSize">
<size>
<width>0</width>
<height>240</height>
</size>
</property>
<property name="title">
<string>Watcher</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<widget class="QLineEdit" name="lineEdit">
<property name="geometry">
<rect>
<x>122</x>
<y>44</y>
<width>211</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Watch folder</string>
</property>
</widget>
<widget class="QToolButton" name="toolButton">
<property name="geometry">
<rect>
<x>340</x>
<y>44</y>
<width>25</width>
<height>19</height>
</rect>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>24</x>
<y>70</y>
<width>92</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Wacher Extensions</string>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>24</x>
<y>44</y>
<width>64</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Wacher Foler</string>
</property>
</widget>
<widget class="QRadioButton" name="radioButton">
<property name="geometry">
<rect>
<x>24</x>
<y>21</y>
<width>81</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string> On / Off</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_2">
<property name="geometry">
<rect>
<x>122</x>
<y>70</y>
<width>211</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>*.sbsar, *.sbs</string>
</property>
</widget>
<widget class="QTextEdit" name="textEdit">
<property name="geometry">
<rect>
<x>30</x>
<y>100</y>
<width>331</width>
<height>131</height>
</rect>
</property>
</widget>
</widget>
</item>
<item row="2" column="0">
<widget class="QGroupBox" name="groupBox_2">
<property name="minimumSize">
<size>
<width>0</width>
<height>280</height>
</size>
</property>
<property name="title">
<string>SBSAR</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
<widget class="QLabel" name="label_9">
<property name="geometry">
<rect>
<x>20</x>
<y>150</y>
<width>70</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>RandomSeed</string>
</property>
</widget>
<widget class="Line" name="line">
<property name="geometry">
<rect>
<x>120</x>
<y>50</y>
<width>20</width>
<height>161</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>240</x>
<y>100</y>
<width>121</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Create .material</string>
</property>
</widget>
<widget class="QCheckBox" name="checkBox_8">
<property name="geometry">
<rect>
<x>140</x>
<y>150</y>
<width>70</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Glossness</string>
</property>
</widget>
<widget class="QLabel" name="label_8">
<property name="geometry">
<rect>
<x>20</x>
<y>100</y>
<width>21</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Size</string>
</property>
</widget>
<widget class="QLabel" name="label_10">
<property name="geometry">
<rect>
<x>240</x>
<y>50</y>
<width>47</width>
<height>13</height>
</rect>
</property>
<property name="text">
<string>Name</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>20</x>
<y>30</y>
<width>41</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Preset</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>240</x>
<y>190</y>
<width>121</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Render textures</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_4">
<property name="geometry">
<rect>
<x>20</x>
<y>240</y>
<width>181</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_6">
<property name="geometry">
<rect>
<x>240</x>
<y>30</y>
<width>71</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Atom Material</string>
</property>
</widget>
<widget class="QCheckBox" name="checkBox_4">
<property name="geometry">
<rect>
<x>140</x>
<y>190</y>
<width>70</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Opacity</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
<widget class="QCheckBox" name="checkBox_5">
<property name="geometry">
<rect>
<x>140</x>
<y>170</y>
<width>81</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Roughness</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
<widget class="QComboBox" name="comboBox_2">
<property name="geometry">
<rect>
<x>20</x>
<y>120</y>
<width>101</width>
<height>22</height>
</rect>
</property>
<item>
<property name="text">
<string> 512 * 512</string>
</property>
</item>
<item>
<property name="text">
<string>1024 * 1024</string>
</property>
</item>
<item>
<property name="text">
<string>2048 * 2048</string>
</property>
</item>
</widget>
<widget class="QLineEdit" name="lineEdit_3">
<property name="geometry">
<rect>
<x>240</x>
<y>70</y>
<width>121</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>140</x>
<y>30</y>
<width>41</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Output</string>
</property>
</widget>
<widget class="QComboBox" name="comboBox">
<property name="geometry">
<rect>
<x>20</x>
<y>50</y>
<width>101</width>
<height>22</height>
</rect>
</property>
<item>
<property name="text">
<string>Grey Stone</string>
</property>
</item>
<item>
<property name="text">
<string>Red Coral</string>
</property>
</item>
<item>
<property name="text">
<string>Red Stone</string>
</property>
</item>
</widget>
<widget class="QToolButton" name="toolButton_2">
<property name="geometry">
<rect>
<x>210</x>
<y>240</y>
<width>25</width>
<height>19</height>
</rect>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
<widget class="Line" name="line_4">
<property name="geometry">
<rect>
<x>10</x>
<y>210</y>
<width>361</width>
<height>20</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QCheckBox" name="checkBox_7">
<property name="geometry">
<rect>
<x>140</x>
<y>90</y>
<width>70</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Specular</string>
</property>
</widget>
<widget class="QCheckBox" name="checkBox_2">
<property name="geometry">
<rect>
<x>140</x>
<y>110</y>
<width>70</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Metallic</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
<widget class="QCheckBox" name="checkBox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>140</x>
<y>50</y>
<width>71</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Base Color</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="pushButton_3">
<property name="geometry">
<rect>
<x>240</x>
<y>240</y>
<width>121</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Bake SBSAR from SBS</string>
</property>
</widget>
<widget class="QCheckBox" name="checkBox_3">
<property name="geometry">
<rect>
<x>140</x>
<y>130</y>
<width>81</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Normal map</string>
</property>
</widget>
<widget class="Line" name="line_2">
<property name="geometry">
<rect>
<x>220</x>
<y>50</y>
<width>20</width>
<height>161</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
<widget class="QLabel" name="label_7">
<property name="geometry">
<rect>
<x>20</x>
<y>80</y>
<width>91</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Parameters</string>
</property>
</widget>
<widget class="QSpinBox" name="spinBox">
<property name="geometry">
<rect>
<x>20</x>
<y>170</y>
<width>101</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QCheckBox" name="checkBox_6">
<property name="geometry">
<rect>
<x>140</x>
<y>70</y>
<width>70</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Albedo</string>
</property>
</widget>
</widget>
</item>
<item row="1" column="0">
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>toolButton</sender>
<signal>pressed()</signal>
<receiver>lineEdit</receiver>
<slot>clear()</slot>
<hints>
<hint type="sourcelabel">
<x>362</x>
<y>63</y>
</hint>
<hint type="destinationlabel">
<x>237</x>
<y>63</y>
</hint>
</hints>
</connection>
</connections>
</ui>
@@ -0,0 +1,494 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>651</width>
<height>807</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Watcher</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QRadioButton" name="radioButton_2">
<property name="text">
<string> On / Off</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Wacher Foler</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit_6">
<property name="text">
<string>Watch folder</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QToolButton" name="toolButton_3">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Wacher Extensions</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lineEdit_7">
<property name="text">
<string>*.sbsar, *.sbs</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QTextEdit" name="textEdit_2"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Sbsar</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QTableWidget" name="tableWidget_fileslist">
<property name="columnCount">
<number>1</number>
</property>
<attribute name="horizontalHeaderVisible">
<bool>true</bool>
</attribute>
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>100</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>20</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<row>
<property name="text">
<string>Item #01</string>
</property>
<property name="font">
<font>
<underline>false</underline>
<strikeout>false</strikeout>
<stylestrategy>PreferDefault</stylestrategy>
</font>
</property>
</row>
<row>
<property name="text">
<string>Item #02</string>
</property>
</row>
<row>
<property name="text">
<string>Item #03</string>
</property>
</row>
<row>
<property name="text">
<string>Item #04</string>
</property>
</row>
<row>
<property name="text">
<string>Item #05</string>
</property>
</row>
<row>
<property name="text">
<string>Item #06</string>
</property>
</row>
<row>
<property name="text">
<string>Item #07</string>
</property>
</row>
<row>
<property name="text">
<string>Item #08</string>
</property>
</row>
<column>
<property name="text">
<string>File Path</string>
</property>
</column>
<item row="0" column="0">
<property name="text">
<string>C:\Users\chunghao\Documents\Allegorithmic\Substance Designer\sbsar\item01.sbsar</string>
</property>
</item>
<item row="1" column="0">
<property name="text">
<string>C:\Users\chunghao\Documents\Allegorithmic\Substance Designer\sbsar\item02.sbsar</string>
</property>
</item>
<item row="2" column="0">
<property name="text">
<string>C:\Users\chunghao\Documents\Allegorithmic\Substance Designer\sbsar\item03.sbsar</string>
</property>
</item>
<item row="3" column="0">
<property name="text">
<string>C:\Users\chunghao\Documents\Allegorithmic\Substance Designer\sbsar\item04.sbsar</string>
</property>
</item>
<item row="4" column="0">
<property name="text">
<string>C:\Users\chunghao\Documents\Allegorithmic\Substance Designer\sbsar\item05.sbsar</string>
</property>
</item>
<item row="5" column="0">
<property name="text">
<string>C:\Users\chunghao\Documents\Allegorithmic\Substance Designer\sbsar\item06.sbsar</string>
</property>
</item>
<item row="6" column="0">
<property name="text">
<string>C:\Users\chunghao\Documents\Allegorithmic\Substance Designer\sbsar\item07.sbsar</string>
</property>
</item>
<item row="7" column="0">
<property name="text">
<string>C:\Users\chunghao\Documents\Allegorithmic\Substance Designer\sbsar\item08.sbsar</string>
</property>
</item>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox_parameters">
<property name="title">
<string>Parameters</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QLabel" name="label_14">
<property name="text">
<string>Preset</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_15">
<property name="text">
<string>Size</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_16">
<property name="text">
<string>RandomSeed</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="QComboBox" name="comboBox_3">
<item>
<property name="text">
<string>Grey Stone</string>
</property>
</item>
<item>
<property name="text">
<string>Red Coral</string>
</property>
</item>
<item>
<property name="text">
<string>Red Stone</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_4">
<item>
<property name="text">
<string> 512 * 512</string>
</property>
</item>
<item>
<property name="text">
<string>1024 * 1024</string>
</property>
</item>
<item>
<property name="text">
<string>2048 * 2048</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_2"/>
</item>
</layout>
</item>
<item row="1" column="1">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_Output">
<property name="title">
<string>Output</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QCheckBox" name="checkBox_9">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Base Color</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_10">
<property name="text">
<string>Albedo</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_11">
<property name="text">
<string>Specular</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_12">
<property name="text">
<string>Metallic</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_13">
<property name="text">
<string>Normal map</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_14">
<property name="text">
<string>Glossness</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_15">
<property name="text">
<string>Roughness</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_16">
<property name="text">
<string>Opacity</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_Material">
<property name="title">
<string>Atom Material</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_12">
<property name="text">
<string>Name</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_4"/>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Create .material</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>Render textures</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLineEdit" name="lineEdit_5"/>
</item>
<item>
<widget class="QToolButton" name="toolButton_2">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_5">
<property name="text">
<string>Bake SBSAR from SBS</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
@@ -0,0 +1,241 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>461</width>
<height>502</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Watcher</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QRadioButton" name="radioButton_2">
<property name="text">
<string> On / Off</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Wacher Foler</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit_6">
<property name="text">
<string>Watch folder</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QToolButton" name="toolButton_3">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Wacher Extensions</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lineEdit_7">
<property name="text">
<string>*.sbsar, *.sbs</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QTextEdit" name="textEdit_2"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Sbsar</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox_parameters">
<property name="title">
<string>Parameters</string>
</property>
<layout class="QGridLayout" name="gridLayout_2"/>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_Output">
<property name="title">
<string>Output</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QCheckBox" name="checkBox_9">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Base Color</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_10">
<property name="text">
<string>Albedo</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_11">
<property name="text">
<string>Specular</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_12">
<property name="text">
<string>Metallic</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_13">
<property name="text">
<string>Normal map</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_14">
<property name="text">
<string>Glossness</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_15">
<property name="text">
<string>Roughness</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_16">
<property name="text">
<string>Opacity</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_Material">
<property name="title">
<string>Atom Material</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2"/>
</widget>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLineEdit" name="lineEdit_5"/>
</item>
<item>
<widget class="QToolButton" name="toolButton_2">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_5">
<property name="text">
<string>Bake SBSAR from SBS</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
@@ -0,0 +1,341 @@
# -*- coding: utf-8 -*-
# !/usr/bin/python
#
# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
# its licensors.
#
# For complete copyright and license terms please see the LICENSE at the root of this
# distribution (the "License"). All use of this software is governed by the License,
# or, if provided, by the license below or the license accompanying this file. Do not
# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#
# -------------------------------------------------------------------------
import sys, os
from PySide2 import QtCore, QtWidgets
from PySide2.QtCore import QTimer
from PySide2.QtCore import QProcess, Signal, Slot, QTextCodec
from PySide2.QtGui import QTextCursor
from PySide2.QtWidgets import QApplication, QPlainTextEdit
sys.path.insert(0, os.path.abspath('../..'))
import builder
# sys.path.insert(0, os.path.abspath('../ui/'))
# import main_win
sys.path.insert(0, os.path.abspath('../watchdog/'))
import watchdog
class Window(QtWidgets.QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.browseButton = self.create_button("&Browse...", self.browse)
self.findButton = self.create_button("&Find", self.find)
self.removeButton = self.create_button("&Remove", self.remove)
self.startWatch = self.create_button("&Start Watch", self.watch)
self.killButton = self.create_button("&Stop Watch", self.kill)
self.fileComboBox = self.createComboBox("*")
self.textComboBox = self.createComboBox()
# self.directoryComboBox = self.createComboBox(QtCore.QDir.currentPath())
self.sbsarDirectory = "C:/Users/chunghao/Documents/Allegorithmic/Substance Designer/sbsar"
self.directoryComboBox = self.createComboBox(self.sbsarDirectory)
self.extensionLabel = QtWidgets.QLabel("Watch extensions:")
# textLabel = QtWidgets.QLabel("Containing text:")
self.directoryLabel = QtWidgets.QLabel("Watch directory:")
self.filesFoundLabel = QtWidgets.QLabel()
self.wacherLogLabel = QtWidgets.QLabel("Watcher Log")
self.fileListLabel = QtWidgets.QLabel("File List")
self.sbsarPresetLabel = QtWidgets.QLabel("Sbsar Preset")
self.OutputResLabel = QtWidgets.QLabel("Output Size")
self.OutputsLabel = QtWidgets.QLabel("Outputs")
self.watcher_log = QPlainTextEdit()
self.watcher_log.setReadOnly(True)
self.watcher_log.setMaximumBlockCount(10000) # limit console to 10000 lines
self.watcher_log._cursor_output = self.watcher_log.textCursor()
self.create_files_table()
buttonsLayout = QtWidgets.QHBoxLayout()
buttonsLayout.addStretch()
buttonsLayout.addWidget(self.findButton)
# buttonsLayout.addWidget(self.removeButton)
buttonsLayout.addWidget(self.startWatch)
buttonsLayout.addWidget(self.killButton)
self.mainLayout = QtWidgets.QGridLayout()
self.mainLayout.addWidget(self.extensionLabel, 0, 0)
self.mainLayout.addWidget(self.fileComboBox, 0, 1, 1, 2)
# self.mainLayout.addWidget(textLabel, 1, 0)
# self.mainLayout.addWidget(self.textComboBox, 1, 1, 1, 2)
self.mainLayout.addWidget(self.directoryLabel, 2, 0)
self.mainLayout.addWidget(self.wacherLogLabel, 3, 0)
self.mainLayout.addWidget(self.fileListLabel, 4, 0)
self.mainLayout.addWidget(self.directoryComboBox, 2, 1)
self.mainLayout.addWidget(self.browseButton, 2, 2)
self.mainLayout.addWidget(self.watcher_log, 3, 1, 1, 3)
self.mainLayout.addWidget(self.filesTable, 4, 1, 1, 3)
self.mainLayout.addWidget(self.filesFoundLabel, 5, 1)
self.mainLayout.addLayout(buttonsLayout, 6, 0, 1, 3)
self.setLayout(self.mainLayout)
self.setWindowTitle("Substance Builder")
self.resize(800, 300)
self.path = self.directoryComboBox.currentText()
self.groupbox_outputs = QtWidgets.QGroupBox("Outputs")
self.watcher_script = "C:/dccapi/dev/Gems/DccScriptingInterface/LyPy/si_substance/builder/watchdog/__init__.py"
@Slot(str)
def append_output(self, text):
self.watcher_log._cursor_output.insertText(text)
self.scroll_to_last_line()
def scroll_to_last_line(self):
cursor = self.watcher_log.textCursor()
cursor.movePosition(QTextCursor.End)
cursor.movePosition(QTextCursor.Up if cursor.atBlockStart() else
QTextCursor.StartOfLine)
self.watcher_log.setTextCursor(cursor)
def output_text(self, text):
self.watcher_log._cursor_output.insertText(text)
self.watcher_log.scroll_to_last_line()
def browse(self):
# self.directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Find Files",
# QtCore.QDir.currentPath())
self.directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Find watcher folder",
"C:/Users/chunghao/Documents/Allegorithmic/Substance Designer/sbsar")
if self.directory:
if self.directoryComboBox.findText(self.directory) == -1:
self.directoryComboBox.addItem(self.directory)
self.directoryComboBox.setCurrentIndex(self.directoryComboBox.findText(self.directory))
self.path = self.directory
self.find()
return self.path
@staticmethod
def updateComboBox(comboBox):
if comboBox.findText(comboBox.currentText()) == -1:
comboBox.addItem(comboBox.currentText())
def find(self):
self.filesTable.setRowCount(0)
fileName = self.fileComboBox.currentText()
text = self.textComboBox.currentText()
self.path = self.directoryComboBox.currentText()
# self.path = "C:/Users/chunghao/Documents/Allegorithmic/Substance Designer/sbsar"
self.updateComboBox(self.fileComboBox)
self.updateComboBox(self.textComboBox)
self.updateComboBox(self.directoryComboBox)
self.currentDir = QtCore.QDir(self.path)
if not fileName:
fileName = "*"
files = self.currentDir.entryList([fileName],
QtCore.QDir.Files | QtCore.QDir.NoSymLinks)
if text:
files = self.find_files(files, text)
self.show_files(files)
return self.path
def find_files(self, files, text):
progressDialog = QtWidgets.QProgressDialog(self)
progressDialog.setCancelButtonText("&Cancel")
progressDialog.setRange(0, len(files))
progressDialog.setWindowTitle("Find Files")
foundFiles = []
for i in range(len(files)):
progressDialog.setValue(i)
progressDialog.setLabelText("Searching file number %d of %d..." % (i, len(files)))
QtCore.qApp.processEvents()
if progressDialog.wasCanceled():
break
inFile = QtCore.QFile(self.currentDir.absoluteFilePath(files[i]))
if inFile.open(QtCore.QIODevice.ReadOnly):
stream = QtCore.QTextStream(inFile)
while not stream.atEnd():
if progressDialog.wasCanceled():
break
line = stream.readLine()
if text in line:
foundFiles.append(files[i])
break
progressDialog.close()
return foundFiles
def show_files(self, files):
for fn in files:
# file = QtCore.QFile(self.currentDir.absoluteFilePath(fn))
# size = QtCore.QFileInfo(file).size()
fileNameItem = QtWidgets.QTableWidgetItem(fn)
fileNameItem.setFlags(fileNameItem.flags() ^ QtCore.Qt.ItemIsEditable)
# sizeItem = QtWidgets.QTableWidgetItem("%d KB" % (int((size + 1023) / 1024)))
# sizeItem.setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight)
# sizeItem.setFlags(sizeItem.flags() ^ QtCore.Qt.ItemIsEditable)
row = self.filesTable.rowCount()
self.filesTable.insertRow(row)
self.filesTable.setItem(row, 0, fileNameItem)
# self.filesTable.setItem(row, 1, sizeItem)
self.filesFoundLabel.setText("%d file(s) found (Double click on a file to open it)" % len(files))
def create_button(self, text, member):
button = QtWidgets.QPushButton(text)
button.clicked.connect(member)
return button
def createComboBox(self, text=""):
comboBox = QtWidgets.QComboBox()
comboBox.setEditable(True)
comboBox.addItem(text)
comboBox.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
QtWidgets.QSizePolicy.Preferred)
return comboBox
def create_files_table(self):
self.filesTable = QtWidgets.QTableWidget(0, 1)
self.filesTable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.filesTable.setHorizontalHeaderLabels(("File Name", ""))
self.filesTable.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
# self.filesTable.verticalHeader().hide()
self.filesTable.verticalHeader().show()
self.filesTable.setShowGrid(True)
self.filesTable.cellActivated.connect(self.open_fileOfitem)
def create_sbsar_params(self):
self.mainLayout.addWidget(self.OutputsLabel, 9, 0)
self.sbsarName = self.item.text().replace(".sbsar", "")
self.groupbox_outputs = QtWidgets.QGroupBox("Outputs")
self.horizontalLayoutOuputs = QtWidgets.QHBoxLayout(self.groupbox_outputs)
self.horizontalLayoutOuputs.setObjectName(("horizontalLayoutOuputs"))
# self.vertical_layout_outputs = QtWidgets.QVBoxLayout(self.groupbox_outputs)
# self.vertical_layout_outputs.setObjectName("vertical_layout_outputs")
self.sbsar_tex_outputs = builder.output_info(self.path, self.sbsarName)['_outputs']
for index, tex in enumerate(self.sbsar_tex_outputs):
print(tex, end=" ")
self.sbsar_tex_outputs[index] = QtWidgets.QCheckBox(self.groupbox_outputs)
self.sbsar_tex_outputs[index].setEnabled(True)
self.sbsar_tex_outputs[index].setChecked(True)
self.sbsar_tex_outputs[index].setObjectName(self.sbsarName+"_"+tex)
self.sbsar_tex_outputs[index].setText(tex)
self.horizontalLayoutOuputs.addWidget(self.sbsar_tex_outputs[index])
self.mainLayout.addWidget(self.groupbox_outputs, 9, 1, 1, 3)
print("\n")
def create_sbsar_presets(self):
self.mainLayout.addWidget(self.sbsarPresetLabel, 7, 0)
self.sbsar_presets = builder.output_info(self.path, self.item.text().replace(".sbsar", ""))['_presets']
self.comboBox_SbsarPreset = QtWidgets.QComboBox(self)
for self.presetItem in self.sbsar_presets:
print(self.presetItem, end=", ")
preset_index = 0
self.comboBox_SbsarPreset.addItem(self.presetItem)
self.comboBox_SbsarPreset.setItemText(preset_index, self.presetItem)
preset_index += 1
self.mainLayout.addWidget(self.comboBox_SbsarPreset, 7, 1, 1, 3)
print("\n")
self.comboBox_SbsarPreset.activated[str].connect(self.preset_selected)
def preset_selected(self, text):
self.selected_text = text
print(self.selected_text)
def create_tex_res(self):
self.mainLayout.addWidget(self.OutputResLabel, 8, 0)
self.resSelector = QtWidgets.QComboBox(self)
self.res = ["512x512", "1024x1024", "2048x2048"]
self.resSelector.addItems(self.res)
self.mainLayout.addWidget(self.resSelector, 8, 1, 1, 3)
self.resSelector.activated[str].connect(self.res_selected)
def res_selected(self):
if self.resSelector.currentIndex() == 0: print("$outputsize@9,9")
elif self.resSelector.currentIndex() == 1: print("$outputsize@10,10")
elif self.resSelector.currentIndex() == 2: print("$outputsize@11,11")
def remove(self):
self.mainLayout.removeWidget(self.groupbox_outputs)
self.groupbox_outputs.close()
def kill(self):
reader.kill()
def watch(self):
reader.start('python', ['-u', window.watcher_script, window.sbsarDirectory])
def open_fileOfitem(self, row, column):
self.item = self.filesTable.item(row, 0)
print(self.path+"/"+self.item.text())
if self.item.text().split(".")[-1] == "sbsar":
self.create_sbsar_presets()
self.create_tex_res()
self.mainLayout.removeWidget(self.groupbox_outputs)
self.groupbox_outputs.close()
self.create_sbsar_params()
elif self.item.text().split(".")[-1] == "sbs":
print("This is a Substance File")
builder.cook_sbsar(self.path+"/"+self.item.text(), builder._context, self.path, self.item.text().split(".")[0])
# builder.output_info()
class ProcessOutputReader(QProcess):
produce_output = Signal(str)
def __init__(self, parent=None):
super().__init__(parent=parent)
# merge stderr channel into stdout channel
self.setProcessChannelMode(QProcess.MergedChannels)
# prepare decoding process' output to Unicode
self._codec = QTextCodec.codecForLocale()
self._decoder_stdout = self._codec.makeDecoder()
# only necessary when stderr channel isn't merged into stdout:
# self._decoder_stderr = codec.makeDecoder()
self.readyReadStandardOutput.connect(self._ready_read_standard_output)
# only necessary when stderr channel isn't merged into stdout:
# self.readyReadStandardError.connect(self._ready_read_standard_error)
@Slot()
def _ready_read_standard_output(self):
raw_bytes = self.readAllStandardOutput()
text = self._decoder_stdout.toUnicode(raw_bytes)
self.produce_output.emit(text)
# only necessary when stderr channel isn't merged into stdout:
# @Slot()
# def _ready_read_standard_error(self):
# raw_bytes = self.readAllStandardError()
# text = self._decoder_stderr.toUnicode(raw_bytes)
# self.produce_output.emit(text)
if __name__ == '__main__':
app = QApplication(sys.argv)
reader = ProcessOutputReader()
window = Window()
reader.produce_output.connect(window.append_output)
reader.start('python', ['-u', window.watcher_script, window.sbsarDirectory])
window.show()
timer = QTimer()
timer.timeout.connect(lambda: None)
timer.start(10)
# sys.exit(reader.kill())
sys.exit(app.exec_())
@@ -0,0 +1,67 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
/* ============================================================= */
/* Global styles */
/* ============================================================= */
*
{
background-color: #444444;
color: white;
font-family: "Amazon Ember";
font-weight: 400;
}
QMainWindow,
QDialog,
QDockWidget
{
color: #cccccc;
background-color: #393a3c;
}
QTextEdit,
QPlainText,
QLineEdit,
QSpinBox,
QDoubleSpinBox,
QComboBox
{
background-color: #e9e9e9;
color: black;
font-family: "Amazon Ember";
border-radius: 2px;
border-width: 0px;
font-size: 12px;
line-height: 16px;
}
@import "Text.qss";
@import "PushButton.qss";
@import "Menu.qss";
@import "CheckBox.qss";
@import "RadioButton.qss";
@import "ToolTip.qss";
@import "ProgressBar.qss";
@import "ColorPicker.qss";
@import "Slider.qss";
@import "Card.qss";
@import "BrowseEdit.qss";
@import "BreadCrumbs.qss";
@import "LineEdit.qss";
@import "ComboBox.qss";
@import "SegmentControl.qss";
@import "SpinBox.qss";
@import "ScrollBar.qss";
@@ -0,0 +1,22 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
/*
BreadCrumbs are QWidgets with a QHBoxLayout with 0 content margins and one QLabel child widget.
*/
AzQtComponents--BreadCrumbs
{
}
@@ -0,0 +1,61 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
AzQtComponents--BrowseEdit
{
border-color: transparent;
border-width: 2px;
border-style: solid;
border-radius: 3px;
}
AzQtComponents--BrowseEdit QLineEdit
{
height: 16px;
border-width: 0px;
border-style: solid;
border-color: #444444;
border-top-left-radius: 3px;
border-bottom-left-radius: 3px;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
}
AzQtComponents--BrowseEdit QLineEdit:focus
{
background-color: #FFFFFF;
border-color: #FFFFFF;
}
AzQtComponents--BrowseEdit QLineEdit:disabled
{
background-color: #777777;
border-color: #777777;
color: #999999;
}
AzQtComponents--BrowseEdit QToolButton
{
max-width: 15px;
min-width: 15px;
max-height: 14px;
min-height: 14px;
background-color: #444444;
border-color: #000000;
border-width: 1px;
border-style: solid;
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
}
@@ -0,0 +1,154 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
AzQtComponents--Card
{
margin: 0px;
padding: 0px;
border: 1px solid rgb(33, 34, 35);
border-radius: 2px;
}
AzQtComponents--CardNotification
{
background-color: #1AFDC32D;
margin: 2px;
border: 1px solid #FDC32D;
border-radius: 2px;
}
AzQtComponents--CardNotification #HeaderFrame,
AzQtComponents--CardNotification #Icon,
AzQtComponents--CardNotification #Title
{
background-color: transparent;
border: none;
}
/**
* CardHeader is a QFrame with a QHBoxLayout that contains the following children:
* #Expander: a QCheckBox used as a "tree expander".
* #Icon: a QLabel displaying an icon. The icon is set from c++.
* #Title: a QLabel displaying text.
* #ContextMenu: a QPushButton used to launch a context menu.
*/
AzQtComponents--CardHeader
{
margin: 0px;
padding: 0px;
border: none;
}
AzQtComponents--CardHeader #Background
{
margin: 2px;
padding: 0px;
border: none;
background-image: none;
background-color: transparent;
}
.primaryCardHeader
{
background-color: #222222;
}
.secondaryCardHeader
{
background-color: transparent;
}
AzQtComponents--CardHeader #Background[readOnly=true]
{
background-repeat: repeat-xy;
}
AzQtComponents--CardHeader #Background[readOnly=false]
{
background-image: none;
}
AzQtComponents--CardHeader #Title
{
font-weight: bold;
background-color: transparent;
}
AzQtComponents--CardHeader #Expander
{
width: 16px;
height: 16px;
qproperty-flat: true;
border: none;
color: transparent;
background-color: transparent;
selection-color: transparent;
selection-background-color: transparent;
image: none;
}
AzQtComponents--CardHeader #Expander:enabled:checked
{
image: url(:/Cards/img/UI20/Cards/group_open.png);
}
AzQtComponents--CardHeader #Expander:enabled:!checked
{
image: url(:/Cards/img/UI20/Cards/group_closed.png);
}
AzQtComponents--CardHeader #Icon,
AzQtComponents--CardHeader #WarningIcon
{
width: 16px;
height: 16px;
border: none;
background-color: transparent;
}
AzQtComponents--CardHeader #ContextMenu
{
qproperty-flat: true;
border: none;
color: transparent;
background-color: transparent;
selection-color: transparent;
selection-background-color: transparent;
image: url(:/Cards/img/UI20/Cards/menu_ico.png);
}
AzQtComponents--CardHeader #Help
{
qproperty-flat: true;
border: none;
color: transparent;
background-color: transparent;
selection-color: transparent;
selection-background-color: transparent;
image: url(:/Cards/img/UI20/Cards/help.png);
}
.separator
{
color: #999999;
}
AzQtComponents--Card #SeparatorContainer
{
margin-left: 2px;
margin-right: 2px;
border: none;
}
@@ -0,0 +1,106 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
QCheckBox
{
font-size: 12px;
line-height: 18px;
color: rgb(204, 204, 204);
outline: 0;
}
QCheckBox::indicator:!focus {
width: 14px;
height: 14px;
border: 1px solid white;
border-radius: 2px;
margin: 2px;
}
QCheckBox::indicator:focus {
width: 16px;
height: 16px;
border: 2px solid rgb(201, 170, 254);
border-radius: 4px;
margin: 0px;
}
QCheckBox::indicator:disabled {
border-color: rgb(128, 128, 128);
}
QCheckBox::indicator:indeterminate:!focus {
image: url(../builder/ui/stylesheets/img/UI20/combo-tristate.png);
}
QCheckBox::indicator:indeterminate:focus {
image: url(../builder/ui/stylesheets/img/UI20/combo-tristate-focus.png);
}
QCheckBox::indicator:checked:!focus {
image: url(../builder/ui/stylesheets/img/UI20/combo-checked.png);
}
QCheckBox::indicator:checked:focus {
image: url(../builder/ui/stylesheets/img/UI20/combo-checked-focus.png);
}
QCheckBox::indicator:checked:disabled {
image: url(../builder/ui/stylesheets/img/UI20/combo-checked-disabled.png);
}
QCheckBox[class="ToggleSwitch"]::indicator
{
width: 32px;
height: 16px;
border-width: 0px;
margin: 2px;
}
QCheckBox[class="ToggleSwitch"]::indicator:Unchecked
{
image: url(../builder/ui/stylesheets/img/UI20/toggle-unchecked.png);
}
QCheckBox[class="ToggleSwitch"]::indicator:disabled
{
image: url(../builder/ui/stylesheets/img/UI20/toggle-unchecked-disabled.png);
}
QCheckBox[class="ToggleSwitch"]::indicator:Unchecked:focus
{
width: 36px;
height: 20px;
border-width: 0px;
margin: 0px;
image: url(../builder/ui/stylesheets/img/UI20/toggle-unchecked-focus.png);
}
QCheckBox[class="ToggleSwitch"]::indicator:Checked
{
image: url(../builder/ui/stylesheets/img/UI20/toggle-checked.png);
}
QCheckBox[class="ToggleSwitch"]::indicator:Checked:disabled
{
image: url(../builder/ui/stylesheets/img/UI20/toggle-checked-disabled.png);
}
QCheckBox[class="ToggleSwitch"]::indicator:Checked:focus
{
width: 36px;
height: 20px;
border-width: 0px;
margin: 0px;
image: url(../builder/ui/stylesheets/img/UI20/toggle-checked-focus.png);
}
@@ -0,0 +1,131 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
AzQtComponents--ColorPicker
{
padding: 100px;
}
AzQtComponents--ColorPicker *
{
font-size: 12px;
}
AzQtComponents--ColorPicker QTextEdit,
AzQtComponents--ColorPicker QPlainText,
AzQtComponents--ColorPicker QLineEdit,
AzQtComponents--ColorPicker QSpinBox,
AzQtComponents--ColorPicker QDoubleSpinBox
{
padding-bottom: -2px;
}
AzQtComponents--ColorPicker QToolButton
{
border: none;
max-width: 16px;
min-width: 16px;
max-height: 16px;
min-height: 16px;
background-color: transparent;
}
AzQtComponents--ColorPicker QLabel,
AzQtComponents--ColorPicker QCheckBox,
AzQtComponents--PaletteView,
AzQtComponents--ColorPicker #Container
{
background-color: transparent;
}
AzQtComponents--ColorPicker QScrollArea
{
border: none;
background-color: transparent;
}
AzQtComponents--ColorPicker QLabel
{
padding: 0px;
margin: 0px;
}
AzQtComponents--PaletteCard AzQtComponents--CardHeader
{
background-color: transparent;
}
AzQtComponents--PaletteCard AzQtComponents--CardHeader #Title
{
font-weight: normal;
}
AzQtComponents--PaletteCard[modified="true"] AzQtComponents--CardHeader #Title
{
color: #ffa500;
}
AzQtComponents--PaletteCard AzQtComponents--CardHeader #Expander:enabled:checked
{
image: url(:/ColorPickerDialog/PaletteCard/open.png);
}
AzQtComponents--PaletteCard AzQtComponents--CardHeader #Expander:enabled:!checked
{
image: url(:/ColorPickerDialog/PaletteCard/closed.png);
}
AzQtComponents--ColorPicker QSpinBox,
AzQtComponents--ColorPicker QDoubleSpinBox
{
padding-left: 0px;
}
AzQtComponents--ColorPicker QSpinBox::down-button,
AzQtComponents--ColorPicker QSpinBox::up-button,
AzQtComponents--ColorPicker QDoubleSpinBox::down-button,
AzQtComponents--ColorPicker QDoubleSpinBox::up-button
{
width: 0px;
border-style: none;
}
AzQtComponents--ColorPicker .HorizontalSeparator
{
border-top: 1px solid #393a3c;
border-bottom: 1px solid #393a3c;
border-left: none;
border-right: none;
background: #222222;
}
AzQtComponents--ColorPicker AzQtComponents--PaletteView
{
border: none;
}
AzQtComponents--ColorGrid,
AzQtComponents--ColorPreview,
AzQtComponents--Swatch
{
/* Note: Swatches will ignore any 'background*' property set here */
border: 1px solid #333333;
border-radius: 2px;
}
AzQtComponents--Swatch:selected
{
/* Note: Swatches will ignore any 'background*' property set here */
border: 2px solid #C8ABFF;
}
@@ -0,0 +1,111 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
/* NOTE: a number of QComboBox properties are defined in BaseStyleSheet.qss already, along with other text entry controls */
/* ComboBox */
QComboBox
{
height: 16px;
padding-left: 8px;
margin: 4px;
font-size: 12px;
}
QComboBox:focus
{
background-color: #FFFFFF;
margin: 2px;
border-width: 2px;
border-style: solid;
border-radius: 4px;
border-color: #C09EFF;
}
QComboBox:disabled
{
background-color: #777777;
color: #999999;
}
QComboBox::drop-down
{
border-width: 0;
}
QComboBox::down-arrow
{
image: url("../builder/ui/stylesheets/img/triangle3.png");
}
QComboBox::down-arrow:disabled
{
image: url("../builder/ui/stylesheets/img/triangle1.png");
}
/* Popup */
QComboBox QAbstractItemView
{
background-color: #222222;
padding: 4px 0px 4px 0px;
border-radius: 2px;
outline: none; /* Disable focus rect */
show-decoration-selected: 1;
}
QComboBox QAbstractItemView::item
{
color: #FFFFFF;
padding-top: 6px;
padding-bottom: 6px;
padding-right: 24px;
padding-left: 2px; /* There is already 22px from the check mark */
/* Without that the padding don't apply */
border: 0px solid transparent;
}
/*
This is needed as a result of using padding / border in ::item as
selection-background-color and selection-color are no more honored...
*/
QComboBox QAbstractItemView::item:selected
{
background-color: #444444;
color: #FFFFFF;
}
QComboBox QAbstractItemView::item:disabled
{
color: #555555;
}
QComboBox QAbstractItemView::separator
{
height: 1px;
background: #444444;
}
QComboBox QAbstractItemView::indicator
{
/* Keep in sync with the check mark image size */
width: 12px;
height: 9px;
image: none;
}
QComboBox QAbstractItemView::indicator:checked
{
image: url(../builder/ui/stylesheets/img/menu-check.png);
}
@@ -0,0 +1,36 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
/* NOTE: a number of QLineEdit properties are defined in BaseStyleSheet.qss already, along with other text entry controls */
QLineEdit
{
height: 16px;
padding-left: 8px;
border-width: 2px;
border-style: solid;
}
QLineEdit[HasSearchAction=true] {
padding-left: 4px;
}
QLineEdit:focus
{
background-color: #FFFFFF;
}
QLineEdit:disabled
{
background-color: #777777;
color: #999999;
}
@@ -0,0 +1,53 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
QMenuBar::item:selected
{
background: #222222;
}
QMenu
{
background-color: #222222;
color: #FFFFFF;
padding: 4px 0px 4px 0px;
/* Note: with QMenu, only 'margin' works, not 'margin-bottom' or 'margin-top'. */
}
QMenu::item
{
color: #FFFFFF;
font-size: 12px;
padding-top: 6px;
padding-bottom: 6px;
padding-right: 24px;
padding-left: 24px;
}
QMenu::item:selected
{
background-color: #444444;
}
QMenu::item:disabled
{
color: #555555;
}
QMenu::separator
{
height: 1px;
background: #444444;
}
@@ -0,0 +1,28 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
QProgressBar
{
border: 0px transparent #000000;
border-radius: 0px;
background: #888888;
height: 7px;
font-size: 1px; /* hack to get around the fact that QProgressBar's minimumSizeHint
is computed from font size, even when text is invisible */
qproperty-textVisible: False;
}
QProgressBar::chunk
{
background: #B48BFF;
}
@@ -0,0 +1,80 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
/* =============================================================
Push Buttons
Painting of the background and the frame of PushButtons
are done in code, in PushButton.cpp.
It's done there because the default Qt rendering, or at least
the Fusion style, which we use as our base style, doesn't
properly anti-alias and position the button bounding box
when we customize the background colors and styles here. Also,
there's literally no way to get the colors and styling info out
of the stylesheet.
Below is the configuration of the text colors for the
PushButtons and the font size, which can be done here in the
stylesheet.
Everything else can be configured via PushButton.ini
============================================================= */
QPushButton
{
font-size: 12px;
color: white;
font-family: "Amazon Ember";
}
QPushButton:hover,
QPushButton:pressed
{
color: white;
}
QPushButton:disabled
{
color: #C8C8C8;
}
QPushButton.Primary,
QPushButton:default,
QToolButton::menu-indicator,
QToolButton.SmallIcon::menu-indicator
{
color: white;
}
QPushButton.Primary:disabled,
QPushButton:default:disabled,
QToolButton.SmallIcon:disabled::menu-indicator
{
color: #C8C8C8;
}
QPushButton::menu-indicator
{
subcontrol-position: right center;
subcontrol-origin: padding;
left: -8px;
image: url("../builder/ui/stylesheets/img/triangle1.png")
}
QPushButton.SmallIcon
{
margin: 0px;
}
@@ -0,0 +1,67 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
QRadioButton
{
font-size: 12px;
line-height: 18px;
color: rgb(204, 204, 204);
outline: 0;
}
QRadioButton::indicator:!focus
{
width: 16px;
height: 16px;
margin: 2px;
}
QRadioButton::indicator:focus
{
width: 20px;
height: 20px;
margin: 0px;
}
QRadioButton::indicator:checked
{
image: url(../builder/ui/stylesheets/img/UI20/radio-checked.png);
}
QRadioButton::indicator:checked:disabled
{
image: url(../builder/ui/stylesheets/img/UI20/radio-checked-disabled.png);
}
QRadioButton::indicator:checked:focus
{
image: url(../builder/ui/stylesheets/img/UI20/radio-checked-focus.png);
}
QRadioButton::indicator:unchecked
{
image: url(../builder/ui/stylesheets/img/UI20/radio-unchecked.png);
}
QRadioButton::indicator:unchecked:disabled
{
image: url(../builder/ui/stylesheets/img/UI20/radio-unchecked-disabled.png);
}
QRadioButton::indicator:unchecked:focus
{
image: url(../builder/ui/stylesheets/img/UI20/radio-unchecked-disabled.png);
}
@@ -0,0 +1,43 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
QScrollBar:vertical
{
border: 4px solid rgba(85, 85, 85, 65%);
width: 16px;
background-color: rgba(85, 85, 85, 65%);
margin: 0px;
}
QScrollBar:horizontal
{
border: 4px solid rgba(85, 85, 85, 65%);
height: 16px;
background-color: rgba(85, 85, 85, 65%);
margin: 0px;
}
QScrollBar::handle
{
border: 0px solid #000000;
border-radius: 4px;
background: #000000;
}
QScrollBar::add-line,
QScrollBar::sub-line
{
border: none;
background: none;
color: none;
}
@@ -0,0 +1,61 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
QTabWidget
{
}
/* An empty ::pane rule removes the default pane style. */
QTabWidget::pane
{
}
QTabBar
{
qproperty-drawBase: 0;
alignment: center;
}
QTabBar::tab
{
background-color: #333333;
border-color: #000000;
border-style: solid;
border-width: 1px;
font-size: 12px;
height: 28px;
line-height: 24px;
margin-left: 0px;
min-width: 100px
}
QTabBar::tab::middle,
QTabBar::tab::last
{
margin-left: -1px;
}
QTabBar::tab:selected
{
background-color: #222222;
}
QTabBar::tab:hover
{
background-color: #444444;
}
@@ -0,0 +1,13 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
@@ -0,0 +1,71 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
QSpinBox,
QDoubleSpinBox
{
height: 16px;
margin: 2px;
padding-left: 8px;
}
QSpinBox:focus,
QDoubleSpinBox:focus
{
margin: 0px;
border-width: 2px;
border-style: solid;
border-radius: 4px;
border-color: #C19CFE;
}
QSpinBox:disabled,
QDoubleSpinBox:disabled
{
background-color: #777777;
color: #999999;
}
QSpinBox::up-button,
QDoubleSpinBox::up-button,
QSpinBox::down-button,
QDoubleSpinBox::down-button
{
width: 14px;
height: 6px;
border-width: 1px;
border-color: #222222;
border-style: solid;
background-color: #333333;
}
QSpinBox::up-button,
QDoubleSpinBox::up-button
{
border-top-right-radius: 2px;
image: url(../builder/ui/stylesheets/img/UI20/spinbox-up-arrow.png);
}
QSpinBox::down-button,
QDoubleSpinBox::down-button
{
border-bottom-right-radius: 2px;
image: url(../builder/ui/stylesheets/img/UI20/spinbox-down-arrow.png);
}
QSpinBox::up-button:pressed,
QDoubleSpinBox::up-button:pressed,
QSpinBox::down-button:pressed,
QDoubleSpinBox::down-button:pressed
{
background-color: #111111;
}
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2c45dda65605edfffe83701f467acbc28230fefdfedcddd1879d12e534f1c903
size 1228
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b959d561237d63b859eb9a0bb5ef1fa614a5788b3604a4515232b904803e2e2b
size 59380
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b327b9b1ab34d6facc574b4602eb678afa97825bf1aa721fa7505ef5c43ab051
size 59380
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:febc3883ac09ea579877deb49a41441f618a1558f63a838ca3e216c65c638b1c
size 448
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7e89ed1a88e4b7488a34f9d5ecc3cf231d1c3b2b225fe956e009431ae0cd02d3
size 438
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b7226b603a86d0f49f1fcc0159389555c02814af5382ba7b52374cac7e38f3b8
size 446
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:63ed841be1103f4892ee5a6e9d7a8b0cdb0985a8267d445299aafc62b645c2fd
size 546
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:122e36afcffdb645c3e31d1209c1faa3f4902499b52d012a4b6d48cffd2f20fe
size 1160
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:127d144107a9fbde39166ed0376c4426f5cc27a2158414157757763b5191f41f
size 1154
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6e1d4d0b66d84814957526e97187064789cc292dd6ddad761adde100b62712eb
size 295
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:41085a9d05c4d360ad5e01e1d59dd431938b091b043b607f1dbe5d97979138a7
size 372
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d40eecfe6550998ce610a9315db836e0f5ff4b5481c14de80b1ef58fbee60c53
size 271
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d7b7a54c2b0f629e3db70aa148dfd296b1a373398cf0a25e352d6a7f52a6cb6d
size 381
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e7788561044ecb229d2c1175891d5ebe04c5a68c6b9a55faf2ecb22139ad84c9
size 1042
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:01a9e46b7ae80b68288b8d3a81e26b01c00fd8b72bcedd7ce7cebcfac1529153
size 1043
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6c90511863eea1443491f48892e6a686325d098d459dfcacbb8b560f46bf29a9
size 294
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1dbebd9235853b1b5e5b75669dbb411c1f798681e78ea6bdfcf392bdf14280fb
size 169
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3d623ad9cecbb6c3fee912eb39689fe5442f805cd41d32fd6d5a49f5c7b049f7
size 372
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:41307cc4f2c5ac0c77cbe2eb15b488a5d52f6c05d850f8dd8d0540ad66e3a925
size 1189
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:23bad55f0bf5efcbbe9017dd6b82e5f925349d5c6a2d120f2924aa7e6cd1f3dd
size 1122
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:73080538eae03ac319851d4a4c0928547c457eee730b67458794f0ac50a1f174
size 528
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6686a111a1d0f0e02d544d24135b9b94599fb332cd43912675c6840eb318bc00
size 3293
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d49c822d8f43f0f05dc8e2fa1ccee86ef3731cca074a586eb5b943caddaa6e52
size 3306
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7c8bf7b3f70d5f2683a8e495ddf80ecea1a437d63d259730becfd546286a8be2
size 3191
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1b4c23e60d84cfa16a310638ffc30d14c7821dbb852e96c5cbfb814aa0af3b1d
size 3244
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:beb00c64d91c8e9035414fba270f2b9477a1d15debb2d4acad0481256948b58d
size 298
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9b15e390624dc61ad6ae48faedb2f901f016615548747b6ed66296a8dd6ce5d7
size 296
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b85878ce2422dba963334dfc04648d893b7f17f9f4e4a395d6fea92c3dc5998e
size 198
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:47df1e68051bd26a470e5d9d8af45c26e33c56d06cc379f861d8300963b606de
size 188
@@ -0,0 +1,92 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
.secondaryText
{
color: #BBBBBB;
}
.primaryText
{
color: white;
}
.highlightedText
{
color: #C9AAFE;
}
.blackText
{
color: black;
}
/*
Qt supports the line-height field, but only for QTextEdit controls, not for QLabel.
Even then, the support isn't exactly what we want.
So instead, we apply margin-top and bottom appropriately to get the required spec.
To get the right line-height, we need to do:
margin-top: ((line-height - font-size) / 2) px;
margin-bottom: ((line-height - font-size) / 2) px;
*/
QLabel
{
font-size: 12px;
margin-top: 2px;
margin-bottom: 2px;
font-family: "Amazon Ember";
}
.Headline
{
font-family: "Amazon Ember Light";
font-size: 24px;
margin-top: 4px;
margin-bottom: 4px;
}
.Title
{
font-size: 18px;
margin-top: 7px;
margin-bottom: 7px;
}
.Subtitle
{
font-family: "Amazon Ember Light";
font-size: 16px;
margin-top: 8px;
margin-bottom: 8px;
}
.Paragraph
{
font-size: 12px;
/*
line-height doesn't work with multi-line text fields.
With single-line text fields, we can get close enough using the margin-top and margin-bottom. That doesn't
work for multi-line fields, because there's no inbetween line margins.
*/
margin-top: 4px;
margin-bottom: 4px;
}
@@ -0,0 +1,23 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
QToolTip
{
color: #ffffff;
background-color: black;
border: 1px transparent black;
margin-left: 2px;
font-size: 12px;
margin-top: 0px;
margin-bottom: 0px;
}
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c9f7e274bfcd9e1fd31084758b9ca782a1c8ba5e2760dee5d27e8f84ec9e90f5
size 596
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:13a6a1da6e5e21fbe94b510c68671dfcdc38a5f9fe526699c2d9cccb5387876e
size 595
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f470a07169b00dc104bfb365bc7b9e126ca57e133bc26545e4c539322c965fd4
size 202
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2834eb4101a3b5ee1f59a8e12d55dc68de0825e24a06c7468a7d9eb4afb3e21f
size 218
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2ebc0472590293c3b5e53fabef409bf1db056d3c02582066cf8e6655e5386999
size 221
@@ -0,0 +1,371 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>461</width>
<height>502</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Watcher</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QRadioButton" name="radioButton_2">
<property name="text">
<string> On / Off</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Wacher Foler</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit_6">
<property name="text">
<string>Watch folder</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QToolButton" name="toolButton_3">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Wacher Extensions</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lineEdit_7">
<property name="text">
<string>*.sbsar, *.sbs</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QTextEdit" name="textEdit_2"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Sbsar</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox_parameters">
<property name="title">
<string>Parameters</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QLabel" name="label_14">
<property name="text">
<string>Preset</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_15">
<property name="text">
<string>Size</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_16">
<property name="text">
<string>RandomSeed</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="QComboBox" name="comboBox_3">
<item>
<property name="text">
<string>Grey Stone</string>
</property>
</item>
<item>
<property name="text">
<string>Red Coral</string>
</property>
</item>
<item>
<property name="text">
<string>Red Stone</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_4">
<item>
<property name="text">
<string> 512 * 512</string>
</property>
</item>
<item>
<property name="text">
<string>1024 * 1024</string>
</property>
</item>
<item>
<property name="text">
<string>2048 * 2048</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_2"/>
</item>
</layout>
</item>
<item row="1" column="1">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_Output">
<property name="title">
<string>Output</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QCheckBox" name="checkBox_9">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Base Color</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_10">
<property name="text">
<string>Albedo</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_11">
<property name="text">
<string>Specular</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_12">
<property name="text">
<string>Metallic</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_13">
<property name="text">
<string>Normal map</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_14">
<property name="text">
<string>Glossness</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_15">
<property name="text">
<string>Roughness</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_16">
<property name="text">
<string>Opacity</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_Material">
<property name="title">
<string>Atom Material</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_12">
<property name="text">
<string>Name</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_4"/>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Create .material</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>Render textures</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLineEdit" name="lineEdit_5"/>
</item>
<item>
<widget class="QToolButton" name="toolButton_2">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_5">
<property name="text">
<string>Bake SBSAR from SBS</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>