Пример #1
0
 def createGui(self):
     self.destroyGui()
     box = loader.loadModel('models/gui/gui_title_box').find('**/gui_title_box_top')
     box.setPos(0.54000000000000004, 0, 1.3600000000000001)
     box.setScale(0.25)
     box.reparentTo(self)
     box.flattenStrong()
     if not self.charGui:
         self.charGui = loader.loadModel('models/gui/char_gui')
     
     self.title = DirectLabel(parent = self, relief = None, text = self.titleText, text_fg = PiratesGuiGlobals.TextFG1, text_font = PiratesGlobals.getPirateFont(), text_scale = PiratesGuiGlobals.TextScaleTitleSmall, text_shadow = PiratesGuiGlobals.TextShadow, pos = (self.width * 0.5, 0, 1.343))
     self.tabBackParent = self.attachNewNode('tabBackParent')
     self.tabBackParent.setZ(1.1100000000000001)
     self.scrollFrame = DirectScrolledFrame(parent = self, relief = None, state = DGG.NORMAL, manageScrollBars = 0, autoHideScrollBars = 1, frameSize = (0.050000000000000003, self.width - 0.10000000000000001, 0.14000000000000001, self.height - 0.25), canvasSize = (0.050000000000000003, self.width - 0.10000000000000001, 0.14000000000000001, self.height - 0.25), verticalScroll_relief = None, verticalScroll_image = self.charGui.find('**/chargui_slider_small'), verticalScroll_frameSize = (0.0, PiratesGuiGlobals.ScrollbarSize, 0.14199999999999999, self.height - 0.26000000000000001), verticalScroll_image_scale = (self.height - 0.29999999999999999, 1, 0.75), verticalScroll_image_hpr = (0, 0, 90), verticalScroll_image_pos = (self.width - PiratesGuiGlobals.ScrollbarSize * 0.5 - 0.059999999999999998, 0, self.height * 0.46000000000000002), verticalScroll_image_color = (0.60999999999999999, 0.59999999999999998, 0.59999999999999998, 1), verticalScroll_thumb_image = (self.charGui.find('**/chargui_slider_node'), self.charGui.find('**/chargui_slider_node_down'), self.charGui.find('**/chargui_slider_node_over')), verticalScroll_thumb_relief = None, verticalScroll_thumb_image_scale = 0.40000000000000002, verticalScroll_thumb_image_pos = (-0.0050000000000000001, 0, 0), verticalScroll_resizeThumb = 0, horizontalScroll_relief = None)
     self.scrollFrame.verticalScroll.incButton.destroy()
     self.scrollFrame.verticalScroll.decButton.destroy()
     self.scrollFrame.horizontalScroll.incButton.destroy()
     self.scrollFrame.horizontalScroll.decButton.destroy()
     self.scrollFrame.horizontalScroll.hide()
     self.accept('press-wheel_up-%s' % self.scrollFrame.guiId, self.mouseWheelUp)
     self.accept('press-wheel_down-%s' % self.scrollFrame.guiId, self.mouseWheelDown)
     self.tabFrontParent = self.attachNewNode('tabFrontParent')
     self.tabFrontParent.setZ(1.1100000000000001)
     frameSize = (self.scrollFrame['frameSize'][0] + 0.01, self.scrollFrame['frameSize'][1] + 0.040000000000000001, self.scrollFrame['frameSize'][2] - 0.01, self.scrollFrame['frameSize'][3])
     self.repackScrollFrame()
     self.border = BorderFrame(parent = self.scrollFrame, state = DGG.DISABLED, modelName = 'general_frame_f', frameSize = frameSize, borderScale = 0.14999999999999999, showBackground = True, bgColorScale = VBase4(0, 0, 0, 1), sortOrder = -1)
     gui = loader.loadModel('models/gui/toplevel_gui')
     geomX = gui.find('**/generic_x')
     self.closeButton = GuiButton.GuiButton(parent = self, pos = (self.width / 2.0, 0, 0.070000000000000007), text = PLocalizer.TableLeave, text_scale = PiratesGuiGlobals.TextScaleLarge, text_pos = (0.035000000000000003, -0.014), textMayChange = 0, geom = (geomX,) * 4, geom_pos = (-0.059999999999999998, 0, 0), geom_scale = 0.5, geom0_color = PiratesGuiGlobals.ButtonColor3[0], geom1_color = PiratesGuiGlobals.ButtonColor3[1], geom2_color = PiratesGuiGlobals.ButtonColor3[2], geom3_color = PiratesGuiGlobals.ButtonColor3[3], image3_color = (0.80000000000000004, 0.80000000000000004, 0.80000000000000004, 1), command = self.closePanel)
     self.shipBar = ShipTabBar(self.tabBackParent, self.tabFrontParent, parent = self)
     for t in self.pages:
         self.addTab(t)
     
     self.refreshTabStates()
class ShipSelectionPanel(GuiPanel.GuiPanel):
    notify = directNotify.newCategory("ShipSelectionPanel")
    width = 1.03
    height = 1.45
    scrollBorder = 0.050000000000000003
    OWN = 0
    FRIEND = 1
    CREW = 2
    GUILD = 3
    PUBLIC = 4
    NameMap = {
        OWN: PLocalizer.DinghyMyShip,
        FRIEND: PLocalizer.DinghyFriendShip,
        CREW: PLocalizer.DinghyCrewShip,
        GUILD: PLocalizer.DinghyGuildShip,
        PUBLIC: PLocalizer.DinghyPublicShip,
    }
    charGui = None

    def __init__(self, title, doneCallback, pages=[OWN]):
        self.titleText = title
        self.doneCallback = doneCallback
        self.pages = pages[:]
        self.scrollFrame = None
        self.shipFrames = {}  # dict(lambda [outmost-iterable]: for page in [outmost-iterable]:
        # (page, [])(self.pages))
        self.closeButton = None
        self.page = -1
        self.tabBackParent = None
        self.tabFrontParent = None
        GuiPanel.GuiPanel.__init__(self, "", ShipSelectionPanel.width + self.scrollBorder, self.height, showClose=False)
        self.initialiseoptions(ShipSelectionPanel)
        self.setPos(-1.21, 0, -0.68000000000000005)
        self.createGui()

    def destroyGui(self):
        if getattr(self, "title", 0):
            self.title.destroy()
            self.title = None

        if getattr(self, "scrollFrame", 0):
            self.scrollFrame.destroy()
            self.scrollFrame = None

        self.shipFrames = {}  # dict(lambda [outmost-iterable]: for page in [outmost-iterable]:
        # (page, [])(self.pages))
        if getattr(self, "shipBar", 0):
            self.shipBar.destroy()
            self.shipBar = None

        if self.tabBackParent:
            self.tabBackParent.removeNode()
            self.tabBackParent = None

        if self.tabFrontParent:
            self.tabFrontParent.removeNode()
            self.tabFrontParent = None

        if getattr(self, "closeButton", 0):
            self.closeButton.destroy()
            self.closeButton = None

    def resetGui(self):
        self.destroyGui()
        self.createGui()

    def destroy(self):
        self.destroyGui()
        self.titleText = None
        self.doneCallback = None
        GuiPanel.GuiPanel.destroy(self)

    def createGui(self):
        self.destroyGui()
        box = loader.loadModel("models/gui/gui_title_box").find("**/gui_title_box_top")
        box.setPos(0.54000000000000004, 0, 1.3600000000000001)
        box.setScale(0.25)
        box.reparentTo(self)
        box.flattenStrong()
        if not self.charGui:
            self.charGui = loader.loadModel("models/gui/char_gui")

        self.title = DirectLabel(
            parent=self,
            relief=None,
            text=self.titleText,
            text_fg=PiratesGuiGlobals.TextFG1,
            text_font=PiratesGlobals.getPirateFont(),
            text_scale=PiratesGuiGlobals.TextScaleTitleSmall,
            text_shadow=PiratesGuiGlobals.TextShadow,
            pos=(self.width * 0.5, 0, 1.343),
        )
        self.tabBackParent = self.attachNewNode("tabBackParent")
        self.tabBackParent.setZ(1.1100000000000001)
        self.scrollFrame = DirectScrolledFrame(
            parent=self,
            relief=None,
            state=DGG.NORMAL,
            manageScrollBars=0,
            autoHideScrollBars=1,
            frameSize=(0.050000000000000003, self.width - 0.10000000000000001, 0.14000000000000001, self.height - 0.25),
            canvasSize=(
                0.050000000000000003,
                self.width - 0.10000000000000001,
                0.14000000000000001,
                self.height - 0.25,
            ),
            verticalScroll_relief=None,
            verticalScroll_image=self.charGui.find("**/chargui_slider_small"),
            verticalScroll_frameSize=(
                0.0,
                PiratesGuiGlobals.ScrollbarSize,
                0.14199999999999999,
                self.height - 0.26000000000000001,
            ),
            verticalScroll_image_scale=(self.height - 0.29999999999999999, 1, 0.75),
            verticalScroll_image_hpr=(0, 0, 90),
            verticalScroll_image_pos=(
                self.width - PiratesGuiGlobals.ScrollbarSize * 0.5 - 0.059999999999999998,
                0,
                self.height * 0.46000000000000002,
            ),
            verticalScroll_image_color=(0.60999999999999999, 0.59999999999999998, 0.59999999999999998, 1),
            verticalScroll_thumb_image=(
                self.charGui.find("**/chargui_slider_node"),
                self.charGui.find("**/chargui_slider_node_down"),
                self.charGui.find("**/chargui_slider_node_over"),
            ),
            verticalScroll_thumb_relief=None,
            verticalScroll_thumb_image_scale=0.40000000000000002,
            verticalScroll_thumb_image_pos=(-0.0050000000000000001, 0, 0),
            verticalScroll_resizeThumb=0,
            horizontalScroll_relief=None,
        )
        self.scrollFrame.verticalScroll.incButton.destroy()
        self.scrollFrame.verticalScroll.decButton.destroy()
        self.scrollFrame.horizontalScroll.incButton.destroy()
        self.scrollFrame.horizontalScroll.decButton.destroy()
        self.scrollFrame.horizontalScroll.hide()
        self.accept("press-wheel_up-%s" % self.scrollFrame.guiId, self.mouseWheelUp)
        self.accept("press-wheel_down-%s" % self.scrollFrame.guiId, self.mouseWheelDown)
        self.tabFrontParent = self.attachNewNode("tabFrontParent")
        self.tabFrontParent.setZ(1.1100000000000001)
        frameSize = (
            self.scrollFrame["frameSize"][0] + 0.01,
            self.scrollFrame["frameSize"][1] + 0.040000000000000001,
            self.scrollFrame["frameSize"][2] - 0.01,
            self.scrollFrame["frameSize"][3],
        )
        self.repackScrollFrame()
        self.border = BorderFrame(
            parent=self.scrollFrame,
            state=DGG.DISABLED,
            modelName="general_frame_f",
            frameSize=frameSize,
            borderScale=0.14999999999999999,
            showBackground=True,
            bgColorScale=VBase4(0, 0, 0, 1),
            sortOrder=-1,
        )
        gui = loader.loadModel("models/gui/toplevel_gui")
        geomX = gui.find("**/generic_x")
        self.closeButton = GuiButton.GuiButton(
            parent=self,
            pos=(self.width / 2.0, 0, 0.070000000000000007),
            text=PLocalizer.TableLeave,
            text_scale=PiratesGuiGlobals.TextScaleLarge,
            text_pos=(0.035000000000000003, -0.014),
            textMayChange=0,
            geom=(geomX,) * 4,
            geom_pos=(-0.059999999999999998, 0, 0),
            geom_scale=0.5,
            geom0_color=PiratesGuiGlobals.ButtonColor3[0],
            geom1_color=PiratesGuiGlobals.ButtonColor3[1],
            geom2_color=PiratesGuiGlobals.ButtonColor3[2],
            geom3_color=PiratesGuiGlobals.ButtonColor3[3],
            image3_color=(0.80000000000000004, 0.80000000000000004, 0.80000000000000004, 1),
            command=self.closePanel,
        )
        self.shipBar = ShipTabBar(self.tabBackParent, self.tabFrontParent, parent=self)
        for t in self.pages:
            self.addTab(t)

        self.refreshTabStates()

    def mouseWheelUp(self, task=None):
        if self.scrollFrame.verticalScroll.isHidden():
            return None

        amountScroll = 0.050000000000000003
        if self.scrollFrame.verticalScroll["value"] > 0:
            self.scrollFrame.verticalScroll["value"] -= amountScroll

    def mouseWheelDown(self, task=None):
        if self.scrollFrame.verticalScroll.isHidden():
            return None

        amountScroll = 0.050000000000000003
        if self.scrollFrame.verticalScroll["value"] < 1.0:
            self.scrollFrame.verticalScroll["value"] += amountScroll

    def repackScrollFrame(self):
        self.scrollFrame.getCanvas().getChildren().detach()
        frames = self.shipFrames.get(self.page, [])
        if len(frames) < 3:
            xOffset = 0.091999999999999998
        else:
            xOffset = 0.080000000000000002
        padding = 0.02
        canvasHeight = self.scrollBorder - padding
        for frame in frames:
            canvasHeight += frame.getHeight() + padding

        self.scrollFrame["frameSize"] = (
            self.scrollBorder,
            ShipSelectionPanel.width,
            0.14000000000000001,
            self.height - 0.26000000000000001,
        )
        zStep = -padding
        for frame in frames:
            frame.reparentTo(self.scrollFrame.getCanvas())
            zStep += frame.getHeight() + padding
            frame.setPos(xOffset, 0, canvasHeight - zStep)

        self.scrollFrame["canvasSize"] = (
            self.scrollBorder,
            ShipSelectionPanel.width - 0.089999999999999997,
            self.scrollBorder,
            canvasHeight,
        )
        self.scrollFrame["verticalScroll_value"] = 0

    repackScrollFrame = report(types=["args"], dConfigParam=["shipdeploy"])(repackScrollFrame)

    def closePanel(self):
        GuiPanel.GuiPanel.closePanel(self)
        if self.doneCallback:
            self.doneCallback()

    def _addFrame(self, pageId, shipFrame, index=None):
        list = self.shipFrames[pageId]
        if shipFrame in list and index is not None:
            list.remove(shipFrame)

        if shipFrame not in list:
            if index is None:
                list.append(shipFrame)
            else:
                list.insert(index, shipFrame)

        if self.page == pageId:
            self.repackScrollFrame()
        elif shipFrame not in self.shipFrames.get(self.page, []):
            shipFrame.detachNode()

        if self.page == -1:
            self.setPage(pageId)

        self.refreshTabStates()

    _addFrame = report(types=["args"], dConfigParam=["shipdeploy"])(_addFrame)

    def addFrame(self, shipFrame, index=None):
        self._addFrame(self.OWN, shipFrame, index)

    def addFrameOwn(self, shipFrame, index=None):
        self.addFrame(shipFrame, index)

    addFrameOwn = report(types=["args"], dConfigParam=["shipdeploy"])(addFrameOwn)

    def addFrameCrew(self, shipFrame, index=None):
        self._addFrame(self.CREW, shipFrame, index)

    addFrameCrew = report(types=["args"], dConfigParam=["shipdeploy"])(addFrameCrew)

    def addFrameFriend(self, shipFrame, index=None):
        self._addFrame(self.FRIEND, shipFrame, index)

    addFrameFriend = report(types=["args"], dConfigParam=["shipdeploy"])(addFrameFriend)

    def addFrameGuild(self, shipFrame, index=None):
        self._addFrame(self.GUILD, shipFrame, index)

    addFrameGuild = report(types=["args"], dConfigParam=["shipdeploy"])(addFrameGuild)

    def addFramePublic(self, shipFrame, index=None):
        self._addFrame(self.PUBLIC, shipFrame, index)

    addFramePublic = report(types=["args"], dConfigParam=["shipdeploy"])(addFramePublic)

    def removeFrame(self, frame):
        removed = False
        for frameList in self.shipFrames.itervalues():
            if frame in frameList:
                frameList.remove(frame)
                removed = True
                continue

        if removed:
            frame.destroy()
            self.repackScrollFrame()
            self.refreshTabStates()

    def hasFrame(self, shipDoId):
        return bool(self.getFrame(shipDoId))

    def getFrame(self, shipDoId):
        for frameList in self.shipFrames.itervalues():
            for frame in frameList:
                if frame["shipId"] == shipDoId:
                    return frame
                    continue

    def getFrameIndex(self, frame):
        for frameList in self.shipFrames.itervalues():
            for (num, currFrame) in enumerate(frameList):
                if currFrame is frame:
                    return num
                    continue

        return 0

    def setPage(self, id):
        if id != self.page:
            for frame in self.shipFrames.get(self.page, []):
                frame.detachNode()

            self.page = id
            self.shipBar.selectTab(self.NameMap[id])
            for frame in self.shipFrames[self.page]:
                self._addFrame(self.page, frame)

            self.repackScrollFrame()

    setPage = report(types=["args"], dConfigParam=["shipdeploy"])(setPage)

    def addTab(self, id):
        self.shipBar.addTab(
            name=self.NameMap[id],
            command=self.setPage,
            extraArgs=[id],
            textpos=(0.10000000000000001, 0.029999999999999999, 0),
        )

    def refreshTabStates(self):
        for (id, frames) in self.shipFrames.iteritems():
            if frames:
                self.shipBar.getTab(self.NameMap[id]).setTextBright(True)
                continue
            self.shipBar.getTab(self.NameMap[id]).setTextBright(False)
class ShipSelectionPanel(GuiPanel.GuiPanel):
    notify = directNotify.newCategory('ShipSelectionPanel')
    width = 1.03
    height = 1.45
    scrollBorder = 0.050000000000000003
    OWN = 0
    FRIEND = 1
    CREW = 2
    GUILD = 3
    PUBLIC = 4
    NameMap = {
        OWN: PLocalizer.DinghyMyShip,
        FRIEND: PLocalizer.DinghyFriendShip,
        CREW: PLocalizer.DinghyCrewShip,
        GUILD: PLocalizer.DinghyGuildShip,
        PUBLIC: PLocalizer.DinghyPublicShip
    }
    charGui = None

    def __init__(self, title, doneCallback, pages=[OWN]):
        self.titleText = title
        self.doneCallback = doneCallback
        self.pages = pages[:]
        self.scrollFrame = None
        self.shipFrames = {
        }  #dict(lambda [outmost-iterable]: for page in [outmost-iterable]:
        #(page, [])(self.pages))
        self.closeButton = None
        self.page = -1
        self.tabBackParent = None
        self.tabFrontParent = None
        GuiPanel.GuiPanel.__init__(self,
                                   '',
                                   ShipSelectionPanel.width +
                                   self.scrollBorder,
                                   self.height,
                                   showClose=False)
        self.initialiseoptions(ShipSelectionPanel)
        self.setPos(-1.21, 0, -0.68000000000000005)
        self.createGui()

    def destroyGui(self):
        if getattr(self, 'title', 0):
            self.title.destroy()
            self.title = None

        if getattr(self, 'scrollFrame', 0):
            self.scrollFrame.destroy()
            self.scrollFrame = None

        self.shipFrames = {
        }  #dict(lambda [outmost-iterable]: for page in [outmost-iterable]:
        #(page, [])(self.pages))
        if getattr(self, 'shipBar', 0):
            self.shipBar.destroy()
            self.shipBar = None

        if self.tabBackParent:
            self.tabBackParent.removeNode()
            self.tabBackParent = None

        if self.tabFrontParent:
            self.tabFrontParent.removeNode()
            self.tabFrontParent = None

        if getattr(self, 'closeButton', 0):
            self.closeButton.destroy()
            self.closeButton = None

    def resetGui(self):
        self.destroyGui()
        self.createGui()

    def destroy(self):
        self.destroyGui()
        self.titleText = None
        self.doneCallback = None
        GuiPanel.GuiPanel.destroy(self)

    def createGui(self):
        self.destroyGui()
        box = loader.loadModel('models/gui/gui_title_box').find(
            '**/gui_title_box_top')
        box.setPos(0.54000000000000004, 0, 1.3600000000000001)
        box.setScale(0.25)
        box.reparentTo(self)
        box.flattenStrong()
        if not self.charGui:
            self.charGui = loader.loadModel('models/gui/char_gui')

        self.title = DirectLabel(
            parent=self,
            relief=None,
            text=self.titleText,
            text_fg=PiratesGuiGlobals.TextFG1,
            text_font=PiratesGlobals.getPirateFont(),
            text_scale=PiratesGuiGlobals.TextScaleTitleSmall,
            text_shadow=PiratesGuiGlobals.TextShadow,
            pos=(self.width * 0.5, 0, 1.343))
        self.tabBackParent = self.attachNewNode('tabBackParent')
        self.tabBackParent.setZ(1.1100000000000001)
        self.scrollFrame = DirectScrolledFrame(
            parent=self,
            relief=None,
            state=DGG.NORMAL,
            manageScrollBars=0,
            autoHideScrollBars=1,
            frameSize=(0.050000000000000003, self.width - 0.10000000000000001,
                       0.14000000000000001, self.height - 0.25),
            canvasSize=(0.050000000000000003, self.width - 0.10000000000000001,
                        0.14000000000000001, self.height - 0.25),
            verticalScroll_relief=None,
            verticalScroll_image=self.charGui.find('**/chargui_slider_small'),
            verticalScroll_frameSize=(0.0, PiratesGuiGlobals.ScrollbarSize,
                                      0.14199999999999999,
                                      self.height - 0.26000000000000001),
            verticalScroll_image_scale=(self.height - 0.29999999999999999, 1,
                                        0.75),
            verticalScroll_image_hpr=(0, 0, 90),
            verticalScroll_image_pos=(self.width -
                                      PiratesGuiGlobals.ScrollbarSize * 0.5 -
                                      0.059999999999999998, 0,
                                      self.height * 0.46000000000000002),
            verticalScroll_image_color=(0.60999999999999999,
                                        0.59999999999999998,
                                        0.59999999999999998, 1),
            verticalScroll_thumb_image=(
                self.charGui.find('**/chargui_slider_node'),
                self.charGui.find('**/chargui_slider_node_down'),
                self.charGui.find('**/chargui_slider_node_over')),
            verticalScroll_thumb_relief=None,
            verticalScroll_thumb_image_scale=0.40000000000000002,
            verticalScroll_thumb_image_pos=(-0.0050000000000000001, 0, 0),
            verticalScroll_resizeThumb=0,
            horizontalScroll_relief=None)
        self.scrollFrame.verticalScroll.incButton.destroy()
        self.scrollFrame.verticalScroll.decButton.destroy()
        self.scrollFrame.horizontalScroll.incButton.destroy()
        self.scrollFrame.horizontalScroll.decButton.destroy()
        self.scrollFrame.horizontalScroll.hide()
        self.accept('press-wheel_up-%s' % self.scrollFrame.guiId,
                    self.mouseWheelUp)
        self.accept('press-wheel_down-%s' % self.scrollFrame.guiId,
                    self.mouseWheelDown)
        self.tabFrontParent = self.attachNewNode('tabFrontParent')
        self.tabFrontParent.setZ(1.1100000000000001)
        frameSize = (self.scrollFrame['frameSize'][0] + 0.01,
                     self.scrollFrame['frameSize'][1] + 0.040000000000000001,
                     self.scrollFrame['frameSize'][2] - 0.01,
                     self.scrollFrame['frameSize'][3])
        self.repackScrollFrame()
        self.border = BorderFrame(parent=self.scrollFrame,
                                  state=DGG.DISABLED,
                                  modelName='general_frame_f',
                                  frameSize=frameSize,
                                  borderScale=0.14999999999999999,
                                  showBackground=True,
                                  bgColorScale=VBase4(0, 0, 0, 1),
                                  sortOrder=-1)
        gui = loader.loadModel('models/gui/toplevel_gui')
        geomX = gui.find('**/generic_x')
        self.closeButton = GuiButton.GuiButton(
            parent=self,
            pos=(self.width / 2.0, 0, 0.070000000000000007),
            text=PLocalizer.TableLeave,
            text_scale=PiratesGuiGlobals.TextScaleLarge,
            text_pos=(0.035000000000000003, -0.014),
            textMayChange=0,
            geom=(geomX, ) * 4,
            geom_pos=(-0.059999999999999998, 0, 0),
            geom_scale=0.5,
            geom0_color=PiratesGuiGlobals.ButtonColor3[0],
            geom1_color=PiratesGuiGlobals.ButtonColor3[1],
            geom2_color=PiratesGuiGlobals.ButtonColor3[2],
            geom3_color=PiratesGuiGlobals.ButtonColor3[3],
            image3_color=(0.80000000000000004, 0.80000000000000004,
                          0.80000000000000004, 1),
            command=self.closePanel)
        self.shipBar = ShipTabBar(self.tabBackParent,
                                  self.tabFrontParent,
                                  parent=self)
        for t in self.pages:
            self.addTab(t)

        self.refreshTabStates()

    def mouseWheelUp(self, task=None):
        if self.scrollFrame.verticalScroll.isHidden():
            return None

        amountScroll = 0.050000000000000003
        if self.scrollFrame.verticalScroll['value'] > 0:
            self.scrollFrame.verticalScroll['value'] -= amountScroll

    def mouseWheelDown(self, task=None):
        if self.scrollFrame.verticalScroll.isHidden():
            return None

        amountScroll = 0.050000000000000003
        if self.scrollFrame.verticalScroll['value'] < 1.0:
            self.scrollFrame.verticalScroll['value'] += amountScroll

    def repackScrollFrame(self):
        self.scrollFrame.getCanvas().getChildren().detach()
        frames = self.shipFrames.get(self.page, [])
        if len(frames) < 3:
            xOffset = 0.091999999999999998
        else:
            xOffset = 0.080000000000000002
        padding = 0.02
        canvasHeight = self.scrollBorder - padding
        for frame in frames:
            canvasHeight += frame.getHeight() + padding

        self.scrollFrame['frameSize'] = (self.scrollBorder,
                                         ShipSelectionPanel.width,
                                         0.14000000000000001,
                                         self.height - 0.26000000000000001)
        zStep = -padding
        for frame in frames:
            frame.reparentTo(self.scrollFrame.getCanvas())
            zStep += frame.getHeight() + padding
            frame.setPos(xOffset, 0, canvasHeight - zStep)

        self.scrollFrame['canvasSize'] = (self.scrollBorder,
                                          ShipSelectionPanel.width -
                                          0.089999999999999997,
                                          self.scrollBorder, canvasHeight)
        self.scrollFrame['verticalScroll_value'] = 0

    repackScrollFrame = report(types=['args'],
                               dConfigParam=['shipdeploy'])(repackScrollFrame)

    def closePanel(self):
        GuiPanel.GuiPanel.closePanel(self)
        if self.doneCallback:
            self.doneCallback()

    def _addFrame(self, pageId, shipFrame, index=None):
        list = self.shipFrames[pageId]
        if shipFrame in list and index is not None:
            list.remove(shipFrame)

        if shipFrame not in list:
            if index is None:
                list.append(shipFrame)
            else:
                list.insert(index, shipFrame)

        if self.page == pageId:
            self.repackScrollFrame()
        elif shipFrame not in self.shipFrames.get(self.page, []):
            shipFrame.detachNode()

        if self.page == -1:
            self.setPage(pageId)

        self.refreshTabStates()

    _addFrame = report(types=['args'], dConfigParam=['shipdeploy'])(_addFrame)

    def addFrame(self, shipFrame, index=None):
        self._addFrame(self.OWN, shipFrame, index)

    def addFrameOwn(self, shipFrame, index=None):
        self.addFrame(shipFrame, index)

    addFrameOwn = report(types=['args'],
                         dConfigParam=['shipdeploy'])(addFrameOwn)

    def addFrameCrew(self, shipFrame, index=None):
        self._addFrame(self.CREW, shipFrame, index)

    addFrameCrew = report(types=['args'],
                          dConfigParam=['shipdeploy'])(addFrameCrew)

    def addFrameFriend(self, shipFrame, index=None):
        self._addFrame(self.FRIEND, shipFrame, index)

    addFrameFriend = report(types=['args'],
                            dConfigParam=['shipdeploy'])(addFrameFriend)

    def addFrameGuild(self, shipFrame, index=None):
        self._addFrame(self.GUILD, shipFrame, index)

    addFrameGuild = report(types=['args'],
                           dConfigParam=['shipdeploy'])(addFrameGuild)

    def addFramePublic(self, shipFrame, index=None):
        self._addFrame(self.PUBLIC, shipFrame, index)

    addFramePublic = report(types=['args'],
                            dConfigParam=['shipdeploy'])(addFramePublic)

    def removeFrame(self, frame):
        removed = False
        for frameList in self.shipFrames.itervalues():
            if frame in frameList:
                frameList.remove(frame)
                removed = True
                continue

        if removed:
            frame.destroy()
            self.repackScrollFrame()
            self.refreshTabStates()

    def hasFrame(self, shipDoId):
        return bool(self.getFrame(shipDoId))

    def getFrame(self, shipDoId):
        for frameList in self.shipFrames.itervalues():
            for frame in frameList:
                if frame['shipId'] == shipDoId:
                    return frame
                    continue

    def getFrameIndex(self, frame):
        for frameList in self.shipFrames.itervalues():
            for (num, currFrame) in enumerate(frameList):
                if currFrame is frame:
                    return num
                    continue

        return 0

    def setPage(self, id):
        if id != self.page:
            for frame in self.shipFrames.get(self.page, []):
                frame.detachNode()

            self.page = id
            self.shipBar.selectTab(self.NameMap[id])
            for frame in self.shipFrames[self.page]:
                self._addFrame(self.page, frame)

            self.repackScrollFrame()

    setPage = report(types=['args'], dConfigParam=['shipdeploy'])(setPage)

    def addTab(self, id):
        self.shipBar.addTab(name=self.NameMap[id],
                            command=self.setPage,
                            extraArgs=[id],
                            textpos=(0.10000000000000001, 0.029999999999999999,
                                     0))

    def refreshTabStates(self):
        for (id, frames) in self.shipFrames.iteritems():
            if frames:
                self.shipBar.getTab(self.NameMap[id]).setTextBright(True)
                continue
            self.shipBar.getTab(self.NameMap[id]).setTextBright(False)