from pandac.PandaModules import *

class MarginPopup:
    def __init__(self):
        self.__manager = None
        self.__visible = False

        self.__priority = 0

        # The margin management system uses these:
        self._assignedCell = None
        self._lastCell = None

    def setVisible(self, visibility):
        visibility = bool(visibility)
        if self.__visible == visibility: return

        self.__visible = visibility

        if self.__manager is not None:
            if visibility:
                self.__manager.addVisiblePopup(self)
            else:
                self.__manager.removeVisiblePopup(self)

    def getPriority(self):
        return self.__priority

    def setPriority(self, priority):
        self.__priority = priority
        if self.__manager is not None:
            self.__manager.reorganize()

    def isDisplayed(self):
        return self._assignedCell is not None

    def marginVisibilityChanged(self):
        pass # Fired externally when the result of isDisplayed changes. For subclasses.

    def manage(self, manager):
        if self.__manager:
            self.unmanage(self.__manager)
        self.__manager = manager

        if self.__visible:
            manager.addVisiblePopup(self)

    def unmanage(self, manager):
        if self.__manager is not None:
            if self.__visible:
                self.__manager.removeVisiblePopup(self)
            self.__manager = None
