def _setup_ui(self):

        self.setMinimumWidth(200)
        self.setLayout(Q.VBoxLayout())

        self._thumbnail = Q.Label('')
        self._thumbnail.setFrameShape(Q.Frame.StyledPanel)
        self._thumbnail.setFrameShadow(Q.Frame.Raised)
        self.layout().addWidget(self._thumbnail)

        form = Q.FormLayout()
        self.layout().addLayout(form)

        self._created_by_label = Q.Label()
        form.addRow("<b>By:</b>", self._created_by_label)

        self._created_at_label = Q.Label()
        form.addRow("<b>At:</b>", self._created_at_label)

        self._description_label = Q.Label()
        self._description_label.setWordWrap(True)
        form.addRow("<b>Desc:</b>", self._description_label)

        self._timeRangeLabel = Q.Label()
        form.addRow("<b>Frames:</b>", self._timeRangeLabel)

        self.layout().addStretch()
Exemple #2
0
    def _setup_ui(self):
        self.setWindowTitle('Open A Ticket')
        self.setMinimumSize(400, 300)
        self.setLayout(Q.FormLayout())

        self._exception = Q.ComboBox()

        if self._allow_no_exception:
            self._exception.addItem('None', None)

        for exc_type, exc_value, exc_traceback in self._exc_infos:
            uuid = tickets.exception_uuid(exc_type, exc_value, exc_traceback)
            self._exception.addItem('%s: %s [%s]' %
                                    (exc_type.__name__, exc_value, uuid))
        self._exception.setCurrentIndex(self._exception.count() - 1)
        self._exception.currentIndexChanged.connect(self._on_exception)

        if not self._allow_no_exception and len(self._exc_infos) == 1:
            self.layout().addRow("Exception",
                                 Q.Label(self._exception.currentText()))
        else:
            self.layout().addRow("Exception", self._exception)

        self._title_label = Q.Label("Title")
        self._title = Q.LineEdit('Bug Report')
        self.layout().addRow(self._title_label, self._title)

        self._description = Q.TextEdit(
            'Please describe the problem, and any steps to reproduce it and/or fix it.'
        )
        self._description.focusInEvent = lambda *args: self._description.selectAll(
        )
        self.layout().addRow("Description", self._description)

        self._screenshot_path = None
        self._screenshot = Q.Label()
        self._screenshot.setFixedSize(133, 100)
        self._screenshot.setPixmap(
            Q.Pixmap(
                os.path.abspath(
                    os.path.join(__file__, '..', 'art',
                                 'no_screenshot.png'))).scaledToHeight(
                                     100, Q.SmoothTransformation))
        self._screenshot.setFrameShadow(Q.Frame.Sunken)
        self._screenshot.setFrameShape(Q.Frame.Panel)
        self._screenshot.mouseReleaseEvent = self._on_screenshot
        self.layout().addRow("Screenshot", self._screenshot)

        buttons = Q.HBoxLayout()
        self.layout().addRow("", buttons)

        buttons.addStretch()

        button = Q.PushButton('Submit')
        button.clicked.connect(self._on_submit)
        buttons.addWidget(button)

        self._description.setFocus()
        self._description.selectAll()
        self._on_exception(self._exception.currentIndex())
Exemple #3
0
    def _setupUI(self):

        self._nameExample = Q.Label()

        self.setWindowTitle("Submit to FarmSoup")
        self.setMinimumWidth(400)

        outerLayout = Q.VBoxLayout()
        self.setLayout(outerLayout)

        layout = Q.FormLayout()
        outerLayout.addLayout(layout)

        self._name = Q.LineEdit(self._job.name)
        layout.addRow("Job Name:", self._name)

        scrollArea = Q.ScrollArea()
        scrollWidget = Q.QWidget()
        scrollArea.setWidgetResizable(True)
        scrollArea.setWidget(scrollWidget)
        scrollLayout = Q.VBoxLayout()
        scrollWidget.setLayout(scrollLayout)
        layout.addRow("Cameras:", scrollArea)

        self._cameras = []
        for camera in self._job.camera_names:
            on = self._job.cameras[camera]
            box = Q.CheckBox(camera)
            if on:
                box.setChecked(True)
            scrollLayout.addWidget(box)
            self._cameras.append(box)

        scrollArea = Q.ScrollArea()
        scrollWidget = Q.QWidget()
        scrollArea.setWidgetResizable(True)
        scrollArea.setWidget(scrollWidget)
        layers = Q.VBoxLayout()
        scrollWidget.setLayout(layers)
        layout.addRow("Layers:", scrollArea)

        self._layers = {}
        for layer in reversed(self._job.layer_names):
            on = _layerState.get(layer, self._job.layers[layer])
            renderer = self._job.renderers.get(
                layer) or self._job.renderers['masterLayer']
            box = Q.CheckBox('{} ({})'.format(layer, renderer))
            if on:
                box.setChecked(True)
            layers.addWidget(box)
            self._layers[layer] = box

            @box.stateChanged.connect
            def boxStateChanged(state, layer=layer):
                _layerState[layer] = state

        layerButtons = Q.HBoxLayout()
        layout.addRow("", layerButtons)

        layerButton = Q.PushButton('All')
        layerButton.setFixedSize(50, 18)

        @layerButton.clicked.connect
        def _onAllLayersButton(*args):
            for layerBox in self._layers.itervalues():
                layerBox.setChecked(True)

        layerButtons.addWidget(layerButton)

        layerButton = Q.PushButton('None')
        layerButton.setFixedSize(50, 18)

        @layerButton.clicked.connect
        def _onAllLayersButton(*args):
            for layerBox in self._layers.itervalues():
                layerBox.setChecked(False)

        layerButtons.addWidget(layerButton)

        layerButtons.addStretch()

        layerButton = Q.PushButton('Defaults')
        layerButton.setFixedSize(50, 18)

        @layerButton.clicked.connect
        def _onAllLayersButton(*args):
            for layer, layerBox in self._layers.iteritems():
                layerBox.setChecked(self._job.layers[layer])

        layerButtons.addWidget(layerButton)

        self._startFrame = Q.SpinBox(
            minimum=-1e6,
            maximum=1e6,
            value=self._job.start_frame,
            minimumWidth=75,
        )
        self._endFrame = Q.SpinBox(
            minimum=-1e6,
            maximum=1e6,
            value=self._job.end_frame,
            minimumWidth=75,
        )
        self._frameChunk = Q.SpinBox(
            minimum=1,
            maximum=100,
            value=self._job.frame_chunk,
            minimumWidth=50,
        )

        rangeLayout = Q.HBoxLayout()
        layout.addRow("Frame:", rangeLayout)
        rangeLayout.addWidget(self._startFrame)
        rangeLayout.addWidget(Q.Label("to"))
        rangeLayout.addWidget(self._endFrame)

        self._resMode = Q.ComboBox()

        width = self._job.width
        height = self._job.height

        self._width = Q.SpinBox(
            value=width,
            minimum=1,
            maximum=1e6,
            minimumWidth=75,
            enabled=False,
        )
        self._height = Q.SpinBox(
            value=height,
            minimum=1,
            maximum=1e6,
            minimumWidth=75,
            enabled=False,
        )

        for label, scale in (
            ('full', 1),
            ('half', 2),
            ('quarter', 4),
        ):
            sWidth = width / scale
            sHeight = height / scale
            self._resMode.addItem(label, (sWidth, sHeight))
        self._resMode.addItem("other")
        self._resMode.currentIndexChanged.connect(self._on_resMode_changed)

        resLayout = Q.HBoxLayout()
        layout.addRow("Resolution:", resLayout)
        resLayout.addWidget(self._resMode)
        resLayout.addWidget(self._width)
        resLayout.addWidget(Q.Label('x'))
        resLayout.addWidget(self._height)

        self._namePattern = Q.ComboBox()
        self._namePattern.currentIndexChanged.connect(
            self._on_nameFormat_changed)
        self._namePattern.addItem('{layer},{camera}/{scene},{layer},{camera}')
        self._namePattern.addItem('{layer}/{scene}.{layer}')
        self._namePattern.addItem('{scene}')
        self._namePattern.addItem('< ADD FORMAT >')

        nameLayout = Q.VBoxLayout()

        layout.addRow("File naming:", nameLayout)
        nameLayout.addWidget(self._namePattern)
        nameLayout.addWidget(self._nameExample)

        self._skipExisting = Q.CheckBox("Skip Existing Frames", checked=True)
        layout.addRow("", self._skipExisting)

        self._locationTabs = Q.TabWidget()
        layout.addRow("Location:", self._locationTabs)

        publishTab = Q.Widgets.Widget()
        self._locationTabs.addTab(publishTab, "Publish")
        publishLayout = Q.VBoxLayout()
        publishTab.setLayout(publishLayout)
        publishLayout.addWidget(
            Q.Label("<i>No publish controls at this time.</i>"))

        manualTab = Q.Widgets.Widget()
        self._locationTabs.addTab(manualTab, "Manual")
        manualLayout = Q.FormLayout()
        manualTab.setLayout(manualLayout)

        self._outputDirectory = Q.LineEdit(text=self._job.output_directory)
        self._outputDirectoryBrowse = Q.PushButton("Browse")
        self._outputDirectoryBrowse.clicked.connect(
            self._on_outputDirectoryBrowse_clicked)
        outputDirectoryLayout = Q.HBoxLayout()
        outputDirectoryLayout.addWidget(self._outputDirectory)
        outputDirectoryLayout.addWidget(self._outputDirectoryBrowse)
        manualLayout.addRow("", outputDirectoryLayout)

        self._driverTabs = Q.TabWidget()
        layout.addRow("Driver", self._driverTabs)

        farmsoupTab = Q.Widgets.Widget()
        self._driverTabs.addTab(farmsoupTab, "FarmSoup")
        farmsoupLayout = Q.FormLayout()
        farmsoupTab.setLayout(farmsoupLayout)

        farmsoupLayout.addRow("Chunk size:", self._frameChunk)

        self._maxWorkers = Q.SpinBox(
            value=self._job.max_workers,
            minimum=0,
            maximum=100,
            minimumWidth=50,
        )
        farmsoupLayout.addRow("Max workers:", self._maxWorkers)

        self._reserveRenderer = Q.CheckBox("Reserve Renderer", checked=True)
        farmsoupLayout.addRow("", self._reserveRenderer)

        commandLineTab = Q.Widgets.Widget()
        self._driverTabs.addTab(commandLineTab, "CLI")
        commandLineLayout = Q.VBoxLayout()
        commandLineTab.setLayout(commandLineLayout)
        commandLineLayout.addWidget(
            Q.Label('<i>Command line will be printed to Script Editor.</i>'))

        buttonLayout = Q.HBoxLayout()
        outerLayout.addLayout(buttonLayout)
        buttonLayout.addStretch()

        self._submit = Q.PushButton("Submit")
        self._submit.clicked.connect(self._on_submit_clicked)
        buttonLayout.addWidget(self._submit)
        buttonLayout.addStretch()

        self._updateExamples()