Exemplo n.º 1
0
    def reset(self):
        self.open()

        mhv = MHVersion()

        self.write("VERSION: %s", os.environ['MH_VERSION'])
        self.write("SHORT VERSION: %s", os.environ['MH_SHORT_VERSION'])
        self.write("LONG VERSION: %s", mhv.getFullVersionStr())
        self.write("BASEMESH VERSION: %s", os.environ['MH_MESH_VERSION'])
        self.write("IS BUILT (FROZEN): %s", os.environ['MH_FROZEN'])
        self.write("IS RELEASE VERSION: %s", os.environ['MH_RELEASE'])
        self.write("DEFAULT ENCODING: %s", sys.getdefaultencoding())
        self.write("FILESYSTEM ENCODING: %s", sys.getfilesystemencoding())
        self.write("STDOUT ENCODING: %s", sys.stdout.encoding)
        self.write("LOCALE PREFERRED ENCODING: %s",
                   locale.getpreferredencoding(False))
        self.write("WORKING DIRECTORY: %s", getpath.pathToUnicode(os.getcwd()))
        self.write("HOME LOCATION: %s",
                   getpath.pathToUnicode(getpath.getHomePath()))
        syspath = os.path.pathsep.join(
            [getpath.pathToUnicode(p) for p in sys.path])
        self.write("PYTHON PATH: %s", syspath)
        self.write("DLL PATH: %s", getpath.pathToUnicode(os.environ['PATH']))
        version = re.sub(r"[\r\n]", " ", sys.version)
        self.write("SYS.VERSION: %s", version)
        self.write("SYS.PLATFORM: %s", sys.platform)
        self.write("SYS.EXECUTABLE: %s", sys.executable)
        self.write("PLATFORM.MACHINE: %s", platform.machine())
        self.write("PLATFORM.PROCESSOR: %s", platform.processor())
        self.write("PLATFORM.UNAME.RELEASE: %s", platform.uname()[2])

        if sys.platform.startswith('linux'):
            try:
                self.write("PLATFORM.LINUX_DISTRIBUTION: %s",
                           ' '.join(platform.linux_distribution()))
            except AttributeError:
                try:
                    import distro
                    self.write("PLATFORM.LINUX_DISTRIBUTION: %s",
                               ' '.join(distro.linux_distribution()))
                except ImportError:
                    self.write("PLATFORM.LINUX_DISTRIBUTION: %s", 'Unknown')

        if sys.platform.startswith('darwin'):
            self.write("PLATFORM.MAC_VER: %s", platform.mac_ver()[0])

        if sys.platform.startswith('win'):
            self.write("PLATFORM.WIN32_VER: %s",
                       " ".join(platform.win32_ver()))

        import numpy
        self.write("NUMPY.VERSION: %s", numpy.__version__)
        numpyVer = numpy.__version__.split('.')
        if int(numpyVer[0]) <= 1 and int(numpyVer[1]) < 6:
            raise DependencyError(
                'MakeHuman requires at least numpy version 1.6')

        self.close()
Exemplo n.º 2
0
def getVersionStr(verbose=True, full=False):
    """
    Verbose version as string, for displaying and information
    """
    if isRelease() and not full:
        return _versionStr()
    else:
        from mhversion import MHVersion
        mhv = MHVersion()
        return mhv.currentBranch + ":" + mhv.currentShortCommit
Exemplo n.º 3
0
class Frame(QtWidgets.QMainWindow):

    mhv = MHVersion()
    title = mhv.fullTitle

    def __init__(self, app, size):
        self.app = app
        super(Frame, self).__init__()

        self.setWindowTitle(self.title)
        if supportsSVG():
            # SVG icons allow better resolution when resized
            self.setWindowIcon(
                QtGui.QIcon(getpath.getSysPath("icons/makehuman_bg.svg")))
        else:
            # Older Qt libraries do not support svg icons
            self.setWindowIcon(
                QtGui.QIcon(getpath.getSysPath("icons/makehuman.png")))

        self.setAttribute(QtCore.Qt.WA_KeyCompression, False)
        self.setAcceptDrops(True)
        self.resize(*size)

        # work-around for mac QT toolbar bug described in: https://bugreports.qt-project.org/browse/QTBUG-18567
        if sys.platform.startswith("darwin"):
            self.toolbar = self.addToolBar("Toolbar")
            self.toolbar.hide()

        self.statusBar = qtgui.StatusBar()
        self.setStatusBar(self.statusBar)
        self.central = QtWidgets.QWidget()
        self.setCentralWidget(self.central)
        self.create()

    def panel(self):
        widget = QtWidgets.QWidget()
        widget.setAttribute(QtCore.Qt.WA_OpaquePaintEvent, False)
        widget.setAutoFillBackground(True)
        widget.setContentsMargins(0, 0, 0, 0)
        return widget

    def create(self):
        self.v_layout = QtWidgets.QGridLayout(self.central)
        self.v_layout.setContentsMargins(0, 0, 0, 0)
        self.v_layout.setSpacing(0)

        self.tab_panel = self.panel()
        self.v_layout.addWidget(self.tab_panel, 0, 0)
        self.v_layout.setRowStretch(0, 0)

        self.tab_layout = QtWidgets.QGridLayout(self.tab_panel)
        self.tab_layout.setContentsMargins(0, 0, 0, 0)
        self.tabs = qtgui.Tabs()
        self.tab_layout.addWidget(self.tabs)

        self.h_layout = QtWidgets.QGridLayout()
        self.h_layout.setContentsMargins(0, 0, 0, 0)
        self.h_layout.setSpacing(0)
        self.v_layout.addLayout(self.h_layout, 1, 0)
        self.v_layout.setRowStretch(1, 1)

        self.b_panel = self.panel()
        self.bottom = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.BottomToTop,
                                           self.b_panel)
        self.v_layout.addWidget(self.b_panel, 2, 0)
        self.v_layout.setRowStretch(2, 0)

        self.l_panel = self.panel()
        self.left_top = QtWidgets.QStackedLayout(self.l_panel)
        self.h_layout.addWidget(self.l_panel, 0, 0)
        self.h_layout.setColumnStretch(0, 0)

        self.t_layout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.TopToBottom)
        self.h_layout.addLayout(self.t_layout, 0, 1)
        self.h_layout.setColumnStretch(1, 1)

        self.t_panel = self.panel()
        self.top = VLayout(self.t_panel)
        self.top.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize)
        self.t_layout.addWidget(self.t_panel)
        self.t_panel.setSizePolicy(QtWidgets.QSizePolicy.Ignored,
                                   QtWidgets.QSizePolicy.Maximum)

        self.canvas = Canvas(self, app=self.app)
        self.t_layout.addWidget(self.canvas)

        self.r_panel = self.panel()
        self.right_top = QtWidgets.QStackedLayout(self.r_panel)
        self.h_layout.addWidget(self.r_panel, 0, 2)
        self.h_layout.setColumnStretch(2, 0)

        self.progressBar = qtgui.ProgressBar()
        self.bottom.addWidget(self.progressBar)

    def changeEvent(self, event):
        """QMainWindow method override that is called whenever a change
        happens on the widget."""
        if event.type() == QtCore.QEvent.WindowStateChange:
            if 'normal geometry' in self.windowState:
                self.normalStateGeometry = self.storeGeometry()
        QtWidgets.QMainWindow.changeEvent(self, event)

    def resizeEvent(self, event):
        """QMainWindow method override that is called when
        the widget is resized."""
        if 'normal geometry' in self.windowState:
            self.normalStateGeometry = self.storeGeometry()
        QtWidgets.QMainWindow.resizeEvent(self, event)

    def moveEvent(self, event):
        """QMainWindow method override that is called when
        the widget is moved."""
        if 'normal geometry' in self.windowState:
            self.normalStateGeometry = self.storeGeometry()
        QtWidgets.QMainWindow.moveEvent(self, event)

    def addPanels(self):
        left = TaskPanel()
        right = TaskPanel()
        left.setObjectName("LeftTaskPanel")
        right.setObjectName("RightTaskPanel")
        self.left_top.addWidget(left)
        self.right_top.addWidget(right)
        return left, right

    def showPanels(self, left, right):
        self.left_top.setCurrentWidget(left)
        self.right_top.setCurrentWidget(right)

    def addTopWidget(self, widget, *args, **kwargs):
        self.top.addWidget(widget, *args, **kwargs)
        return widget

    def removeTopWidget(self, widget):
        self.top.removeWidget(widget)

    def closeEvent(self, ev):
        ev.ignore()
        self.app.callEvent('onQuit', None)

    def refreshLayout(self, widget=None):
        if widget is None:
            widget = self
        widget.updateGeometry()
        for child in QtWidgets.QWidget.children(widget):
            if child.isWidgetType():
                self.refreshLayout(child)

    @staticmethod
    def _asWindowStateSet(stateflags):
        """Construct a set of window state strings
        from a QWindowStates flags object.

        Multiple window states may apply to the same window, for example
        a window might be shown minimized, but set to be maximized when
        restored."""

        state = set()
        if stateflags & QtCore.Qt.WindowMaximized:
            state.add('maximized')
        if stateflags & QtCore.Qt.WindowMinimized:
            state.add('minimized')
        if stateflags & QtCore.Qt.WindowFullScreen:
            state.add('fullscreen')
        if stateflags & QtCore.Qt.WindowActive:
            state.add('active')
        if not (stateflags &
                (QtCore.Qt.WindowMaximized | QtCore.Qt.WindowFullScreen)):
            state.add('normal geometry')
            if not stateflags & QtCore.Qt.WindowMinimized:
                state.add('normal')
        return state

    def getWindowState(self):
        """Return a set of window state strings that apply to the frame."""
        return self._asWindowStateSet(QtWidgets.QMainWindow.windowState(self))

    def setWindowState(self, state):
        """Set the window state according to a window state set
        retrieved by getWindowState()."""
        # Order matters here. A window might be maximized when restored,
        # but currently minimized in taskbar.
        if 'maximized' in state:
            self.showMaximized()
        if 'fullscreen' in state:
            self.showFullscreen()
        if 'normal geometry' in state:
            self.showNormal()
        if 'minimized' in state:
            self.showMinimized()

    windowState = property(getWindowState, setWindowState)

    def storeGeometry(self):
        """Return a saveable dictionary describing the window's geometry.
        It can be used for saving the window's shape into a settings file."""
        geometry = {'width': self.width(), 'height': self.height(),
            'x': self.pos().x(), 'y': self.pos().y()
            } if 'normal geometry' in self.windowState \
            else self.normalStateGeometry.copy()
        geometry['state'] = list(self.windowState)
        return geometry

    def restoreGeometry(self, geometry):
        """Set the window shape according to a dictionary saved
        with storeGeometry()."""
        self.normalStateGeometry = geometry
        self.resize(geometry['width'], geometry['height'])
        self.move(geometry['x'], geometry['y'])
        self.windowState = set(geometry['state'])

    def dragEnterEvent(self, event):
        """Decide whether to accept files dragged into the MakeHuman window."""
        if event.mimeData().hasUrls():
            url = event.mimeData().urls()[0]
            path = getpath.pathToUnicode(url.toLocalFile())
            if os.path.splitext(path)[1].lower() == '.mhm':
                event.acceptProposedAction()

    def dropEvent(self, event):
        """Support drag and dropping .MHM files in the MakeHuman window to load
        them"""
        mime_data = event.mimeData()
        if not mime_data.hasUrls():
            return

        url = mime_data.urls()[0]
        path = getpath.pathToUnicode(url.toLocalFile())
        if os.path.splitext(path)[1].lower() != '.mhm':
            return

        if self.app.currentFile.modified:
            self.app.prompt(
                "Load",
                "You have unsaved changes. Are you sure you want to close the current file?",
                "Yes", "No", lambda: self.app.loadHumanMHM(path))
        else:
            self.app.loadHumanMHM(path)
Exemplo n.º 4
0
 def onClicked(event):
     mhv = MHVersion()
     gui3d.app.clipboard().setText(mhv.getFullVersionStr())