diff --git a/LICENSE b/LICENSE index 7ca1ae1..b57ebfe 100644 --- a/LICENSE +++ b/LICENSE @@ -1,13 +1,13 @@ -https://github.com/richteralexander/plex +https://github.com/alexanderrichtertd/plex -www.richteralexander.com -pipeline@richteralexander.com +www.alexanderrichtertd.com +alexanderrichtertd@gmail.com ----------------------------------------------------------------------- The MIT License (MIT) -Copyright (c) 2017 Filmakademie Baden-Wuerttemberg, Animationsinstitut +Copyright (c) 2018 Alexander Richter This program is free software; you can redistribute it and/or modify it under the terms of the MIT License as published by the Open Source Initiative. diff --git a/data/pipeline.yml b/data/pipeline.yml index cb0d1cf..ba4392e 100644 --- a/data/pipeline.yml +++ b/data/pipeline.yml @@ -1,9 +1,10 @@ #********************************************************************* # content = pipeline data # version = 0.0.4 -# date = 2017-01-01 +# date = 2018-12-01 # -# author = Alexander Richter +# license = MIT +# author = Alexander Richter #********************************************************************* # USE this project settings diff --git a/data/project/default/software.yml b/data/project/default/software.yml index 7ed7e7c..c95d2b0 100644 --- a/data/project/default/software.yml +++ b/data/project/default/software.yml @@ -35,7 +35,7 @@ EXTENSION: #***************************************************************************************************************************** # MAYA MAYA: - version: &MAYA_VERSION 2017 + version: &MAYA_VERSION 2015 path: &MAYA_PATH !join ["C:/Program Files/Autodesk/Maya", *MAYA_VERSION, /bin/maya.exe] # start command diff --git a/exe/pipeline.py b/exe/pipeline.py index f54c745..2656cb5 100644 --- a/exe/pipeline.py +++ b/exe/pipeline.py @@ -1,15 +1,10 @@ #********************************************************************* # content = SET default environment paths # version = 0.7.0 -# date = 2017-08-15 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/exe/windows/extern/Qt.py b/exe/windows/extern/Qt.py deleted file mode 100644 index 54f72cf..0000000 --- a/exe/windows/extern/Qt.py +++ /dev/null @@ -1,1601 +0,0 @@ -"""Minimal Python 2 & 3 shim around all Qt bindings - -DOCUMENTATION - Qt.py was born in the film and visual effects industry to address - the growing need for the development of software capable of running - with more than one flavour of the Qt bindings for Python - PySide, - PySide2, PyQt4 and PyQt5. - - 1. Build for one, run with all - 2. Explicit is better than implicit - 3. Support co-existence - - Default resolution order: - - PySide2 - - PyQt5 - - PySide - - PyQt4 - - Usage: - >> import sys - >> from Qt import QtWidgets - >> app = QtWidgets.QApplication(sys.argv) - >> button = QtWidgets.QPushButton("Hello World") - >> button.show() - >> app.exec_() - - All members of PySide2 are mapped from other bindings, should they exist. - If no equivalent member exist, it is excluded from Qt.py and inaccessible. - The idea is to highlight members that exist across all supported binding, - and guarantee that code that runs on one binding runs on all others. - - For more details, visit https://github.com/mottosso/Qt.py - -LICENSE - - See end of file for license (MIT, BSD) information. - -""" - -import os -import sys -import types -import shutil - - -__version__ = "1.1.0.b5" - -# Enable support for `from Qt import *` -__all__ = [] - -# Flags from environment variables -QT_VERBOSE = bool(os.getenv("QT_VERBOSE")) -QT_PREFERRED_BINDING = os.getenv("QT_PREFERRED_BINDING", "") -QT_SIP_API_HINT = os.getenv("QT_SIP_API_HINT") - -# Reference to Qt.py -Qt = sys.modules[__name__] -Qt.QtCompat = types.ModuleType("QtCompat") - -try: - long -except NameError: - # Python 3 compatibility - long = int - -"""Common members of all bindings - -This is where each member of Qt.py is explicitly defined. -It is based on a "lowest common denominator" of all bindings; -including members found in each of the 4 bindings. - -Find or add excluded members in build_membership.py - -""" - -_common_members = { - "QtCore": [ - "QAbstractAnimation", - "QAbstractEventDispatcher", - "QAbstractItemModel", - "QAbstractListModel", - "QAbstractState", - "QAbstractTableModel", - "QAbstractTransition", - "QAnimationGroup", - "QBasicTimer", - "QBitArray", - "QBuffer", - "QByteArray", - "QByteArrayMatcher", - "QChildEvent", - "QCoreApplication", - "QCryptographicHash", - "QDataStream", - "QDate", - "QDateTime", - "QDir", - "QDirIterator", - "QDynamicPropertyChangeEvent", - "QEasingCurve", - "QElapsedTimer", - "QEvent", - "QEventLoop", - "QEventTransition", - "QFile", - "QFileInfo", - "QFileSystemWatcher", - "QFinalState", - "QGenericArgument", - "QGenericReturnArgument", - "QHistoryState", - "QIODevice", - "QLibraryInfo", - "QLine", - "QLineF", - "QLocale", - "QMargins", - "QMetaClassInfo", - "QMetaEnum", - "QMetaMethod", - "QMetaObject", - "QMetaProperty", - "QMimeData", - "QModelIndex", - "QMutex", - "QMutexLocker", - "QObject", - "QParallelAnimationGroup", - "QPauseAnimation", - "QPersistentModelIndex", - "QPluginLoader", - "QPoint", - "QPointF", - "QProcess", - "QProcessEnvironment", - "QPropertyAnimation", - "QReadLocker", - "QReadWriteLock", - "QRect", - "QRectF", - "QRegExp", - "QResource", - "QRunnable", - "QSemaphore", - "QSequentialAnimationGroup", - "QSettings", - "QSignalMapper", - "QSignalTransition", - "QSize", - "QSizeF", - "QSocketNotifier", - "QState", - "QStateMachine", - "QSysInfo", - "QSystemSemaphore", - "QT_TRANSLATE_NOOP", - "QT_TR_NOOP", - "QT_TR_NOOP_UTF8", - "QTemporaryFile", - "QTextBoundaryFinder", - "QTextCodec", - "QTextDecoder", - "QTextEncoder", - "QTextStream", - "QTextStreamManipulator", - "QThread", - "QThreadPool", - "QTime", - "QTimeLine", - "QTimer", - "QTimerEvent", - "QTranslator", - "QUrl", - "QVariantAnimation", - "QWaitCondition", - "QWriteLocker", - "QXmlStreamAttribute", - "QXmlStreamAttributes", - "QXmlStreamEntityDeclaration", - "QXmlStreamEntityResolver", - "QXmlStreamNamespaceDeclaration", - "QXmlStreamNotationDeclaration", - "QXmlStreamReader", - "QXmlStreamWriter", - "Qt", - "QtCriticalMsg", - "QtDebugMsg", - "QtFatalMsg", - "QtMsgType", - "QtSystemMsg", - "QtWarningMsg", - "qAbs", - "qAddPostRoutine", - "qChecksum", - "qCritical", - "qDebug", - "qFatal", - "qFuzzyCompare", - "qIsFinite", - "qIsInf", - "qIsNaN", - "qIsNull", - "qRegisterResourceData", - "qUnregisterResourceData", - "qVersion", - "qWarning", - "qrand", - "qsrand" - ], - "QtGui": [ - "QAbstractTextDocumentLayout", - "QActionEvent", - "QBitmap", - "QBrush", - "QClipboard", - "QCloseEvent", - "QColor", - "QConicalGradient", - "QContextMenuEvent", - "QCursor", - "QDoubleValidator", - "QDrag", - "QDragEnterEvent", - "QDragLeaveEvent", - "QDragMoveEvent", - "QDropEvent", - "QFileOpenEvent", - "QFocusEvent", - "QFont", - "QFontDatabase", - "QFontInfo", - "QFontMetrics", - "QFontMetricsF", - "QGradient", - "QHelpEvent", - "QHideEvent", - "QHoverEvent", - "QIcon", - "QIconDragEvent", - "QIconEngine", - "QImage", - "QImageIOHandler", - "QImageReader", - "QImageWriter", - "QInputEvent", - "QInputMethodEvent", - "QIntValidator", - "QKeyEvent", - "QKeySequence", - "QLinearGradient", - "QMatrix2x2", - "QMatrix2x3", - "QMatrix2x4", - "QMatrix3x2", - "QMatrix3x3", - "QMatrix3x4", - "QMatrix4x2", - "QMatrix4x3", - "QMatrix4x4", - "QMouseEvent", - "QMoveEvent", - "QMovie", - "QPaintDevice", - "QPaintEngine", - "QPaintEngineState", - "QPaintEvent", - "QPainter", - "QPainterPath", - "QPainterPathStroker", - "QPalette", - "QPen", - "QPicture", - "QPictureIO", - "QPixmap", - "QPixmapCache", - "QPolygon", - "QPolygonF", - "QQuaternion", - "QRadialGradient", - "QRegExpValidator", - "QRegion", - "QResizeEvent", - "QSessionManager", - "QShortcutEvent", - "QShowEvent", - "QStandardItem", - "QStandardItemModel", - "QStatusTipEvent", - "QSyntaxHighlighter", - "QTabletEvent", - "QTextBlock", - "QTextBlockFormat", - "QTextBlockGroup", - "QTextBlockUserData", - "QTextCharFormat", - "QTextCursor", - "QTextDocument", - "QTextDocumentFragment", - "QTextFormat", - "QTextFragment", - "QTextFrame", - "QTextFrameFormat", - "QTextImageFormat", - "QTextInlineObject", - "QTextItem", - "QTextLayout", - "QTextLength", - "QTextLine", - "QTextList", - "QTextListFormat", - "QTextObject", - "QTextObjectInterface", - "QTextOption", - "QTextTable", - "QTextTableCell", - "QTextTableCellFormat", - "QTextTableFormat", - "QTouchEvent", - "QTransform", - "QValidator", - "QVector2D", - "QVector3D", - "QVector4D", - "QWhatsThisClickedEvent", - "QWheelEvent", - "QWindowStateChangeEvent", - "qAlpha", - "qBlue", - "qGray", - "qGreen", - "qIsGray", - "qRed", - "qRgb", - "qRgba" - ], - "QtHelp": [ - "QHelpContentItem", - "QHelpContentModel", - "QHelpContentWidget", - "QHelpEngine", - "QHelpEngineCore", - "QHelpIndexModel", - "QHelpIndexWidget", - "QHelpSearchEngine", - "QHelpSearchQuery", - "QHelpSearchQueryWidget", - "QHelpSearchResultWidget" - ], - "QtNetwork": [ - "QAbstractNetworkCache", - "QAbstractSocket", - "QAuthenticator", - "QHostAddress", - "QHostInfo", - "QLocalServer", - "QLocalSocket", - "QNetworkAccessManager", - "QNetworkAddressEntry", - "QNetworkCacheMetaData", - "QNetworkConfiguration", - "QNetworkConfigurationManager", - "QNetworkCookie", - "QNetworkCookieJar", - "QNetworkDiskCache", - "QNetworkInterface", - "QNetworkProxy", - "QNetworkProxyFactory", - "QNetworkProxyQuery", - "QNetworkReply", - "QNetworkRequest", - "QNetworkSession", - "QSsl", - "QTcpServer", - "QTcpSocket", - "QUdpSocket" - ], - "QtSql": [ - "QSql", - "QSqlDatabase", - "QSqlDriver", - "QSqlDriverCreatorBase", - "QSqlError", - "QSqlField", - "QSqlIndex", - "QSqlQuery", - "QSqlQueryModel", - "QSqlRecord", - "QSqlRelation", - "QSqlRelationalDelegate", - "QSqlRelationalTableModel", - "QSqlResult", - "QSqlTableModel" - ], - "QtSvg": [ - "QGraphicsSvgItem", - "QSvgGenerator", - "QSvgRenderer", - "QSvgWidget" - ], - "QtTest": [ - "QTest" - ], - "QtWidgets": [ - "QAbstractButton", - "QAbstractGraphicsShapeItem", - "QAbstractItemDelegate", - "QAbstractItemView", - "QAbstractScrollArea", - "QAbstractSlider", - "QAbstractSpinBox", - "QAction", - "QActionGroup", - "QApplication", - "QBoxLayout", - "QButtonGroup", - "QCalendarWidget", - "QCheckBox", - "QColorDialog", - "QColumnView", - "QComboBox", - "QCommandLinkButton", - "QCommonStyle", - "QCompleter", - "QDataWidgetMapper", - "QDateEdit", - "QDateTimeEdit", - "QDesktopWidget", - "QDial", - "QDialog", - "QDialogButtonBox", - "QDirModel", - "QDockWidget", - "QDoubleSpinBox", - "QErrorMessage", - "QFileDialog", - "QFileIconProvider", - "QFileSystemModel", - "QFocusFrame", - "QFontComboBox", - "QFontDialog", - "QFormLayout", - "QFrame", - "QGesture", - "QGestureEvent", - "QGestureRecognizer", - "QGraphicsAnchor", - "QGraphicsAnchorLayout", - "QGraphicsBlurEffect", - "QGraphicsColorizeEffect", - "QGraphicsDropShadowEffect", - "QGraphicsEffect", - "QGraphicsEllipseItem", - "QGraphicsGridLayout", - "QGraphicsItem", - "QGraphicsItemGroup", - "QGraphicsLayout", - "QGraphicsLayoutItem", - "QGraphicsLineItem", - "QGraphicsLinearLayout", - "QGraphicsObject", - "QGraphicsOpacityEffect", - "QGraphicsPathItem", - "QGraphicsPixmapItem", - "QGraphicsPolygonItem", - "QGraphicsProxyWidget", - "QGraphicsRectItem", - "QGraphicsRotation", - "QGraphicsScale", - "QGraphicsScene", - "QGraphicsSceneContextMenuEvent", - "QGraphicsSceneDragDropEvent", - "QGraphicsSceneEvent", - "QGraphicsSceneHelpEvent", - "QGraphicsSceneHoverEvent", - "QGraphicsSceneMouseEvent", - "QGraphicsSceneMoveEvent", - "QGraphicsSceneResizeEvent", - "QGraphicsSceneWheelEvent", - "QGraphicsSimpleTextItem", - "QGraphicsTextItem", - "QGraphicsTransform", - "QGraphicsView", - "QGraphicsWidget", - "QGridLayout", - "QGroupBox", - "QHBoxLayout", - "QHeaderView", - "QInputDialog", - "QItemDelegate", - "QItemEditorCreatorBase", - "QItemEditorFactory", - "QKeyEventTransition", - "QLCDNumber", - "QLabel", - "QLayout", - "QLayoutItem", - "QLineEdit", - "QListView", - "QListWidget", - "QListWidgetItem", - "QMainWindow", - "QMdiArea", - "QMdiSubWindow", - "QMenu", - "QMenuBar", - "QMessageBox", - "QMouseEventTransition", - "QPanGesture", - "QPinchGesture", - "QPlainTextDocumentLayout", - "QPlainTextEdit", - "QProgressBar", - "QProgressDialog", - "QPushButton", - "QRadioButton", - "QRubberBand", - "QScrollArea", - "QScrollBar", - "QShortcut", - "QSizeGrip", - "QSizePolicy", - "QSlider", - "QSpacerItem", - "QSpinBox", - "QSplashScreen", - "QSplitter", - "QSplitterHandle", - "QStackedLayout", - "QStackedWidget", - "QStatusBar", - "QStyle", - "QStyleFactory", - "QStyleHintReturn", - "QStyleHintReturnMask", - "QStyleHintReturnVariant", - "QStyleOption", - "QStyleOptionButton", - "QStyleOptionComboBox", - "QStyleOptionComplex", - "QStyleOptionDockWidget", - "QStyleOptionFocusRect", - "QStyleOptionFrame", - "QStyleOptionGraphicsItem", - "QStyleOptionGroupBox", - "QStyleOptionHeader", - "QStyleOptionMenuItem", - "QStyleOptionProgressBar", - "QStyleOptionRubberBand", - "QStyleOptionSizeGrip", - "QStyleOptionSlider", - "QStyleOptionSpinBox", - "QStyleOptionTab", - "QStyleOptionTabBarBase", - "QStyleOptionTabWidgetFrame", - "QStyleOptionTitleBar", - "QStyleOptionToolBar", - "QStyleOptionToolBox", - "QStyleOptionToolButton", - "QStyleOptionViewItem", - "QStylePainter", - "QStyledItemDelegate", - "QSwipeGesture", - "QSystemTrayIcon", - "QTabBar", - "QTabWidget", - "QTableView", - "QTableWidget", - "QTableWidgetItem", - "QTableWidgetSelectionRange", - "QTapAndHoldGesture", - "QTapGesture", - "QTextBrowser", - "QTextEdit", - "QTimeEdit", - "QToolBar", - "QToolBox", - "QToolButton", - "QToolTip", - "QTreeView", - "QTreeWidget", - "QTreeWidgetItem", - "QTreeWidgetItemIterator", - "QUndoCommand", - "QUndoGroup", - "QUndoStack", - "QUndoView", - "QVBoxLayout", - "QWhatsThis", - "QWidget", - "QWidgetAction", - "QWidgetItem", - "QWizard", - "QWizardPage" - ], - "QtXml": [ - "QDomAttr", - "QDomCDATASection", - "QDomCharacterData", - "QDomComment", - "QDomDocument", - "QDomDocumentFragment", - "QDomDocumentType", - "QDomElement", - "QDomEntity", - "QDomEntityReference", - "QDomImplementation", - "QDomNamedNodeMap", - "QDomNode", - "QDomNodeList", - "QDomNotation", - "QDomProcessingInstruction", - "QDomText", - "QXmlAttributes", - "QXmlContentHandler", - "QXmlDTDHandler", - "QXmlDeclHandler", - "QXmlDefaultHandler", - "QXmlEntityResolver", - "QXmlErrorHandler", - "QXmlInputSource", - "QXmlLexicalHandler", - "QXmlLocator", - "QXmlNamespaceSupport", - "QXmlParseException", - "QXmlReader", - "QXmlSimpleReader" - ], - "QtXmlPatterns": [ - "QAbstractMessageHandler", - "QAbstractUriResolver", - "QAbstractXmlNodeModel", - "QAbstractXmlReceiver", - "QSourceLocation", - "QXmlFormatter", - "QXmlItem", - "QXmlName", - "QXmlNamePool", - "QXmlNodeModelIndex", - "QXmlQuery", - "QXmlResultItems", - "QXmlSchema", - "QXmlSchemaValidator", - "QXmlSerializer" - ] -} - - -"""Misplaced members - -These members from the original submodule are misplaced relative PySide2 - -""" -_misplaced_members = { - "PySide2": { - "QtGui.QStringListModel": "QtCore.QStringListModel", - "QtCore.Property": "QtCore.Property", - "QtCore.Signal": "QtCore.Signal", - "QtCore.Slot": "QtCore.Slot", - "QtCore.QAbstractProxyModel": "QtCore.QAbstractProxyModel", - "QtCore.QSortFilterProxyModel": "QtCore.QSortFilterProxyModel", - "QtCore.QItemSelection": "QtCore.QItemSelection", - "QtCore.QItemSelectionModel": "QtCore.QItemSelectionModel", - }, - "PyQt5": { - "QtCore.pyqtProperty": "QtCore.Property", - "QtCore.pyqtSignal": "QtCore.Signal", - "QtCore.pyqtSlot": "QtCore.Slot", - "QtCore.QAbstractProxyModel": "QtCore.QAbstractProxyModel", - "QtCore.QSortFilterProxyModel": "QtCore.QSortFilterProxyModel", - "QtCore.QStringListModel": "QtCore.QStringListModel", - "QtCore.QItemSelection": "QtCore.QItemSelection", - "QtCore.QItemSelectionModel": "QtCore.QItemSelectionModel", - }, - "PySide": { - "QtGui.QAbstractProxyModel": "QtCore.QAbstractProxyModel", - "QtGui.QSortFilterProxyModel": "QtCore.QSortFilterProxyModel", - "QtGui.QStringListModel": "QtCore.QStringListModel", - "QtGui.QItemSelection": "QtCore.QItemSelection", - "QtGui.QItemSelectionModel": "QtCore.QItemSelectionModel", - "QtCore.Property": "QtCore.Property", - "QtCore.Signal": "QtCore.Signal", - "QtCore.Slot": "QtCore.Slot", - - }, - "PyQt4": { - "QtGui.QAbstractProxyModel": "QtCore.QAbstractProxyModel", - "QtGui.QSortFilterProxyModel": "QtCore.QSortFilterProxyModel", - "QtGui.QItemSelection": "QtCore.QItemSelection", - "QtGui.QStringListModel": "QtCore.QStringListModel", - "QtGui.QItemSelectionModel": "QtCore.QItemSelectionModel", - "QtCore.pyqtProperty": "QtCore.Property", - "QtCore.pyqtSignal": "QtCore.Signal", - "QtCore.pyqtSlot": "QtCore.Slot", - } -} - -""" Compatibility Members - -This dictionary is used to build Qt.QtCompat objects that provide a consistent -interface for obsolete members, and differences in binding return values. - -{ - "binding": { - "classname": { - "targetname": "binding_namespace", - } - } -} -""" -_compatibility_members = { - "PySide2": { - "QHeaderView": { - "sectionsClickable": "QtWidgets.QHeaderView.sectionsClickable", - "setSectionsClickable": - "QtWidgets.QHeaderView.setSectionsClickable", - "sectionResizeMode": "QtWidgets.QHeaderView.sectionResizeMode", - "setSectionResizeMode": - "QtWidgets.QHeaderView.setSectionResizeMode", - "sectionsMovable": "QtWidgets.QHeaderView.sectionsMovable", - "setSectionsMovable": "QtWidgets.QHeaderView.setSectionsMovable", - }, - "QFileDialog": { - "getOpenFileName": "QtWidgets.QFileDialog.getOpenFileName", - "getOpenFileNames": "QtWidgets.QFileDialog.getOpenFileNames", - "getSaveFileName": "QtWidgets.QFileDialog.getSaveFileName", - }, - }, - "PyQt5": { - "QHeaderView": { - "sectionsClickable": "QtWidgets.QHeaderView.sectionsClickable", - "setSectionsClickable": - "QtWidgets.QHeaderView.setSectionsClickable", - "sectionResizeMode": "QtWidgets.QHeaderView.sectionResizeMode", - "setSectionResizeMode": - "QtWidgets.QHeaderView.setSectionResizeMode", - "sectionsMovable": "QtWidgets.QHeaderView.sectionsMovable", - "setSectionsMovable": "QtWidgets.QHeaderView.setSectionsMovable", - }, - "QFileDialog": { - "getOpenFileName": "QtWidgets.QFileDialog.getOpenFileName", - "getOpenFileNames": "QtWidgets.QFileDialog.getOpenFileNames", - "getSaveFileName": "QtWidgets.QFileDialog.getSaveFileName", - }, - }, - "PySide": { - "QHeaderView": { - "sectionsClickable": "QtWidgets.QHeaderView.isClickable", - "setSectionsClickable": "QtWidgets.QHeaderView.setClickable", - "sectionResizeMode": "QtWidgets.QHeaderView.resizeMode", - "setSectionResizeMode": "QtWidgets.QHeaderView.setResizeMode", - "sectionsMovable": "QtWidgets.QHeaderView.isMovable", - "setSectionsMovable": "QtWidgets.QHeaderView.setMovable", - }, - "QFileDialog": { - "getOpenFileName": "QtWidgets.QFileDialog.getOpenFileName", - "getOpenFileNames": "QtWidgets.QFileDialog.getOpenFileNames", - "getSaveFileName": "QtWidgets.QFileDialog.getSaveFileName", - }, - }, - "PyQt4": { - "QHeaderView": { - "sectionsClickable": "QtWidgets.QHeaderView.isClickable", - "setSectionsClickable": "QtWidgets.QHeaderView.setClickable", - "sectionResizeMode": "QtWidgets.QHeaderView.resizeMode", - "setSectionResizeMode": "QtWidgets.QHeaderView.setResizeMode", - "sectionsMovable": "QtWidgets.QHeaderView.isMovable", - "setSectionsMovable": "QtWidgets.QHeaderView.setMovable", - }, - "QFileDialog": { - "getOpenFileName": "QtWidgets.QFileDialog.getOpenFileName", - "getOpenFileNames": "QtWidgets.QFileDialog.getOpenFileNames", - "getSaveFileName": "QtWidgets.QFileDialog.getSaveFileName", - }, - }, -} - - -def _apply_site_config(): - try: - import QtSiteConfig - except ImportError: - # If no QtSiteConfig module found, no modifications - # to _common_members are needed. - pass - else: - # Provide the ability to modify the dicts used to build Qt.py - if hasattr(QtSiteConfig, 'update_members'): - QtSiteConfig.update_members(_common_members) - - if hasattr(QtSiteConfig, 'update_misplaced_members'): - QtSiteConfig.update_misplaced_members(members=_misplaced_members) - - if hasattr(QtSiteConfig, 'update_compatibility_members'): - QtSiteConfig.update_compatibility_members( - members=_compatibility_members) - - -def _new_module(name): - return types.ModuleType(__name__ + "." + name) - - -def _import_sub_module(module, name): - """import_sub_module will mimic the function of importlib.import_module""" - module = __import__(module.__name__ + "." + name) - for level in name.split("."): - module = getattr(module, level) - return module - - -def _setup(module, extras): - """Install common submodules""" - - Qt.__binding__ = module.__name__ - - for name in list(_common_members) + extras: - try: - submodule = _import_sub_module( - module, name) - except ImportError: - continue - - setattr(Qt, "_" + name, submodule) - - if name not in extras: - # Store reference to original binding, - # but don't store speciality modules - # such as uic or QtUiTools - setattr(Qt, name, _new_module(name)) - - -def _wrapinstance(func, ptr, base=None): - """Enable implicit cast of pointer to most suitable class - - This behaviour is available in sip per default. - - Based on http://nathanhorne.com/pyqtpyside-wrap-instance - - Usage: - This mechanism kicks in under these circumstances. - 1. Qt.py is using PySide 1 or 2. - 2. A `base` argument is not provided. - - See :func:`QtCompat.wrapInstance()` - - Arguments: - func (function): Original function - ptr (long): Pointer to QObject in memory - base (QObject, optional): Base class to wrap with. Defaults to QObject, - which should handle anything. - - """ - - assert isinstance(ptr, long), "Argument 'ptr' must be of type " - assert (base is None) or issubclass(base, Qt.QtCore.QObject), ( - "Argument 'base' must be of type ") - - if base is None: - q_object = func(long(ptr), Qt.QtCore.QObject) - meta_object = q_object.metaObject() - class_name = meta_object.className() - super_class_name = meta_object.superClass().className() - - if hasattr(Qt.QtWidgets, class_name): - base = getattr(Qt.QtWidgets, class_name) - - elif hasattr(Qt.QtWidgets, super_class_name): - base = getattr(Qt.QtWidgets, super_class_name) - - else: - base = Qt.QtCore.QObject - - return func(long(ptr), base) - - -def _reassign_misplaced_members(binding): - """Apply misplaced members from `binding` to Qt.py - - Arguments: - binding (dict): Misplaced members - - """ - - for src, dst in _misplaced_members[binding].items(): - src_module, src_member = src.split(".") - dst_module, dst_member = dst.split(".") - - try: - src_object = getattr(Qt, dst_module) - except AttributeError: - # Skip reassignment of non-existing members. - # This can happen if a request was made to - # rename a member that didn't exist, for example - # if QtWidgets isn't available on the target platform. - continue - - dst_value = getattr(getattr(Qt, "_" + src_module), src_member) - - setattr( - src_object, - dst_member, - dst_value - ) - - -def _build_compatibility_members(binding, decorators=None): - """Apply `binding` to QtCompat - - Arguments: - binding (str): Top level binding in _compatibility_members. - decorators (dict, optional): Provides the ability to decorate the - original Qt methods when needed by a binding. This can be used - to change the returned value to a standard value. The key should - be the classname, the value is a dict where the keys are the - target method names, and the values are the decorator functions. - - """ - - decorators = decorators or dict() - - # Allow optional site-level customization of the compatibility members. - # This method does not need to be implemented in QtSiteConfig. - try: - import QtSiteConfig - except ImportError: - pass - else: - if hasattr(QtSiteConfig, 'update_compatibility_decorators'): - QtSiteConfig.update_compatibility_decorators(binding, decorators) - - _QtCompat = type("QtCompat", (object,), {}) - - for classname, bindings in _compatibility_members[binding].items(): - attrs = {} - for target, binding in bindings.items(): - namespaces = binding.split('.') - try: - src_object = getattr(Qt, "_" + namespaces[0]) - except AttributeError as e: - _log("QtCompat: AttributeError: %s" % e) - # Skip reassignment of non-existing members. - # This can happen if a request was made to - # rename a member that didn't exist, for example - # if QtWidgets isn't available on the target platform. - continue - - # Walk down any remaining namespace getting the object assuming - # that if the first namespace exists the rest will exist. - for namespace in namespaces[1:]: - src_object = getattr(src_object, namespace) - - # decorate the Qt method if a decorator was provided. - if target in decorators.get(classname, []): - # staticmethod must be called on the decorated method to - # prevent a TypeError being raised when the decorated method - # is called. - src_object = staticmethod( - decorators[classname][target](src_object)) - - attrs[target] = src_object - - # Create the QtCompat class and install it into the namespace - compat_class = type(classname, (_QtCompat,), attrs) - setattr(Qt.QtCompat, classname, compat_class) - - -def _pyside2(): - """Initialise PySide2 - - These functions serve to test the existence of a binding - along with set it up in such a way that it aligns with - the final step; adding members from the original binding - to Qt.py - - """ - - import PySide2 as module - _setup(module, ["QtUiTools"]) - - Qt.__binding_version__ = module.__version__ - - try: - try: - # Before merge of PySide and shiboken - import shiboken2 - except ImportError: - # After merge of PySide and shiboken, May 2017 - from PySide2 import shiboken2 - - Qt.QtCompat.wrapInstance = ( - lambda ptr, base=None: _wrapinstance( - shiboken2.wrapInstance, ptr, base) - ) - Qt.QtCompat.getCppPointer = lambda object: \ - shiboken2.getCppPointer(object)[0] - - except ImportError: - pass # Optional - - if hasattr(Qt, "_QtUiTools"): - Qt.QtCompat.loadUi = _loadUi - - if hasattr(Qt, "_QtCore"): - Qt.__qt_version__ = Qt._QtCore.qVersion() - Qt.QtCompat.translate = Qt._QtCore.QCoreApplication.translate - - if hasattr(Qt, "_QtWidgets"): - Qt.QtCompat.setSectionResizeMode = \ - Qt._QtWidgets.QHeaderView.setSectionResizeMode - - _reassign_misplaced_members("PySide2") - _build_compatibility_members("PySide2") - - -def _pyside(): - """Initialise PySide""" - - import PySide as module - _setup(module, ["QtUiTools"]) - - Qt.__binding_version__ = module.__version__ - - try: - try: - # Before merge of PySide and shiboken - import shiboken - except ImportError: - # After merge of PySide and shiboken, May 2017 - from PySide import shiboken - - Qt.QtCompat.wrapInstance = ( - lambda ptr, base=None: _wrapinstance( - shiboken.wrapInstance, ptr, base) - ) - Qt.QtCompat.getCppPointer = lambda object: \ - shiboken.getCppPointer(object)[0] - - except ImportError: - pass # Optional - - if hasattr(Qt, "_QtUiTools"): - Qt.QtCompat.loadUi = _loadUi - - if hasattr(Qt, "_QtGui"): - setattr(Qt, "QtWidgets", _new_module("QtWidgets")) - setattr(Qt, "_QtWidgets", Qt._QtGui) - - Qt.QtCompat.setSectionResizeMode = Qt._QtGui.QHeaderView.setResizeMode - - if hasattr(Qt, "_QtCore"): - Qt.__qt_version__ = Qt._QtCore.qVersion() - QCoreApplication = Qt._QtCore.QCoreApplication - Qt.QtCompat.translate = ( - lambda context, sourceText, disambiguation, n: - QCoreApplication.translate( - context, - sourceText, - disambiguation, - QCoreApplication.CodecForTr, - n - ) - ) - - _reassign_misplaced_members("PySide") - _build_compatibility_members("PySide") - - -def _pyqt5(): - """Initialise PyQt5""" - - import PyQt5 as module - _setup(module, ["uic"]) - - try: - import sip - Qt.QtCompat.wrapInstance = ( - lambda ptr, base=None: _wrapinstance( - sip.wrapinstance, ptr, base) - ) - Qt.QtCompat.getCppPointer = lambda object: \ - sip.unwrapinstance(object) - - except ImportError: - pass # Optional - - if hasattr(Qt, "_uic"): - Qt.QtCompat.loadUi = _loadUi - - if hasattr(Qt, "_QtCore"): - Qt.__binding_version__ = Qt._QtCore.PYQT_VERSION_STR - Qt.__qt_version__ = Qt._QtCore.QT_VERSION_STR - Qt.QtCompat.translate = Qt._QtCore.QCoreApplication.translate - - if hasattr(Qt, "_QtWidgets"): - Qt.QtCompat.setSectionResizeMode = \ - Qt._QtWidgets.QHeaderView.setSectionResizeMode - - _reassign_misplaced_members("PyQt5") - _build_compatibility_members('PyQt5') - - -def _pyqt4(): - """Initialise PyQt4""" - - import sip - - # Validation of envivornment variable. Prevents an error if - # the variable is invalid since it's just a hint. - try: - hint = int(QT_SIP_API_HINT) - except TypeError: - hint = None # Variable was None, i.e. not set. - except ValueError: - raise ImportError("QT_SIP_API_HINT=%s must be a 1 or 2") - - for api in ("QString", - "QVariant", - "QDate", - "QDateTime", - "QTextStream", - "QTime", - "QUrl"): - try: - sip.setapi(api, hint or 2) - except AttributeError: - raise ImportError("PyQt4 < 4.6 isn't supported by Qt.py") - except ValueError: - actual = sip.getapi(api) - if not hint: - raise ImportError("API version already set to %d" % actual) - else: - # Having provided a hint indicates a soft constraint, one - # that doesn't throw an exception. - sys.stderr.write( - "Warning: API '%s' has already been set to %d.\n" - % (api, actual) - ) - - import PyQt4 as module - _setup(module, ["uic"]) - - try: - import sip - Qt.QtCompat.wrapInstance = ( - lambda ptr, base=None: _wrapinstance( - sip.wrapinstance, ptr, base) - ) - Qt.QtCompat.getCppPointer = lambda object: \ - sip.unwrapinstance(object) - - except ImportError: - pass # Optional - - if hasattr(Qt, "_uic"): - Qt.QtCompat.loadUi = _loadUi - - if hasattr(Qt, "_QtGui"): - setattr(Qt, "QtWidgets", _new_module("QtWidgets")) - setattr(Qt, "_QtWidgets", Qt._QtGui) - - Qt.QtCompat.setSectionResizeMode = \ - Qt._QtGui.QHeaderView.setResizeMode - - if hasattr(Qt, "_QtCore"): - Qt.__binding_version__ = Qt._QtCore.PYQT_VERSION_STR - Qt.__qt_version__ = Qt._QtCore.QT_VERSION_STR - - QCoreApplication = Qt._QtCore.QCoreApplication - Qt.QtCompat.translate = ( - lambda context, sourceText, disambiguation, n: - QCoreApplication.translate( - context, - sourceText, - disambiguation, - QCoreApplication.CodecForTr, - n) - ) - - _reassign_misplaced_members("PyQt4") - - # QFileDialog QtCompat decorator - def _standardizeQFileDialog(some_function): - """Decorator that makes PyQt4 return conform to other bindings""" - def wrapper(*args, **kwargs): - ret = (some_function(*args, **kwargs)) - - # PyQt4 only returns the selected filename, force it to a - # standard return of the selected filename, and a empty string - # for the selected filter - return ret, '' - - wrapper.__doc__ = some_function.__doc__ - wrapper.__name__ = some_function.__name__ - - return wrapper - - decorators = { - "QFileDialog": { - "getOpenFileName": _standardizeQFileDialog, - "getOpenFileNames": _standardizeQFileDialog, - "getSaveFileName": _standardizeQFileDialog, - } - } - _build_compatibility_members('PyQt4', decorators) - - -def _none(): - """Internal option (used in installer)""" - - Mock = type("Mock", (), {"__getattr__": lambda Qt, attr: None}) - - Qt.__binding__ = "None" - Qt.__qt_version__ = "0.0.0" - Qt.__binding_version__ = "0.0.0" - Qt.QtCompat.loadUi = lambda uifile, baseinstance=None: None - Qt.QtCompat.setSectionResizeMode = lambda *args, **kwargs: None - - for submodule in _common_members.keys(): - setattr(Qt, submodule, Mock()) - setattr(Qt, "_" + submodule, Mock()) - - -def _log(text): - if QT_VERBOSE: - sys.stdout.write(text + "\n") - - -def _loadUi(uifile, baseinstance=None): - """Dynamically load a user interface from the given `uifile` - - This function calls `uic.loadUi` if using PyQt bindings, - else it implements a comparable binding for PySide. - - Documentation: - http://pyqt.sourceforge.net/Docs/PyQt5/designer.html#PyQt5.uic.loadUi - - Arguments: - uifile (str): Absolute path to Qt Designer file. - baseinstance (QWidget): Instantiated QWidget or subclass thereof - - Return: - baseinstance if `baseinstance` is not `None`. Otherwise - return the newly created instance of the user interface. - - """ - if hasattr(baseinstance, "layout") and baseinstance.layout(): - message = ("QLayout: Attempting to add Layout to %s which " - "already has a layout") - raise RuntimeError(message % (baseinstance)) - - if hasattr(Qt, "_uic"): - return Qt._uic.loadUi(uifile, baseinstance) - - elif hasattr(Qt, "_QtUiTools"): - # Implement `PyQt5.uic.loadUi` for PySide(2) - - class _UiLoader(Qt._QtUiTools.QUiLoader): - """Create the user interface in a base instance. - - Unlike `Qt._QtUiTools.QUiLoader` itself this class does not - create a new instance of the top-level widget, but creates the user - interface in an existing instance of the top-level class if needed. - - This mimics the behaviour of `PyQt5.uic.loadUi`. - - """ - - def __init__(self, baseinstance): - super(_UiLoader, self).__init__(baseinstance) - self.baseinstance = baseinstance - - def load(self, uifile, *args, **kwargs): - from xml.etree.ElementTree import ElementTree - - # For whatever reason, if this doesn't happen then - # reading an invalid or non-existing .ui file throws - # a RuntimeError. - etree = ElementTree() - etree.parse(uifile) - - widget = Qt._QtUiTools.QUiLoader.load( - self, uifile, *args, **kwargs) - - # Workaround for PySide 1.0.9, see issue #208 - widget.parentWidget() - - return widget - - def createWidget(self, class_name, parent=None, name=""): - """Called for each widget defined in ui file - - Overridden here to populate `baseinstance` instead. - - """ - - if parent is None and self.baseinstance: - # Supposed to create the top-level widget, - # return the base instance instead - return self.baseinstance - - # For some reason, Line is not in the list of available - # widgets, but works fine, so we have to special case it here. - if class_name in self.availableWidgets() + ["Line"]: - # Create a new widget for child widgets - widget = Qt._QtUiTools.QUiLoader.createWidget(self, - class_name, - parent, - name) - - else: - raise Exception("Custom widget '%s' not supported" - % class_name) - - if self.baseinstance: - # Set an attribute for the new child widget on the base - # instance, just like PyQt5.uic.loadUi does. - setattr(self.baseinstance, name, widget) - - return widget - - widget = _UiLoader(baseinstance).load(uifile) - Qt.QtCore.QMetaObject.connectSlotsByName(widget) - - return widget - - else: - raise NotImplementedError("No implementation available for loadUi") - - -def _convert(lines): - """Convert compiled .ui file from PySide2 to Qt.py - - Arguments: - lines (list): Each line of of .ui file - - Usage: - >> with open("myui.py") as f: - .. lines = _convert(f.readlines()) - - """ - - def parse(line): - line = line.replace("from PySide2 import", "from Qt import QtCompat,") - line = line.replace("QtWidgets.QApplication.translate", - "QtCompat.translate") - if "QtCore.SIGNAL" in line: - raise NotImplementedError("QtCore.SIGNAL is missing from PyQt5 " - "and so Qt.py does not support it: you " - "should avoid defining signals inside " - "your ui files.") - return line - - parsed = list() - for line in lines: - line = parse(line) - parsed.append(line) - - return parsed - - -def _cli(args): - """Qt.py command-line interface""" - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument("--convert", - help="Path to compiled Python module, e.g. my_ui.py") - parser.add_argument("--compile", - help="Accept raw .ui file and compile with native " - "PySide2 compiler.") - parser.add_argument("--stdout", - help="Write to stdout instead of file", - action="store_true") - parser.add_argument("--stdin", - help="Read from stdin instead of file", - action="store_true") - - args = parser.parse_args(args) - - if args.stdout: - raise NotImplementedError("--stdout") - - if args.stdin: - raise NotImplementedError("--stdin") - - if args.compile: - raise NotImplementedError("--compile") - - if args.convert: - sys.stdout.write("#\n" - "# WARNING: --convert is an ALPHA feature.\n#\n" - "# See https://github.com/mottosso/Qt.py/pull/132\n" - "# for details.\n" - "#\n") - - # - # ------> Read - # - with open(args.convert) as f: - lines = _convert(f.readlines()) - - backup = "%s_backup%s" % os.path.splitext(args.convert) - sys.stdout.write("Creating \"%s\"..\n" % backup) - shutil.copy(args.convert, backup) - - # - # <------ Write - # - with open(args.convert, "w") as f: - f.write("".join(lines)) - - sys.stdout.write("Successfully converted \"%s\"\n" % args.convert) - - -def _install(): - # Default order (customise order and content via QT_PREFERRED_BINDING) - default_order = ("PySide2", "PyQt5", "PySide", "PyQt4") - preferred_order = list( - b for b in QT_PREFERRED_BINDING.split(os.pathsep) if b - ) - - order = preferred_order or default_order - - available = { - "PySide2": _pyside2, - "PyQt5": _pyqt5, - "PySide": _pyside, - "PyQt4": _pyqt4, - "None": _none - } - - _log("Order: '%s'" % "', '".join(order)) - - # Allow site-level customization of the available modules. - _apply_site_config() - - found_binding = False - for name in order: - _log("Trying %s" % name) - - try: - available[name]() - found_binding = True - break - - except ImportError as e: - _log("ImportError: %s" % e) - - except KeyError: - _log("ImportError: Preferred binding '%s' not found." % name) - - if not found_binding: - # If not binding were found, throw this error - raise ImportError("No Qt binding were found.") - - # Install individual members - for name, members in _common_members.items(): - try: - their_submodule = getattr(Qt, "_%s" % name) - except AttributeError: - continue - - our_submodule = getattr(Qt, name) - - # Enable import * - __all__.append(name) - - # Enable direct import of submodule, - # e.g. import Qt.QtCore - sys.modules[__name__ + "." + name] = our_submodule - - for member in members: - # Accept that a submodule may miss certain members. - try: - their_member = getattr(their_submodule, member) - except AttributeError: - _log("'%s.%s' was missing." % (name, member)) - continue - - setattr(our_submodule, member, their_member) - - # Backwards compatibility - if hasattr(Qt.QtCompat, 'loadUi'): - Qt.QtCompat.load_ui = Qt.QtCompat.loadUi - - -_install() - -# Setup Binding Enum states -Qt.IsPySide2 = Qt.__binding__ == 'PySide2' -Qt.IsPyQt5 = Qt.__binding__ == 'PyQt5' -Qt.IsPySide = Qt.__binding__ == 'PySide' -Qt.IsPyQt4 = Qt.__binding__ == 'PyQt4' - -"""Augment QtCompat - -QtCompat contains wrappers and added functionality -to the original bindings, such as the CLI interface -and otherwise incompatible members between bindings, -such as `QHeaderView.setSectionResizeMode`. - -""" - -Qt.QtCompat._cli = _cli -Qt.QtCompat._convert = _convert - -# Enable command-line interface -if __name__ == "__main__": - _cli(sys.argv[1:]) - - -# The MIT License (MIT) -# -# Copyright (c) 2016-2017 Marcus Ottosson -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# -# In PySide(2), loadUi does not exist, so we implement it -# -# `_UiLoader` is adapted from the qtpy project, which was further influenced -# by qt-helpers which was released under a 3-clause BSD license which in turn -# is based on a solution at: -# -# - https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8 -# -# The License for this code is as follows: -# -# qt-helpers - a common front-end to various Qt modules -# -# Copyright (c) 2015, Chris Beaumont and Thomas Robitaille -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the -# distribution. -# * Neither the name of the Glue project nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# Which itself was based on the solution at -# -# https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8 -# -# which was released under the MIT license: -# -# Copyright (c) 2011 Sebastian Wiesner -# Modifications by Charl Botha -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files -# (the "Software"),to deal in the Software without restriction, -# including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/lib/classes/context.py b/lib/classes/context.py index c3fe1c0..8ccff7a 100644 --- a/lib/classes/context.py +++ b/lib/classes/context.py @@ -2,15 +2,10 @@ # content = context # executes other scripts on PUBLISH (on task in file name) # version = 0.0.1 -# date = 2017-10-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* diff --git a/lib/classes/software.py b/lib/classes/software.py index 4c55ed2..ff81cf6 100644 --- a/lib/classes/software.py +++ b/lib/classes/software.py @@ -1,15 +1,10 @@ #********************************************************************* # content = setup software attributes # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os @@ -155,77 +150,70 @@ def renderer_path(self): @property def scene_path(self): - scene_path = '' if self._software == "maya": import pymel.core as pm - scene_path = pm.sceneName() + return pm.sceneName() elif self._software == "nuke": import nuke - scene_path = nuke.root().knob('name').value() + return nuke.root().knob('name').value() elif self._software == "max": import MaxPlus - scene_path = MaxPlus.Core.EvalMAXScript("maxFilePath + maxFileName").Get() + return MaxPlus.Core.EvalMAXScript("maxFilePath + maxFileName").Get() elif self._software == "houdini": print "file->houdini" - scene_path = '' + return '' else: LOG.warning('NO scene returned: No software cmd found') - LOG.info('scene_path: {}'.format(scene_path)) return scene_path def scene_save(self): - scene_path = '' if self._software == "maya": import pymel.core as pm - scene_path = pm.saveFile(file) + return pm.saveFile(file) elif self._software == "nuke": import nuke - scene_path = nuke.scriptSave() + return nuke.scriptSave() elif self._software == "max": import MaxPlus - scene_path = MaxPlus.FileManager.Save() + return MaxPlus.FileManager.Save() elif self._software == "houdini": print "file->houdini" return '' else: LOG.warning('NO scene returned: No software cmd found') - return scene_path def scene_saveAs(self, file, setup_scene=False): print 'SAVE' - scene_path = '' if setup_scene: self.scene_setup(file) if self._software == "maya": import pymel.core as pm - scene_path = pm.saveAs(file) + return pm.saveAs(file) elif self._software == "nuke": import nuke nuke.scriptSaveAs(file) elif self._software == "max": import MaxPlus - scene_path = MaxPlus.FileManager.Save(file) + return MaxPlus.FileManager.Save(file) elif self._software == "houdini": print "file->houdini" return '' else: LOG.warning('NO scene returned: No software cmd found') - return scene_path def scene_open(self, file): - scene_path = '' + return '' if self._software == "maya": import pymel.core as pm - scene_path = pm.openFile(file, force=True) + return pm.openFile(file, force=True) elif self._software == "nuke": import nuke - scene_path = nuke.scriptOpen(file) + return nuke.scriptOpen(file) elif self._software == "max": import MaxPlus - scene_path = MaxPlus.FileManager.Open(file) + return MaxPlus.FileManager.Open(file) elif self._software == "houdini": print "file->houdini" return '' else: LOG.warning('NO scene returned: No software cmd found') - return scene_path def scene_import(self, file): pass diff --git a/lib/classes/subclass.py b/lib/classes/subclass.py index dced6d1..f3e78eb 100644 --- a/lib/classes/subclass.py +++ b/lib/classes/subclass.py @@ -1,4 +1,11 @@ - +#********************************************************************* +# content = creates just one object of a class +# version = 0.0.1 +# date = 2018-12-01 +# +# license = MIT +# author = Alexander Richter +#********************************************************************* class Singleton(object): def __new__(cls, *args, **kwds): diff --git a/lib/classes/tank.py b/lib/classes/tank.py index 2edd1e0..9a60da6 100644 --- a/lib/classes/tank.py +++ b/lib/classes/tank.py @@ -1,4 +1,11 @@ - +#********************************************************************* +# content = main hub +# version = 0.0.1 +# date = 2018-12-01 +# +# license = MIT +# author = Alexander Richter +#********************************************************************* import os import libData diff --git a/lib/classes/users.py b/lib/classes/users.py index 8c61b5e..2b8308b 100644 --- a/lib/classes/users.py +++ b/lib/classes/users.py @@ -1,15 +1,10 @@ #********************************************************************* # content = set und get user data # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* # why users? because user is already taken by python diff --git a/lib/libData.py b/lib/libData.py index 0892873..9163bb9 100644 --- a/lib/libData.py +++ b/lib/libData.py @@ -1,15 +1,10 @@ #********************************************************************* # content = get and set data files for project and user # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/libFunc.py b/lib/libFunc.py index c3ff245..630b534 100644 --- a/lib/libFunc.py +++ b/lib/libFunc.py @@ -1,15 +1,10 @@ #********************************************************************* # content = common functions # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/libLog.py b/lib/libLog.py index 7514551..1bf9cca 100644 --- a/lib/libLog.py +++ b/lib/libLog.py @@ -1,15 +1,10 @@ #********************************************************************* # content = write loggings into console and files # version = 0.1.0 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/libRepo.py b/lib/libRepo.py index 371b773..af1a8b6 100644 --- a/lib/libRepo.py +++ b/lib/libRepo.py @@ -1,15 +1,10 @@ #********************************************************************* # content = project data # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/libSnapshot.py b/lib/libSnapshot.py index b3b0a5e..5c3a2d7 100644 --- a/lib/libSnapshot.py +++ b/lib/libSnapshot.py @@ -2,15 +2,10 @@ # content = snapshot # executes other scripts on PUBLISH (on task in file name) # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/utils/arConfig.py b/lib/utils/arConfig.py new file mode 100644 index 0000000..f0d6496 --- /dev/null +++ b/lib/utils/arConfig.py @@ -0,0 +1,79 @@ +#********************************************************************* +# content = saves as +# executes other scripts on PUBLISH (on task in file name) +# version = 0.0.1 +# date = 2018-12-01 +# +# license = MIT +# author = Alexander Richter +#********************************************************************* + +import os +import sys +import getpass +import datetime +from threading import Thread + +data_path = r'D:\Dropbox\github\plex\exe' # replace with your data path +sys.path.append(data_path) +sys.path.append(data_path + '/windows') +sys.path.append(data_path + '/windows/github') +import pipeline +pipeline.Setup() + +from Qt import QtWidgets, QtGui, QtCore, QtCompat + +import libLog +import libData +import arNotice + +from tank import Tank +from users import User +from arUtil import ArUtil + + +#********************************************************************* +# VARIABLE +TITLE = os.path.splitext(os.path.basename(__file__))[0] +LOG = libLog.init(script=TITLE) + + +#********************************************************************* +# CLASS +class ArConfig(ArUtil): + def __init__(self, new_file=True): + super(ArConfig, self).__init__() + + path_ui = ("/").join([os.path.dirname(__file__), "ui", TITLE + ".ui"]) + self.wgArConfig = QtCompat.loadUi(path_ui) + + self.wgHeader.btnOption.hide() + self.wgHeader.cbxAdd.hide() + self.wgHeader.setWindowIcon(QtGui.QIcon(libData.get_img_path("btn/btnConfig48"))) + + self.wgHeader.setWindowTitle(TITLE) + self.wgHeader.btnAccept.setText('Save') + self.wgHeader.layMain.addWidget(self.wgArConfig, 0, 0) + self.resize_widget(self.wgArConfig) + + # self.wgArConfig : always on top + # self.wgArConfig.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) + + self.setup() + self.wgArConfig.show() + LOG.info('START : ArConfig') + + def setup(self): + + self.set_open_folder(os.getenv('DATA_PROJECT_PATH')) + + print"" + + +def start(): + global main_widget + app = QtWidgets.QApplication(sys.argv) + main_widget = ArConfig() + sys.exit(app.exec_()) + +start() diff --git a/lib/utils/arDesktop.py b/lib/utils/arDesktop.py index a31507c..621e8e3 100644 --- a/lib/utils/arDesktop.py +++ b/lib/utils/arDesktop.py @@ -1,15 +1,10 @@ #********************************************************************* # content = OS startup file # version = 0.6.0 -# date = 2017-07-07 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/utils/arLoad.py b/lib/utils/arLoad.py index 45062ff..56858a3 100644 --- a/lib/utils/arLoad.py +++ b/lib/utils/arLoad.py @@ -2,15 +2,10 @@ # content = saves work and publish files # executes other scripts on PUBLISH (on task in file name) # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/utils/arNotice.py b/lib/utils/arNotice.py index 4bf3e28..b09d600 100644 --- a/lib/utils/arNotice.py +++ b/lib/utils/arNotice.py @@ -1,15 +1,10 @@ #********************************************************************* # content = informs project members about changes # version = 0.1.0 -# date = 2017-09-20 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/utils/arSave.py b/lib/utils/arSave.py index 56b9999..84acfdf 100644 --- a/lib/utils/arSave.py +++ b/lib/utils/arSave.py @@ -2,15 +2,10 @@ # content = saves work and publish files # executes other scripts on PUBLISH (on task in file name) # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/utils/arSaveAs.py b/lib/utils/arSaveAs.py index 46f42f7..6d848f3 100644 --- a/lib/utils/arSaveAs.py +++ b/lib/utils/arSaveAs.py @@ -2,15 +2,10 @@ # content = saves as # executes other scripts on PUBLISH (on task in file name) # version = 0.0.1 -# date = 2017-08-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/utils/arUtil.py b/lib/utils/arUtil.py index e18e986..284e339 100644 --- a/lib/utils/arUtil.py +++ b/lib/utils/arUtil.py @@ -1,15 +1,10 @@ #********************************************************************* # content = parent widget # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/lib/utils/ui/arConfig.ui b/lib/utils/ui/arConfig.ui new file mode 100644 index 0000000..9a27469 --- /dev/null +++ b/lib/utils/ui/arConfig.ui @@ -0,0 +1,382 @@ + + + Form + + + + 0 + 0 + 621 + 401 + + + + Form + + + + + + + + + + + + 23 + 23 + + + + + 10 + 75 + true + + + + + + + + + + + + master + + + + + + + + + 1 + + + + project + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + name + + + + + + + + + + Qt::Horizontal + + + + + + + path + + + + + + + + + + resolution + + + + + + + + + + + + x + + + + + + + + + + + + fps + + + + + + + + + + + + + software + + + + + + + 10 + 75 + true + + + + Maya + + + + + + + + + version + + + + + + + path + + + + + + + + + + + + + + + + 10 + 75 + true + + + + Nuke + + + + + + + + + version + + + + + + + path + + + + + + + + + + + + + + + + 10 + 75 + true + + + + 3ds Max + + + + + + + 10 + + + + + version + + + + + + + path + + + + + + + + + + + + + + + + 10 + 75 + true + + + + Houdini + + + + + + + 0 + + + + + version + + + + + + + path + + + + + + + + + + + + + + + + rules + + + + + + + + start_frame + + + + + + + 1001 + + + + + + + + 75 + true + + + + SCENE + + + + + + + assets + + + + + + + shots + + + + + + + render + + + + + + + "{set}/{asset}/{task}/{status}/{asset}_{task}_{version}.{extension}" + + + + + + + "{asset}/{task}/{status}/{asset}_{task}_{version}.{extension}" + + + + + + + "{asset}/{task}/{status}/{asset}_{task}_{version}.{frame}.{extension}" + + + + + + + + + + + + + + diff --git a/software/houdini/init.py b/software/houdini/init.py index db04c5e..1b58008 100644 --- a/software/houdini/init.py +++ b/software/houdini/init.py @@ -1,15 +1,10 @@ #********************************************************************* # content = houdini init # version = 0.0.1 -# date = 2017-08-20 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* diff --git a/software/max/max_menu.py b/software/max/max_menu.py index b12f656..19221cd 100644 --- a/software/max/max_menu.py +++ b/software/max/max_menu.py @@ -1,3 +1,11 @@ +#********************************************************************* +# content = menu 3Ds Max +# version = 0.0.1 +# date = 2018-12-01 +# +# license = MIT +# author = Alexander Richter +#********************************************************************* import os diff --git a/software/max/startup.py b/software/max/startup.py index b04297b..8d02309 100644 --- a/software/max/startup.py +++ b/software/max/startup.py @@ -1,15 +1,10 @@ #********************************************************************* # content = startup 3Ds Max # version = 0.0.1 -# date = 2017-08-15 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/software/maya/scripts/maya_settings.py b/software/maya/scripts/maya_settings.py index e2d1a00..f76da0e 100644 --- a/software/maya/scripts/maya_settings.py +++ b/software/maya/scripts/maya_settings.py @@ -1,15 +1,10 @@ #********************************************************************* # content = maya settings # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/software/maya/scripts/maya_utils.py b/software/maya/scripts/maya_utils.py index 20719dc..4c8ebbf 100644 --- a/software/maya/scripts/maya_utils.py +++ b/software/maya/scripts/maya_utils.py @@ -1,15 +1,10 @@ #********************************************************************* # content = maya utils # version = 0.6.0 -# date = 2017-07-10 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import maya.mel as mel diff --git a/software/maya/shelf/shelf_plex.mel b/software/maya/shelf/shelf_plex.mel deleted file mode 100644 index 4fee603..0000000 --- a/software/maya/shelf/shelf_plex.mel +++ /dev/null @@ -1,318 +0,0 @@ -global proc shelf_plex () { - global string $gBuffStr; - global string $gBuffStr0; - global string $gBuffStr1; - - - shelfButton - -enableCommandRepeat 1 - -enable 1 - -width 38 - -height 38 - -manage 1 - -visible 1 - -preventOverride 0 - -annotation "Save Scene" - -enableBackground 0 - -highlightColor 0.321569 0.521569 0.65098 - -align "center" - -label "Save" - -labelOffset 0 - -rotation 0 - -flipX 0 - -flipY 0 - -useAlpha 1 - -font "plainLabelFont" - -overlayLabelColor 0.8 0.8 0.8 - -overlayLabelBackColor 0 0 0 0.5 - -image "btnSave48.png" - -image1 "btnSave48.png" - -style "iconOnly" - -marginWidth 1 - -marginHeight 1 - -command "import arSave; arSave.start()" - -sourceType "python" - -commandRepeatable 1 - -flat 1 - ; - shelfButton - -enableCommandRepeat 1 - -enable 1 - -width 38 - -height 38 - -manage 1 - -visible 1 - -preventOverride 0 - -annotation "Load Scene" - -enableBackground 0 - -highlightColor 0.321569 0.521569 0.65098 - -align "center" - -label "Load" - -labelOffset 0 - -rotation 0 - -flipX 0 - -flipY 0 - -useAlpha 1 - -font "plainLabelFont" - -overlayLabelColor 0.8 0.8 0.8 - -overlayLabelBackColor 0 0 0 0.5 - -image "btnLoad48.png" - -image1 "btnLoad48.png" - -style "iconOnly" - -marginWidth 1 - -marginHeight 1 - -command "import arLoad; arLoad.start()" - -sourceType "python" - -commandRepeatable 1 - -flat 1 - ; - shelfButton - -enableCommandRepeat 1 - -enable 1 - -width 13 - -height 35 - -manage 1 - -visible 1 - -preventOverride 0 - -annotation "-------------------" - -enableBackground 0 - -highlightColor 0.321569 0.521569 0.65098 - -align "center" - -label "-------------------" - -labelOffset 0 - -rotation 0 - -flipX 0 - -flipY 0 - -useAlpha 1 - -font "plainLabelFont" - -overlayLabelColor 0.8 0.8 0.8 - -overlayLabelBackColor 0 0 0 0.2 - -image "concrete.png" - -image1 "concrete.png" - -style "iconOnly" - -marginWidth 1 - -marginHeight 1 - -command "// Dont touch me, pervert!" - -sourceType "mel" - -commandRepeatable 1 - -flat 1 - ; - shelfButton - -enableCommandRepeat 1 - -enable 1 - -width 38 - -height 38 - -manage 1 - -visible 1 - -preventOverride 0 - -annotation "Outliner" - -enableBackground 0 - -highlightColor 0.321569 0.521569 0.65098 - -align "center" - -label "Outliner" - -labelOffset 0 - -rotation 0 - -flipX 0 - -flipY 0 - -useAlpha 1 - -font "plainLabelFont" - -overlayLabelColor 0.8 0.8 0.8 - -overlayLabelBackColor 0 0 0 0.2 - -image "shelf_outliner35.png" - -image1 "shelf_outliner35.png" - -style "iconOnly" - -marginWidth 1 - -marginHeight 1 - -command "OutlinerWindow" - -sourceType "mel" - -commandRepeatable 1 - -flat 1 - ; - shelfButton - -enableCommandRepeat 1 - -enable 1 - -width 38 - -height 38 - -manage 1 - -visible 1 - -preventOverride 0 - -annotation "Hypershade" - -enableBackground 0 - -highlightColor 0.321569 0.521569 0.65098 - -align "center" - -label "Hypershade" - -labelOffset 0 - -rotation 0 - -flipX 0 - -flipY 0 - -useAlpha 1 - -font "plainLabelFont" - -overlayLabelColor 0.8 0.8 0.8 - -overlayLabelBackColor 0 0 0 0.2 - -image "shelf_hypershade35.png" - -image1 "shelf_hypershade35.png" - -style "iconOnly" - -marginWidth 1 - -marginHeight 1 - -command "HypershadeWindow" - -sourceType "mel" - -commandRepeatable 1 - -flat 1 - ; - shelfButton - -enableCommandRepeat 1 - -enable 1 - -width 38 - -height 38 - -manage 1 - -visible 1 - -preventOverride 0 - -annotation "Node Editor" - -enableBackground 0 - -highlightColor 0.321569 0.521569 0.65098 - -align "center" - -label "Node Editor" - -labelOffset 0 - -rotation 0 - -flipX 0 - -flipY 0 - -useAlpha 1 - -font "plainLabelFont" - -overlayLabelColor 0.8 0.8 0.8 - -overlayLabelBackColor 0 0 0 0.2 - -image "shelf_nodeEditor35.png" - -image1 "shelf_nodeEditor35.png" - -style "iconOnly" - -marginWidth 1 - -marginHeight 1 - -command "NodeEditorWindow" - -sourceType "mel" - -commandRepeatable 1 - -flat 1 - ; - shelfButton - -enableCommandRepeat 1 - -enable 1 - -width 38 - -height 38 - -manage 1 - -visible 1 - -preventOverride 0 - -annotation "Edit animation curves" - -enableBackground 0 - -highlightColor 0.321569 0.521569 0.65098 - -align "center" - -label "Graph Editor" - -labelOffset 0 - -rotation 0 - -flipX 0 - -flipY 0 - -useAlpha 1 - -font "plainLabelFont" - -overlayLabelColor 0.8 0.8 0.8 - -overlayLabelBackColor 0 0 0 0.5 - -image "shelf_graphEditor35.png" - -image1 "shelf_graphEditor35.png" - -style "iconOnly" - -marginWidth 1 - -marginHeight 1 - -command "GraphEditor" - -sourceType "mel" - -commandRepeatable 1 - -flat 1 - ; - shelfButton - -enableCommandRepeat 1 - -enable 1 - -width 13 - -height 35 - -manage 1 - -visible 1 - -preventOverride 0 - -annotation "-------------------" - -enableBackground 0 - -highlightColor 0.321569 0.521569 0.65098 - -align "center" - -label "-------------------" - -labelOffset 0 - -rotation 0 - -flipX 0 - -flipY 0 - -useAlpha 1 - -font "plainLabelFont" - -overlayLabelColor 0.8 0.8 0.8 - -overlayLabelBackColor 0 0 0 0.2 - -image "concrete.png" - -image1 "concrete.png" - -style "iconOnly" - -marginWidth 1 - -marginHeight 1 - -command "// Dont touch me, pervert!" - -sourceType "mel" - -commandRepeatable 1 - -flat 1 - ; - shelfButton - -enableCommandRepeat 1 - -enable 1 - -width 38 - -height 38 - -manage 1 - -visible 1 - -preventOverride 0 - -annotation "Report Error and Suggestions" - -enableBackground 0 - -highlightColor 0.321569 0.521569 0.65098 - -align "center" - -label "Report" - -labelOffset 0 - -rotation 0 - -flipX 0 - -flipY 0 - -useAlpha 1 - -font "plainLabelFont" - -overlayLabelColor 0.8 0.8 0.8 - -overlayLabelBackColor 0 0 0 0.2 - -image "shelf_report35.png" - -image1 "shelf_report35.png" - -style "iconOnly" - -marginWidth 1 - -marginHeight 1 - -command "import libFunc; libFunc.get_help("issues")" - -sourceType "python" - -commandRepeatable 1 - -flat 1 - ; - shelfButton - -enableCommandRepeat 1 - -enable 1 - -width 38 - -height 38 - -manage 1 - -visible 1 - -preventOverride 0 - -annotation "Open Wiki in your browser" - -enableBackground 0 - -highlightColor 0.321569 0.521569 0.65098 - -align "center" - -label "Help" - -labelOffset 0 - -rotation 0 - -flipX 0 - -flipY 0 - -useAlpha 1 - -font "plainLabelFont" - -overlayLabelColor 0.8 0.8 0.8 - -overlayLabelBackColor 0 0 0 0.2 - -image "shelf_help35.png" - -image1 "shelf_help35.png" - -style "iconOnly" - -marginWidth 1 - -marginHeight 1 - -command "import libFunc;libFunc.get_help(\"shelf\")" - -sourceType "python" - -commandRepeatable 1 - -flat 1 - ; - -} diff --git a/software/maya/userSetup.py b/software/maya/userSetup.py index d0e1c97..210cb6e 100644 --- a/software/maya/userSetup.py +++ b/software/maya/userSetup.py @@ -1,15 +1,10 @@ #********************************************************************* # content = setup maya # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/software/nuke/init.py b/software/nuke/init.py index 74fdafa..e9414a3 100644 --- a/software/nuke/init.py +++ b/software/nuke/init.py @@ -1,15 +1,10 @@ #********************************************************************* # content = init Nuke # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/software/nuke/menu.py b/software/nuke/menu.py index c36e566..dc9986b 100644 --- a/software/nuke/menu.py +++ b/software/nuke/menu.py @@ -1,15 +1,10 @@ #********************************************************************* # content = menu Nuke # version = 0.0.1 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os diff --git a/software/nuke/scripts/write_node.py b/software/nuke/scripts/write_node.py index 4b78d12..ca3cf58 100644 --- a/software/nuke/scripts/write_node.py +++ b/software/nuke/scripts/write_node.py @@ -1,15 +1,10 @@ #********************************************************************* # content = write node functions # version = 1.0.0 -# date = 2017-01-01 +# date = 2018-12-01 # # license = MIT -# copyright = Copyright 2017 Filmakademie Baden-Wuerttemberg, Animationsinstitut -# author = Alexander Richter -#********************************************************************* -# This source file has been developed within the scope of the -# Technical Director course at Filmakademie Baden-Wuerttemberg. -# http://td.animationsinstitut.de +# author = Alexander Richter #********************************************************************* import os