def __init__(self, graph_str, filepath, parent=None, prune_to=None): super(WriteGraphDialog, self).__init__(parent) self.setWindowTitle("Rendering graph...") self.writer = Writer(graph_str, filepath, prune_to) self.thread = None self._finished = False self.success = False self.busy_cursor = QtGui.QCursor(QtCore.Qt.WaitCursor) self.bar = QtGui.QProgressBar() self.bar.setRange(0, 0) self.cancel_btn = QtGui.QPushButton("Cancel") pane = create_pane([None, self.cancel_btn], True) create_pane([self.bar, pane], False, parent_widget=self) self.writer.graph_written.connect(self._graph_written) self.cancel_btn.clicked.connect(self._cancel)
def load_context(self, filepath): context = None busy_cursor = QtGui.QCursor(QtCore.Qt.WaitCursor) with self.status("Loading %s..." % filepath): QtGui.QApplication.setOverrideCursor(busy_cursor) try: context = ResolvedContext.load(filepath) except ResolvedContextError as e: QtGui.QMessageBox.critical(self.main_window, "Failed to load context", str(e)) finally: QtGui.QApplication.restoreOverrideCursor() if context: path = os.path.realpath(filepath) self.config.prepend_string_list("most_recent_contexts", path, "max_most_recent_contexts") return context
def set_packages(self, packages): # note - I'm not just using appendHtml()/appendPlainText, because there's # a qt bug causing this to mess up the formatting. Hence the need to # convert plaintext to html manually. lines = [] for package in packages: heading = str(package.version) body = (package.changelog or "-").strip() body = plaintext_to_html(body) html = ("<p><font size='+2'><b>%s</b></font><br>%s<br></p>" % (heading, body)) lines.append(html) busy_cursor = QtGui.QCursor(QtCore.Qt.WaitCursor) QtGui.QApplication.setOverrideCursor(busy_cursor) try: self.clear() self.appendHtml(''.join(lines)) self.moveCursor(QtGui.QTextCursor.Start) finally: QtGui.QApplication.restoreOverrideCursor()
def __init__(self, context_model, parent=None, advanced=False): config_key = ("layout/window/advanced_resolve" if advanced else "layout/window/resolve") super(ResolveDialog, self).__init__(parent) StoreSizeMixin.__init__(self, app.config, config_key) self.setWindowTitle("Resolve") self.setContentsMargins(0, 0, 0, 0) self.context_model = context_model self.advanced = advanced self.resolver = None self.thread = None self.started = False self._finished = False self.busy_cursor = QtGui.QCursor(QtCore.Qt.WaitCursor) self.edit = StreamableTextEdit() self.edit.setStyleSheet("font: 9pt 'Courier'") self.bar = QtGui.QProgressBar() self.bar.setRange(0, 10) self.save_context_btn = QtGui.QPushButton("Save Context As...") self.graph_btn = QtGui.QPushButton("View Graph...") self.ok_btn = QtGui.QPushButton("Ok") self.start_again_btn = QtGui.QPushButton("Start Again") self.cancel_btn = QtGui.QPushButton("Cancel") self.resolve_btn = QtGui.QPushButton("Resolve") self.ok_btn.hide() self.graph_btn.hide() self.start_again_btn.hide() self.save_context_btn.hide() btn_pane = create_pane([None, self.save_context_btn, self.graph_btn, self.start_again_btn, self.ok_btn, self.cancel_btn, self.resolve_btn], not self.advanced) layout = QtGui.QVBoxLayout() layout.addWidget(self.bar) layout.addWidget(self.edit, 1) self.resolve_group = None self.max_fails_combo = None self.verbosity_combo = None self.show_package_loads_checkbox = None # this is solely to execute _start_resolve() as soon as the dialog opens self.timer = QtCore.QTimer() self.timer.setInterval(1) self.timer.setSingleShot(True) self.timer.timeout.connect(self._on_dialog_open) if self.advanced: self.resolve_group = QtGui.QGroupBox("resolve settings") label = QtGui.QLabel("maximum fails:") self.max_fails_combo = QtGui.QComboBox() self.max_fails_combo.setEditable(True) self.max_fails_combo.addItem("-") self.max_fails_combo.addItem("1") self.max_fails_combo.addItem("2") self.max_fails_combo.addItem("3") app.config.attach(self.max_fails_combo, "resolve/max_fails") max_fails_pane = create_pane([None, label, self.max_fails_combo], True) label = QtGui.QLabel("verbosity:") self.verbosity_combo = QtGui.QComboBox() self.verbosity_combo.addItem("0") self.verbosity_combo.addItem("1") self.verbosity_combo.addItem("2") app.config.attach(self.verbosity_combo, "resolve/verbosity") verbosity_pane = create_pane([None, label, self.verbosity_combo], True) self.show_package_loads_checkbox = QtGui.QCheckBox("show package loads") self.show_package_loads_checkbox.setLayoutDirection(QtCore.Qt.RightToLeft) app.config.attach(self.show_package_loads_checkbox, "resolve/show_package_loads") show_loads_pane = create_pane([None, self.show_package_loads_checkbox], True) self.timestamp_widget = TimestampWidget(self.context_model) context = self.context_model.context() if context and context.requested_timestamp: self.timestamp_widget.set_time(context.requested_timestamp) left_pane = create_pane([self.timestamp_widget, None], False, compact=True) right_pane = create_pane([max_fails_pane, verbosity_pane, show_loads_pane, None], False, compact=True) create_pane([left_pane, right_pane], True, parent_widget=self.resolve_group) pane = create_pane([self.resolve_group, None, btn_pane], True) self.cancel_btn.hide() layout.addWidget(pane) else: self.resolve_btn.hide() layout.addWidget(btn_pane) self.setLayout(layout) self.cancel_btn.clicked.connect(self._cancel_resolve) self.resolve_btn.clicked.connect(self._start_resolve) self.graph_btn.clicked.connect(self._view_graph) self.save_context_btn.clicked.connect(self._save_context) self.start_again_btn.clicked.connect(self._reset) self.ok_btn.clicked.connect(self.close)
def set_package_name(self, package_name): package_paths = self.context_model.packages_path self.packages = {} self.clear() rows = [] busy_cursor = QtGui.QCursor(QtCore.Qt.WaitCursor) QtGui.QApplication.setOverrideCursor(busy_cursor) try: packages = list( iter_packages(name=str(package_name), paths=package_paths)) except RezError: packages = [] if not packages: self.setEnabled(False) self.package_name = None QtGui.QApplication.restoreOverrideCursor() return for i, package in enumerate( sorted(packages, key=lambda x: x.version, reverse=True)): version_str = str(package.version) + ' ' path_str = package.uri + " " release_str = get_timestamp_str(package.timestamp) \ if package.timestamp else '-' enabled = self.callback(package) if self.callback else True rows.append((enabled, version_str, path_str, release_str)) self.packages[i] = package QtGui.QApplication.restoreOverrideCursor() self.setRowCount(len(rows)) first_selectable_row = -1 for i, row in enumerate(rows): enabled, version_str = row[:2] row = row[2:] item = QtGui.QTableWidgetItem(version_str) item.setTextAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.setVerticalHeaderItem(i, item) for j in range(len(row)): item = QtGui.QTableWidgetItem(row[j]) if enabled: if first_selectable_row == -1: first_selectable_row = i else: item.setFlags(QtCore.Qt.NoItemFlags) self.setItem(i, j, item) self.setHorizontalHeaderLabels(["path", "released"]) self.resizeRowsToContents() self.resizeColumnsToContents() vh = self.verticalHeader() vh.setVisible(True) hh = self.horizontalHeader() hh.setStretchLastSection(True) hh.setVisible(True) self.package_name = package_name self.setEnabled(True) if first_selectable_row != -1: self.selectRow(first_selectable_row)