def __init__(self, context, tool_name, process_tracker=None, parent=None): super(ToolWidget, self).__init__(parent) self.context = context self.tool_name = tool_name self.process_tracker = process_tracker tool_icon = get_icon_widget("spanner") self.label = QtGui.QLabel(tool_name) self.instances_label = QtGui.QLabel("") self.instances_label.setEnabled(False) update_font(self.instances_label, italic=True) if self.context: self.setCursor(QtCore.Qt.PointingHandCursor) if self.process_tracker: entries = self.get_processes() self.set_instance_count(len(entries)) layout = QtGui.QHBoxLayout() layout.setSpacing(2) layout.setContentsMargins(2, 2, 2, 2) layout.addWidget(tool_icon) layout.addWidget(self.label, 1) layout.addWidget(self.instances_label) self.setLayout(layout)
def __init__(self, context_model, variant, reference_variant=None, hide_locks=False, read_only=False, parent=None): super(VariantCellWidget, self).__init__(parent) ContextViewMixin.__init__(self, context_model) self.variant = variant self.reference_variant = reference_variant self.stale = False self.lock_status = None self.lock_icon = None self.hide_locks = hide_locks self.read_only = read_only self.icons = [] # 3-tuples: widget, name, tooltip qname = self.variant.qualified_package_name self.label = QtGui.QLabel(qname) desc = "%s@%s" % (qname, self.variant.wrapped.location) self.label.setToolTip(desc) self.depends_icon = get_icon_widget("depends", "dependent package") self.depends_icon.hide() create_pane([self.label, self.depends_icon, None], True, compact=True, parent_widget=self) self.refresh()
def get_icon_widget(filename, tooltip=None): icon = get_icon(filename) icon_label = QtGui.QLabel() icon_label.setPixmap(icon) if tooltip: icon_label.setToolTip(tooltip) return icon_label
def __init__(self, pivot_widget, width=240, height=160, parent=None): super(TimeSelecterPopup, self).__init__(parent) self.setFrameStyle(QtGui.QFrame.Panel | QtGui.QFrame.Raised) self.setWindowFlags(QtCore.Qt.Popup) self.seconds = None self.label = QtGui.QLabel("") canvas_frame = QtGui.QFrame() canvas_frame.setFrameStyle(QtGui.QFrame.Panel | QtGui.QFrame.Sunken) canvas = Canvas(width, height) layout = QtGui.QVBoxLayout() layout.setSpacing(2) layout.setContentsMargins(2, 2, 2, 2) layout.addWidget(canvas) canvas_frame.setLayout(layout) create_pane([self.label, canvas_frame], False, compact=True, parent_widget=self) self.adjustSize() pt = pivot_widget.rect().topLeft() global_pt = pivot_widget.mapToGlobal(pt) self.move(global_pt - QtCore.QPoint(0, self.height())) canvas.secondsHover.connect(self._secondsHover) canvas.secondsClicked.connect(self._secondsClicked)
def __init__(self, context_model=None, reference_variant=None, in_window=False, parent=None): """ Args: reference_variant (`Variant`): Used to show the difference between two variants. in_window (bool): If True, the 'view changelogs' option turns into a checkbox, dropping the 'View in window' option. """ super(VariantVersionsWidget, self).__init__(parent) ContextViewMixin.__init__(self, context_model) self.in_window = in_window self.variant = None self.reference_variant = reference_variant self.pending_changelog_packages = None self.label = QtGui.QLabel() self.changelog_edit = ChangelogEdit() self.table = VariantVersionsTable(self.context_model, reference_variant=reference_variant) self.tab = QtGui.QTabWidget() self.tab.addTab(self.table, "list view") self.tab.addTab(self.changelog_edit, "changelogs") self.tab.currentChanged.connect(self._tabIndexChanged) buttons = [None] if self.in_window: close_btn = QtGui.QPushButton("Close") buttons.append(close_btn) close_btn.clicked.connect(self._close_window) else: browse_versions_btn = QtGui.QPushButton("Browse Versions...") browse_versions_btn.clicked.connect(self._browseVersions) buttons.append(browse_versions_btn) window_btn = QtGui.QPushButton("View In Window...") window_btn.clicked.connect(self._view_changelogs_window) buttons.append(window_btn) btn_pane = create_pane(buttons, True, compact=not self.in_window) pane = create_pane([self.label, self.tab, btn_pane], False, compact=True) self.set_main_widget(pane) self.set_loader_swap_delay(300) self.clear()
def __init__(self, help_, index, parent=None): super(HelpEntryWidget, self).__init__(parent) self.help_ = help_ self.index = index icon = get_icon_widget("help") label = self.help_.sections[self.index][0] label_widget = QtGui.QLabel(label) self.setCursor(QtCore.Qt.PointingHandCursor) create_pane([icon, label_widget, None], True, compact=True, parent_widget=self)
def __init__(self, parent=None): super(ContextEnvironWidget, self).__init__(parent) self.table = ContextEnvironTable() self.split_combo = QtGui.QComboBox() for label, _ in self.split_entries: self.split_combo.addItem(label) label = QtGui.QLabel("split values by:") btn_pane = create_pane([None, label, self.split_combo], True) self.layout = QtGui.QVBoxLayout() self.layout.addWidget(self.table) self.layout.addWidget(btn_pane) self.setLayout(self.layout) self.split_combo.currentIndexChanged.connect(self._set_split_char) app.config.attach(self.split_combo, "split_char")
def __init__(self, request, type_, parent=None): super(EffectivePackageCellWidget, self).__init__(parent) if type_ == "implicit": icon_name = "cog" tooltip = "implicit package" else: icon_name = type_ tooltip = PatchLock[type_].description icon_widget = get_icon_widget(icon_name, tooltip) label = QtGui.QLabel(str(request)) update_font(label, italic=True) create_pane([icon_widget, (label, 1)], True, parent_widget=self, compact=True) self.setEnabled(False) # this widget always disabled by design
def __init__(self, parent=None): super(PackageLoadingWidget, self).__init__(parent) self.main_widget = None self.worker = None self.swap_delay = 0 self.threads = [] self.timer = None label = QtGui.QLabel("Loading Packages...") self.bar = QtGui.QProgressBar() self.loading_widget = create_pane([label, self.bar, None], False, compact=True) create_pane([self.loading_widget], True, compact=True, compact_spacing=0, parent_widget=self)
def __init__(self, context_model=None, parent=None): super(VariantHelpWidget, self).__init__(parent) ContextViewMixin.__init__(self, context_model) self.variant = None self.help_1 = None self.help_2 = None self.table_1 = self._create_table() self.table_2 = self._create_table() self.tab = QtGui.QTabWidget() self.tab.addTab(self.table_1, "latest help") self.tab.addTab(self.table_2, "help") self.no_help_label = QtGui.QLabel("No help found.") self.no_help_label.setAlignment(QtCore.Qt.AlignCenter) pane = create_pane([self.no_help_label, self.tab], False, compact=True) self.set_main_widget(pane) self.set_loader_swap_delay(300) self.clear()
def __init__(self, parent=None): super(VariantSummaryWidget, self).__init__(parent) self.variant = None self.label = QtGui.QLabel() self.table = QtGui.QTableWidget(0, 1) self.table.setGridStyle(QtCore.Qt.DotLine) self.table.setFocusPolicy(QtCore.Qt.NoFocus) self.table.setSelectionMode(QtGui.QAbstractItemView.NoSelection) self.table.setAlternatingRowColors(True) hh = self.table.horizontalHeader() hh.setStretchLastSection(True) hh.setVisible(False) vh = self.table.verticalHeader() vh.setResizeMode(QtGui.QHeaderView.ResizeToContents) create_pane([self.label, self.table], False, compact=True, parent_widget=self) self.clear()
def __init__(self, context_model=None, parent=None): super(ContextDetailsWidget, self).__init__(parent) ContextViewMixin.__init__(self, context_model) self.code_pending = True self.overview_edit = StreamableTextEdit() self.overview_edit.setStyleSheet("font: 9pt 'Courier'") self.graph_btn = ViewGraphButton(context_model) btn_pane = create_pane([None, self.graph_btn], True) overview_pane = create_pane([self.overview_edit, btn_pane], False) self.code_edit = SearchableTextEdit() self.code_edit.setStyleSheet("font: 9pt 'Courier'") self.code_combo = QtGui.QComboBox() # strip out 'sh' and 'csh', they only differ from bash and tcsh in shell # startup behaviour, which is irrelevant here code_types = set(get_shell_types()) - set([system.shell, "sh", "csh"]) code_types = [system.shell] + sorted(code_types) + ["python dict"] for code_type in code_types: self.code_combo.addItem(code_type) label = QtGui.QLabel("Format:") btn_pane = create_pane([None, label, self.code_combo], True) code_pane = create_pane([self.code_edit, btn_pane], False) self.environ_widget = ContextEnvironWidget() self.addTab(overview_pane, "overview") self.addTab(code_pane, "shell code") self.addTab(self.environ_widget, "environment") self.code_combo.currentIndexChanged.connect(self._update_code) self.currentChanged.connect(self._currentTabChanged) self.refresh()
def __init__(self, parent=None): super(AboutDialog, self).__init__(parent) self.setWindowTitle("About Rez") version = Version(__version__) public_version = version.trim(2) label = QtGui.QLabel( "<font size='+2'><b>Rez version %s</b></font><br><br>" "Build version %s." % (str(public_version), str(version))) close_btn = QtGui.QPushButton("Close") github_btn = QtGui.QPushButton("Github") github_icon = get_icon("github_32", as_qicon=True) github_btn.setIcon(github_icon) btn_pane = create_pane([None, github_btn, close_btn], True, compact=True) create_pane([label, None, btn_pane], False, parent_widget=self) github_btn.clicked.connect(self._goto_github) close_btn.clicked.connect(self.close) close_btn.setFocus()
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_variant(self, variant, preloaded_packages=None): self.clear() hh = self.horizontalHeader() self.setHorizontalHeaderLabels(["path", "released"]) hh.setResizeMode(0, QtGui.QHeaderView.Interactive) hh.setStretchLastSection(True) hh.setVisible(True) package_paths = self.context_model.packages_path package_filter = PackageFilterList.from_pod( self.context_model.package_filter) if variant and variant.wrapped.location in package_paths: self.version_index = -1 self.reference_version_index = -1 reference_version = None range_ = None if self.reference_variant and self.reference_variant.name == variant.name: reference_version = self.reference_variant.version versions = sorted([reference_version, variant.version]) range_ = VersionRange.as_span(*versions) timestamp = self.context().timestamp if preloaded_packages is not None: if range_ is None: packages = preloaded_packages else: packages = [ x for x in preloaded_packages if x.version in range_ ] else: it = iter_packages(name=variant.name, paths=package_paths, range_=range_) packages = sorted(it, key=lambda x: x.version, reverse=True) self.setRowCount(len(packages)) brush = self.palette().brush(QtGui.QPalette.Active, QtGui.QPalette.Base) for row, package in enumerate(packages): version_str = str(package.version) + ' ' item = QtGui.QTableWidgetItem(version_str) item.setTextAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.setVerticalHeaderItem(row, item) if package.version == variant.version: self.version_index = row update_font(item, bold=True) if reference_version is not None \ and package.version == reference_version: self.reference_version_index = row update_font(item, bold=True, italic=True) def _item(): item_ = QtGui.QTableWidgetItem() item_.setBackground( brush) # get rid of mouse-hover coloring return item_ if package.timestamp: release_str = get_timestamp_str(package.timestamp) in_future = (package.timestamp > timestamp) else: release_str = '-' in_future = False item = _item() txt = package.uri + " " icons = [] if in_future: icon = get_icon_widget( "clock_warning", "package did not exist at time of resolve") icons.append(icon) rule = package_filter.excludes(package) if rule: icon = get_icon_widget( "excluded", "package was excluded by rule %s" % str(rule)) icons.append(icon) if icons: label = QtGui.QLabel(txt) pane = create_pane(icons + [label, None], True, compact=True) self.setCellWidget(row, 0, pane) else: item.setText(txt) self.setItem(row, 0, item) item = _item() item.setText(release_str) self.setItem(row, 1, item) vh = self.verticalHeader() vh.setVisible(True) self.resizeColumnsToContents() hh.setStretchLastSection(True) self.update() self.allow_selection = True self.selectRow(self.version_index) self.allow_selection = False self.variant = variant