示例#1
0
class ScoringSandbox:

    def __init__(self, db = "./games.db", gameid = None, turnid = None, scoringModule = scoreState):
        self.frame = JFrame("Scoring Sandbox",
                            defaultCloseOperation = JFrame.DISPOSE_ON_CLOSE,
                            size = (400, 300)
                            )
        self.frame.contentPane = JPanel(BorderLayout(5,5))
        self.gamedb = GameDB(db)
        self.gameid = gameid
        self.turnid = turnid
        if gameid and turnid:
            self.board = gamedb.retrieveBoard(gameid, turnid)
        else:
            self.board = Board()
        self.scoringModule = scoringModule
        self.score = scoringModule and scoringModule.score or default_scorer
        self.initGui()
        self.display()

    def label_maker(self, is_board_label):
        def board_label_maker(board_item, i, j, colorizer):
            value = self.scores[i][j]
            label = common_label(its_a_trap(i, j) and "<html><font color='red'><b>X</b></font></html>" or "", 
                                PIECE_IMAGE[board_item and board_item.char or None], i, j, value, colorizer)
            if board_item:
                tooltip = "<html><table>"
                for attr, value in board_item.__dict__.iteritems():
                    tooltip += "<tr><td>" + attr.capitalize() + ":</td><td>" + str(value) + "</td></tr>"
                label.toolTipText = tooltip + "</table></html>"
            return label

        def number_label_maker(value, i, j, colorizer):
            return common_label("%.2f" % (value), None, i, j, value, colorizer)

        if is_board_label:
            return board_label_maker
        else:
            return number_label_maker

        
    def initGui(self):
        def make_game_selector():
            self.gameChanger = False
            def dbChange(evt):
                if evt.source.text: 
                    self.gamedb = GameDB(evt.source.text)
                    self.gameChanger = True
            def idChange(evt):
                if evt.source.text: 
                    self.gameid = evt.source.text
                    self.gameChanger = True
            def turnChange(evt):
                if evt.source.text: 
                    self.turnid = evt.source.text
                    self.gameChanger = True

            selector = JPanel()
            selector.add(JLabel("DB:"))
            selector.add(textfield(self.gamedb.dbfile, dbChange))
            selector.add(JLabel("Game ID:"))
            selector.add(textfield(self.gameid, idChange))
            selector.add(JLabel("Turn ID:"))
            selector.add(textfield(self.turnid, turnChange))
            return JScrollPane(selector)

        def make_content_panel():
            self.contentPanel = JPanel(GridLayout(1, 0, 5, 5))
            self.render()
            return JScrollPane(self.contentPanel)

        def save(self, txt, filename):
            pass
            
        def make_code_editor():
            import inspect
            panel = JPanel(BorderLayout(2,2))
            self.codeArea = JTextArea()
            self.codeArea.text = self.scoringModule and inspect.getsource(self.scoringModule) or ""
            panel.add(JScrollPane(self.codeArea), BorderLayout.CENTER)
            return panel

        self.frame.contentPane.add(make_game_selector(), BorderLayout.NORTH)
#        self.frame.contentPane.add(make_content_panel(), BorderLayout.WEST)
#        self.frame.contentPane.add(make_code_editor(),   BorderLayout.CENTER)
        pane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT, make_content_panel(), make_code_editor())
        pane.setDividerLocation(self.frame.width/2)
        self.frame.contentPane.add(pane)
        reloadButton = JButton("Reload")
        def reload(evt):
            self.reload()
        reloadButton.addActionListener(reload)
        self.frame.contentPane.add(reloadButton, BorderLayout.SOUTH)

    def render(self):
        self.scorer, self.colorizer = self.score and (self.score, value_color) or (default_scorer, checkerboard)
        self.scores = self.scorer(self.board)
        self.contentPanel.removeAll()
        self.contentPanel.add(make_board_panel(self.board, self.label_maker(True), self.colorizer))
        self.contentPanel.add(make_board_panel(self.scores, self.label_maker(False), self.colorizer))
        self.contentPanel.revalidate()

    def reload(self):
        if self.gameChanger:
            self.board = self.gamedb.retrieveBoard(self.gameid, self.turnid)
            self.scores = self.score(self.board)
            self.gameChanger = False
        exec(self.codeArea.text)
        self.score = score
        self.render()

    def display(self):
        self.frame.pack()
        self.frame.visible = True
        self.reload()
示例#2
0
class ScoringSandbox:
    def __init__(self,
                 db="./games.db",
                 gameid=None,
                 turnid=None,
                 scoringModule=scoreState):
        self.frame = JFrame("Scoring Sandbox",
                            defaultCloseOperation=JFrame.DISPOSE_ON_CLOSE,
                            size=(400, 300))
        self.frame.contentPane = JPanel(BorderLayout(5, 5))
        self.gamedb = GameDB(db)
        self.gameid = gameid
        self.turnid = turnid
        if gameid and turnid:
            self.board = gamedb.retrieveBoard(gameid, turnid)
        else:
            self.board = Board()
        self.scoringModule = scoringModule
        self.score = scoringModule and scoringModule.score or default_scorer
        self.initGui()
        self.display()

    def label_maker(self, is_board_label):
        def board_label_maker(board_item, i, j, colorizer):
            value = self.scores[i][j]
            label = common_label(
                its_a_trap(i, j)
                and "<html><font color='red'><b>X</b></font></html>" or "",
                PIECE_IMAGE[board_item and board_item.char
                            or None], i, j, value, colorizer)
            if board_item:
                tooltip = "<html><table>"
                for attr, value in board_item.__dict__.iteritems():
                    tooltip += "<tr><td>" + attr.capitalize(
                    ) + ":</td><td>" + str(value) + "</td></tr>"
                label.toolTipText = tooltip + "</table></html>"
            return label

        def number_label_maker(value, i, j, colorizer):
            return common_label("%.2f" % (value), None, i, j, value, colorizer)

        if is_board_label:
            return board_label_maker
        else:
            return number_label_maker

    def initGui(self):
        def make_game_selector():
            self.gameChanger = False

            def dbChange(evt):
                if evt.source.text:
                    self.gamedb = GameDB(evt.source.text)
                    self.gameChanger = True

            def idChange(evt):
                if evt.source.text:
                    self.gameid = evt.source.text
                    self.gameChanger = True

            def turnChange(evt):
                if evt.source.text:
                    self.turnid = evt.source.text
                    self.gameChanger = True

            selector = JPanel()
            selector.add(JLabel("DB:"))
            selector.add(textfield(self.gamedb.dbfile, dbChange))
            selector.add(JLabel("Game ID:"))
            selector.add(textfield(self.gameid, idChange))
            selector.add(JLabel("Turn ID:"))
            selector.add(textfield(self.turnid, turnChange))
            return JScrollPane(selector)

        def make_content_panel():
            self.contentPanel = JPanel(GridLayout(1, 0, 5, 5))
            self.render()
            return JScrollPane(self.contentPanel)

        def save(self, txt, filename):
            pass

        def make_code_editor():
            import inspect
            panel = JPanel(BorderLayout(2, 2))
            self.codeArea = JTextArea()
            self.codeArea.text = self.scoringModule and inspect.getsource(
                self.scoringModule) or ""
            panel.add(JScrollPane(self.codeArea), BorderLayout.CENTER)
            return panel

        self.frame.contentPane.add(make_game_selector(), BorderLayout.NORTH)
        #        self.frame.contentPane.add(make_content_panel(), BorderLayout.WEST)
        #        self.frame.contentPane.add(make_code_editor(),   BorderLayout.CENTER)
        pane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT, make_content_panel(),
                          make_code_editor())
        pane.setDividerLocation(self.frame.width / 2)
        self.frame.contentPane.add(pane)
        reloadButton = JButton("Reload")

        def reload(evt):
            self.reload()

        reloadButton.addActionListener(reload)
        self.frame.contentPane.add(reloadButton, BorderLayout.SOUTH)

    def render(self):
        self.scorer, self.colorizer = self.score and (
            self.score, value_color) or (default_scorer, checkerboard)
        self.scores = self.scorer(self.board)
        self.contentPanel.removeAll()
        self.contentPanel.add(
            make_board_panel(self.board, self.label_maker(True),
                             self.colorizer))
        self.contentPanel.add(
            make_board_panel(self.scores, self.label_maker(False),
                             self.colorizer))
        self.contentPanel.revalidate()

    def reload(self):
        if self.gameChanger:
            self.board = self.gamedb.retrieveBoard(self.gameid, self.turnid)
            self.scores = self.score(self.board)
            self.gameChanger = False
        exec(self.codeArea.text)
        self.score = score
        self.render()

    def display(self):
        self.frame.pack()
        self.frame.visible = True
        self.reload()
示例#3
0
class TemplateBar(TransferHandler):
    def __init__(self):
        self.panel = JPanel()
        self.panel.layout = BoxLayout(self.panel,BoxLayout.Y_AXIS)

        #self.panel.minimumSize = 55,-1
        self.panel.background = Color(0.1,0.1,0.1)
        self.max_icon_width = 40
        self.templates = {}
        self.labels = []
        self.panels = []


        self.ng = ca.nengo.ui.NengoGraphics.getInstance()
        dh = DropHandler()
        self.ng.universe.transferHandler = dh
        self.ng.universe.getDropTarget().addDropTargetListener(dh)

        self.add_template('Network','ca.nengo.ui.models.constructors.CNetwork','images/nengoIcons/network.gif')
        self.add_template('Ensemble','ca.nengo.ui.models.constructors.CNEFEnsemble','images/nengoIcons/ensemble.gif')
        self.add_template('Input','ca.nengo.ui.models.constructors.CFunctionInput','images/nengoIcons/input.png')
        #self.add_template('Origin','ca.nengo.ui.models.constructors.CDecodedOrigin','images/nengoIcons/origin.png')
        self.add_template('Origin','nef.templates.origin','images/nengoIcons/origin.png')
        self.add_template('Termination','nef.templates.termination','images/nengoIcons/termination.png')

        self.panel.add(JSeparator(JSeparator.HORIZONTAL,maximumSize = (200,1),foreground = Color(0.3,0.3,0.3),background = Color(0.1,0.1,0.1)))

        for template in nef.templates.templates:
            self.add_template(getattr(template,'label'),template.__name__,'images/nengoIcons/'+getattr(template,'icon'))

        # get NengoGraphics to add me
        self.ng.setTemplatePanel(self.panel)

    def add_template(self,name,constructor,image):
        icon = ImageIcon(image)
        if icon.iconWidth>self.max_icon_width:
            icon = ImageIcon(icon.image.getScaledInstance(self.max_icon_width,icon.iconHeight*self.max_icon_width/icon.iconWidth,Image.SCALE_SMOOTH))


        panel = JPanel(layout = BorderLayout(),opaque = False)

        button = JButton(icon = icon,toolTipText = name.replace('\n',' '),
                       borderPainted = False,focusPainted = False,contentAreaFilled = False,margin = java.awt.Insets(0,0,0,0),
                       verticalTextPosition = AbstractButton.BOTTOM,horizontalTextPosition = AbstractButton.CENTER,
                       mousePressed = lambda e: e.source.transferHandler.exportAsDrag(e.source,e,TransferHandler.COPY))
        button.transferHandler = self
        panel.add(button)

        text = '<html><center>%s</center></html>'%name.replace('\n','<br/>')
        label = JLabel(text,horizontalAlignment = SwingConstants.CENTER,foreground = Color.WHITE)
        self.labels.append(label)
        panel.add(label,BorderLayout.SOUTH)
        self.panels.append(panel)

        panel.alignmentY = Component.CENTER_ALIGNMENT
        panel.border = BorderFactory.createEmptyBorder(2,1,2,1)
        panel.maximumSize = panel.preferredSize
        self.panel.add(panel)
        self.templates[button] = constructor

    def getSourceActions(self,component):
        return TransferHandler.COPY

    def createTransferable(self,component):
        return TemplateTransferable(self.templates[component])

    def toggle_labels(self):
        for l in self.labels:
            l.visible = not l.visible
        for p in self.panels:
            p.maximumSize = p.preferredSize
            p.revalidate()
        self.panel.revalidate()
        ca.nengo.ui.NengoGraphics.getInstance().contentPane.revalidate()