Source code for RWESharp.widgets.SimpleGeoView

from __future__ import annotations
import os
from PySide6.QtWidgets import QGraphicsView, QGraphicsPixmapItem, QGraphicsScene
from PySide6.QtGui import QColor, QPixmap, QBrush, QPainter
from PySide6.QtCore import QRect, QPoint, Qt
from RWS.Core import PATH_FILES_IMAGES, CONSTS
from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from BaseMod.geo.geoUIConnectors import GeoSettings


[docs] class SimpleGeoViewport(QGraphicsView):
[docs] def __init__(self, parent=None): super().__init__(parent) self.setMouseTracking(True) self.lastpos = QPoint(0, 0) self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.setCursor(Qt.CursorShape.SizeAllCursor)
[docs] def update_pixmaps(self, change=True): if os.path.exists(self.settings.imagepath.value): self.geo_texture = QPixmap(self.settings.imagepath.value) else: self.geo_texture = QPixmap(os.path.join(PATH_FILES_IMAGES, "notfound.png")) self.l1 = QPixmap(self.geo_texture) self.l1_2 = QPixmap(self.geo_texture) self.l2 = QPixmap(self.geo_texture) self.l2_2 = QPixmap(self.geo_texture) self.l3 = QPixmap(self.geo_texture) self.l3_2 = QPixmap(self.geo_texture) op = 50 for i in range(2): painter = QPainter([self.l2_2, self.l3_2][i]) painter.setCompositionMode(QPainter.CompositionMode.CompositionMode_SourceAtop) painter.fillRect(self.l1.rect(), [QColor(0, 255, 0, op), QColor(255, 0, 0, op)][i]) if change: self.change_shit()
[docs] def add_manager(self, manager, settings: GeoSettings): self.manager = manager self.settings = settings self.workscene = QGraphicsScene(0, 0, 0, 0) self._sz = CONSTS.get("geo_image_config", {}).get("itemsize", 100) self.update_pixmaps(False) self.setScene(self.workscene) self.l3g = self.workscene.addPixmap(self.l3) self.l2g = self.workscene.addPixmap(self.l2) self.l1g = self.workscene.addPixmap(self.l1) self.t1 = self.workscene.addText("Layer 1") self.t2 = self.workscene.addText("Layer 2") self.t3 = self.workscene.addText("Layer 3") self.t1.setRotation(90) self.t1.setPos(QPoint(self._sz // 2, 0)) self.t2.setRotation(90) self.t2.setPos(QPoint(self._sz, 0)) self.t3.setRotation(90) self.t3.setPos(QPoint(self._sz + self._sz // 2, 0)) self.l1g.setScale(.5) self.l2g.setScale(.5) self.l3g.setScale(.5) self.l2g.setPos(QPoint(self._sz // 2, 0)) self.l3g.setPos(QPoint(self._sz, 0)) self.setBackgroundBrush(QBrush(self.manager.basemod.gridui.backgroundcolor.value)) self.settings.ui.Pshow.toggled.connect(self.change_shit) self.settings.ui.Sshow.toggled.connect(self.change_shit) self.settings.Pop.setting.valueChanged.connect(self.change_shit) self.settings.Sop.setting.valueChanged.connect(self.change_shit) self.settings.rgbsop.setting.valueChanged.connect(self.change_shit) self.settings.rgbpop.setting.valueChanged.connect(self.change_shit) self.settings.ui.Leditorpreview.toggled.connect(self.change_shit) self.settings.ui.RWEpreview.toggled.connect(self.change_shit) self.settings.ui.LayerSlider.valueChanged.connect(self.change_shit)
@property def current_layer(self): return self.settings.ui.LayerSlider.value() @property def popval(self): return self.settings.Pop.value if self.settings.ui.Pshow.isChecked() else 0 @property def sopval(self): return self.settings.Sop.value if self.settings.ui.Sshow.isChecked() else 0 @property def rgbpopval(self): return self.settings.rgbpop.value if self.settings.ui.Pshow.isChecked() else 0 @property def rgbsopval(self): return self.settings.rgbsop.value if self.settings.ui.Sshow.isChecked() else 0
[docs] def change_shit(self): if self.settings.ui.Leditorpreview.isChecked(): self.l1g.setPixmap(self.l1_2) self.l2g.setPixmap(self.l2_2) self.l3g.setPixmap(self.l3_2) self.l1g.setOpacity((self.rgbpopval if self.current_layer == 0 else self.rgbsopval) / 255) self.l2g.setOpacity((self.rgbpopval if self.current_layer == 1 else self.rgbsopval) / 255) self.l3g.setOpacity((self.rgbpopval if self.current_layer == 2 else self.rgbsopval) / 255) return self.l1g.setPixmap(self.l1) self.l2g.setPixmap(self.l2) self.l3g.setPixmap(self.l3) self.l1g.setOpacity((self.popval if self.current_layer == 0 else self.sopval) / 255) if self.current_layer == 1 and not self.settings.renderall.value: self.l1g.setOpacity(0) self.l2g.setOpacity((self.popval if self.current_layer == 1 else self.sopval) / 255) if self.current_layer == 2 and not self.settings.renderall.value: self.l1g.setOpacity(0) self.l2g.setOpacity(0) self.l3g.setOpacity((self.popval if self.current_layer == 2 else self.sopval) / 255)
[docs] def mouseMoveEvent(self, event): offset = event.pos() - self.lastpos if event.buttons() & self.manager.basemod.bmconfig.movement_button.value: self.l1g.setPos(self.l1g.pos() + offset) self.l2g.setPos(self.l2g.pos() + offset) self.l3g.setPos(self.l3g.pos() + offset) self.t1.setPos(self.t1.pos() + offset) self.t2.setPos(self.t2.pos() + offset) self.t3.setPos(self.t3.pos() + offset) self.lastpos = event.pos()