def paintEvent(self, event: QPaintEvent) -> None: """ Render the scrollbars using Qt's draw control, and render the frame elements dependent on whether the partner horizontal / vertical scrollbar is also visible """ painter = QStylePainter(self) if self.orientation() == Qt.Vertical: painter.translate(0.0, self.frame_width) else: painter.translate(self.frame_width, 0.0) option = QStyleOptionSlider() option.initFrom(self) option.maximum = self.maximum() option.minimum = self.minimum() option.pageStep = self.pageStep() option.singleStep = self.singleStep() option.sliderPosition = self.sliderPosition() option.orientation = self.orientation() if self.orientation() == Qt.Horizontal: option.state |= QStyle.State_Horizontal rect = self.renderRect() option.rect = rect option.palette = self.palette() option.subControls = ( QStyle.SC_ScrollBarAddLine | QStyle.SC_ScrollBarSubLine | QStyle.SC_ScrollBarAddPage | QStyle.SC_ScrollBarSubPage | QStyle.SC_ScrollBarFirst | QStyle.SC_ScrollBarLast ) painter.fillRect( option.rect, QApplication.palette().window().color().darker(102) ) self.style().drawComplexControl(QStyle.CC_ScrollBar, option, painter) # Highlight the handle (slider) on mouse over, otherwise render it as normal option.subControls = QStyle.SC_ScrollBarSlider if option.state & QStyle.State_MouseOver == QStyle.State_MouseOver: palette = self.palette() if sys.platform == "win32": color = self.palette().base().color() else: color = self.palette().button().color().lighter(102) palette.setColor(QPalette.Button, color) option.palette = palette self.style().drawComplexControl(QStyle.CC_ScrollBar, option, painter) # Render the borders painter.resetTransform() painter.setPen(self.midPen) self.renderEdges(painter)
def paintEvent(self, event: QPaintEvent) -> None: """ Render the custom widget """ painter = QStylePainter() painter.begin(self) x = 0 y = 0 width = self.width() rect = self.rect() # type: QRect palette = QPalette() backgroundColor = palette.base().color() if (self.display_type == DestinationDisplayType.usage_only and QSplitter().lineWidth()): pen = painter.pen() painter.setPen(backgroundColor) painter.drawLine(rect.topLeft(), rect.topRight()) painter.setPen(self.midPen) painter.drawLine(rect.bottomLeft(), rect.bottomRight()) painter.drawLine(rect.topLeft(), rect.bottomLeft()) if (self.container_vertical_scrollbar_visible is None or not self.container_vertical_scrollbar_visible): painter.drawLine(rect.topRight(), rect.bottomRight()) painter.setPen(pen) w = QSplitter().lineWidth() rect.adjust(w, w, -w, -w) painter.fillRect(rect, backgroundColor) if self.storage_space is None: painter.end() return highlight_menu = self.mouse_pos == DestinationDisplayMousePos.menu if self.display_type != DestinationDisplayType.usage_only: # Render the folder icon, folder name, and the menu icon self.deviceDisplay.paint_header( painter=painter, x=x, y=y, width=width, display_name=self.display_name, icon=self.icon, highlight_menu=highlight_menu, ) y = y + self.deviceDisplay.dc.device_name_height if self.display_type != DestinationDisplayType.folder_only: # Render the projected storage space if self.display_type == DestinationDisplayType.usage_only: y += self.deviceDisplay.dc.padding photos_size_to_download, videos_size_to_download = adjusted_download_size( photos_size_to_download=self.photos_size_to_download, videos_size_to_download=self.videos_size_to_download, os_stat_device=self.os_stat_device, downloading_to=self._downloading_to, ) details = make_body_details( bytes_total=self.storage_space.bytes_total, bytes_free=self.storage_space.bytes_free, files_to_display=self.files_to_display, marked=self.marked, photos_size_to_download=photos_size_to_download, videos_size_to_download=videos_size_to_download, ) self.deviceDisplay.paint_body(painter=painter, x=x, y=y, width=width, details=details) painter.end()
def paintEvent(self, event: QPaintEvent) -> None: """ Render the custom widget """ painter = QStylePainter() painter.begin(self) x = 0 y = 0 width = self.width() rect = self.rect() # type: QRect if self.display_type == DestinationDisplayType.usage_only and QSplitter( ).lineWidth(): # Draw a frame if that's what the style requires option = QStyleOptionFrame() option.initFrom(self) painter.drawPrimitive(QStyle.PE_Frame, option) w = QSplitter().lineWidth() rect.adjust(w, w, -w, -w) palette = QPalette() backgroundColor = palette.base().color() painter.fillRect(rect, backgroundColor) if self.storage_space is None: painter.end() return highlight_menu = self.mouse_pos == DestinationDisplayMousePos.menu if self.display_type != DestinationDisplayType.usage_only: # Render the folder icon, folder name, and the menu icon self.deviceDisplay.paint_header(painter=painter, x=x, y=y, width=width, display_name=self.display_name, icon=self.icon, highlight_menu=highlight_menu) y = y + self.deviceDisplay.device_name_height if self.display_type != DestinationDisplayType.folder_only: # Render the projected storage space if self.display_type == DestinationDisplayType.usage_only: y += self.deviceDisplay.padding photos_size_to_download, videos_size_to_download = adjusted_download_size( photos_size_to_download=self.photos_size_to_download, videos_size_to_download=self.videos_size_to_download, os_stat_device=self.os_stat_device, downloading_to=self._downloading_to) details = make_body_details( bytes_total=self.storage_space.bytes_total, bytes_free=self.storage_space.bytes_free, files_to_display=self.files_to_display, marked=self.marked, photos_size_to_download=photos_size_to_download, videos_size_to_download=videos_size_to_download) self.deviceDisplay.paint_body(painter=painter, x=x, y=y, width=width, details=details) painter.end()