Beispiel #1
0
class GalaxyCoordsSelectorWidget(QFrame):
    """
    Groups together two controls to select galaxy and system
    coordinates with a button to navigate there.
    TODO: it can also show maybe bookmarks? :D
    """

    coordsChanged = pyqtSignal(int, int)

    def __init__(self, parent: QWidget):
        super(GalaxyCoordsSelectorWidget, self).__init__(parent)
        # data
        self._coords = [1, 1]  # galaxy, system
        self.world = XNovaWorld_instance()
        #
        # setup frame
        self.setFrameShape(QFrame.NoFrame)
        self.setFrameShadow(QFrame.Raised)
        #
        self._layout = QHBoxLayout()
        self._layout.setContentsMargins(0, 0, 0, 0)
        self._layout.setSpacing(3)
        self.setLayout(self._layout)
        #
        self._planet_selector = GalaxyOwnPlanetSelectorWidget(self)
        self._planet_selector.planetSelected.connect(self.on_planet_selected)
        #
        self._galaxy_selector = GalaxyCoordSingleSelectorWidget(self)
        self._galaxy_selector.setCoordRange(1, 5)
        self._galaxy_selector.setTitle(self.tr('Galaxy'))
        self._galaxy_selector.coordChanged.connect(self.on_gal_changed)
        self._system_selector = GalaxyCoordSingleSelectorWidget(self)
        self._system_selector.setCoordRange(1, 499)
        self._system_selector.setTitle(self.tr('Solar system'))
        self._system_selector.coordChanged.connect(self.on_sys_changed)
        #
        self._btn_navigate = QPushButton(self)
        self._btn_navigate.setText(self.tr('Navigate'))
        self._btn_navigate.clicked.connect(self.on_btn_navigate)
        #
        self._layout.addWidget(self._planet_selector, 0)
        self._layout.addWidget(self._galaxy_selector, 0)
        self._layout.addWidget(self._system_selector, 0)
        self._layout.addWidget(self._btn_navigate, 0)
        self._layout.addStretch(1)

    def coordGalaxy(self) -> int:
        return self._coords[0]

    def coordSystem(self) -> int:
        return self._coords[1]

    def coords(self) -> list:
        return self._coords

    def setCoords(self, galaxy: int, system: int, do_emit: bool = True):
        prev_coords = self._coords
        self._galaxy_selector.setCoord(galaxy)  # does all range-checking
        self._system_selector.setCoord(system)  # does all range-checking
        # get actual fixed coords
        self._coords[0] = self._galaxy_selector.coord()
        self._coords[1] = self._system_selector.coord()
        # compare and emit
        if do_emit:
            if (prev_coords[0] != self._coords[0]) or (prev_coords[1] != self._coords[1]):
                self.coordsChanged.emit(self._coords[0], self._coords[1])

    def setGalaxyRange(self, gal_min: int, gal_max: int):
        self._galaxy_selector.setCoordRange(gal_min, gal_max)

    def setSystemRange(self, sys_min: int, sys_max: int):
        self._system_selector.setCoordRange(sys_min, sys_max)

    @pyqtSlot(int)
    def on_gal_changed(self, c: int):
        self._coords[0] = c
        self.coordsChanged.emit(self._coords[0], self._coords[1])

    @pyqtSlot(int)
    def on_sys_changed(self, c: int):
        self._coords[1] = c
        self.coordsChanged.emit(self._coords[0], self._coords[1])

    @pyqtSlot()
    def on_btn_navigate(self):
        # get actual coords
        self._coords[0] = self._galaxy_selector.coord()
        self._coords[1] = self._system_selector.coord()
        # just force refresh like coords changed
        self.coordsChanged.emit(self._coords[0], self._coords[1])

    @pyqtSlot(int)
    def on_planet_selected(self, planet_id: int):
        planet = self.world.get_planet(planet_id)
        if planet is None:
            return
        logger.debug('    navigating to: {0}'.format(planet.coords.coords_str()))
        self.setCoords(planet.coords.galaxy, planet.coords.system)
Beispiel #2
0
class GalaxyCoordsSelectorWidget(QFrame):
    """
    Groups together two controls to select galaxy and system
    coordinates with a button to navigate there.
    TODO: it can also show maybe bookmarks? :D
    """

    coordsChanged = pyqtSignal(int, int)

    def __init__(self, parent: QWidget):
        super(GalaxyCoordsSelectorWidget, self).__init__(parent)
        # data
        self._coords = [1, 1]  # galaxy, system
        self.world = XNovaWorld_instance()
        #
        # setup frame
        self.setFrameShape(QFrame.NoFrame)
        self.setFrameShadow(QFrame.Raised)
        #
        self._layout = QHBoxLayout()
        self._layout.setContentsMargins(0, 0, 0, 0)
        self._layout.setSpacing(3)
        self.setLayout(self._layout)
        #
        self._planet_selector = GalaxyOwnPlanetSelectorWidget(self)
        self._planet_selector.planetSelected.connect(self.on_planet_selected)
        #
        self._galaxy_selector = GalaxyCoordSingleSelectorWidget(self)
        self._galaxy_selector.setCoordRange(1, 5)
        self._galaxy_selector.setTitle(self.tr('Galaxy'))
        self._galaxy_selector.coordChanged.connect(self.on_gal_changed)
        self._system_selector = GalaxyCoordSingleSelectorWidget(self)
        self._system_selector.setCoordRange(1, 499)
        self._system_selector.setTitle(self.tr('Solar system'))
        self._system_selector.coordChanged.connect(self.on_sys_changed)
        #
        self._btn_navigate = QPushButton(self)
        self._btn_navigate.setText(self.tr('Navigate'))
        self._btn_navigate.clicked.connect(self.on_btn_navigate)
        #
        self._layout.addWidget(self._planet_selector, 0)
        self._layout.addWidget(self._galaxy_selector, 0)
        self._layout.addWidget(self._system_selector, 0)
        self._layout.addWidget(self._btn_navigate, 0)
        self._layout.addStretch(1)

    def coordGalaxy(self) -> int:
        return self._coords[0]

    def coordSystem(self) -> int:
        return self._coords[1]

    def coords(self) -> list:
        return self._coords

    def setCoords(self, galaxy: int, system: int, do_emit: bool = True):
        prev_coords = self._coords
        self._galaxy_selector.setCoord(galaxy)  # does all range-checking
        self._system_selector.setCoord(system)  # does all range-checking
        # get actual fixed coords
        self._coords[0] = self._galaxy_selector.coord()
        self._coords[1] = self._system_selector.coord()
        # compare and emit
        if do_emit:
            if (prev_coords[0] != self._coords[0]) or (prev_coords[1] !=
                                                       self._coords[1]):
                self.coordsChanged.emit(self._coords[0], self._coords[1])

    def setGalaxyRange(self, gal_min: int, gal_max: int):
        self._galaxy_selector.setCoordRange(gal_min, gal_max)

    def setSystemRange(self, sys_min: int, sys_max: int):
        self._system_selector.setCoordRange(sys_min, sys_max)

    @pyqtSlot(int)
    def on_gal_changed(self, c: int):
        self._coords[0] = c
        self.coordsChanged.emit(self._coords[0], self._coords[1])

    @pyqtSlot(int)
    def on_sys_changed(self, c: int):
        self._coords[1] = c
        self.coordsChanged.emit(self._coords[0], self._coords[1])

    @pyqtSlot()
    def on_btn_navigate(self):
        # get actual coords
        self._coords[0] = self._galaxy_selector.coord()
        self._coords[1] = self._system_selector.coord()
        # just force refresh like coords changed
        self.coordsChanged.emit(self._coords[0], self._coords[1])

    @pyqtSlot(int)
    def on_planet_selected(self, planet_id: int):
        planet = self.world.get_planet(planet_id)
        if planet is None:
            return
        logger.debug('    navigating to: {0}'.format(
            planet.coords.coords_str()))
        self.setCoords(planet.coords.galaxy, planet.coords.system)