コード例 #1
0
ファイル: rur_start.py プロジェクト: cedrick-f/rur-ple
    def OpenProgramFile(self, dummy):
        if self.isRunning:
            return

        openedFileName = dialogs.openDialog(_("Choose a file"),
           _("Program files (*.rur)|*.rur| All files (*.*)|*.*"),
            "", settings.USER_PROGS_DIR)

        if openedFileName != "":
            global code
            self.filename = openedFileName
            arg = self.status_bar.program_field, \
                  os.path.basename(self.filename)
            event_manager.SendCustomEvent(self, arg)
            code = open(self.filename, 'r').read()
            code = parser.FixLineEnding(code)
            self.ProgramEditor.SetText(code)
            no_error, mesg = parser.ParseProgram(code)
            settings.USER_PROGS_DIR = os.path.dirname(self.filename)
            if no_error:
                self.raw_code = code
                self.ProgramEditor.SetSavePoint()
            else:
                code = ""
                dialogs.messageDialog(mesg, _("Program will not be used."))
コード例 #2
0
    def OpenProgramFile(self, dummy):
        if self.isRunning:
            return

        openedFileName = dialogs.openDialog(
            _("Choose a file"),
            _("Program files (*.rur)|*.rur| All files (*.*)|*.*"), "",
            settings.USER_PROGS_DIR)

        if openedFileName != "":
            global code
            self.filename = openedFileName
            arg = self.status_bar.program_field, \
                  os.path.basename(self.filename)
            event_manager.SendCustomEvent(self, arg)
            code = open(self.filename, 'r').read()
            code = parser.FixLineEnding(code)
            self.ProgramEditor.SetText(code)
            no_error, mesg = parser.ParseProgram(code)
            settings.USER_PROGS_DIR = os.path.dirname(self.filename)
            if no_error:
                self.raw_code = code
                self.ProgramEditor.SetSavePoint()
            else:
                code = ""
                dialogs.messageDialog(mesg, _("Program will not be used."))
コード例 #3
0
ファイル: rur_start.py プロジェクト: cedrick-f/rur-ple
 def BeepersToRobot(self, dummy):
     if self.user_program.isRunning:
         return
     self.user_program.clear_trace()
     try:
         dummy = self.backup_dict['robot']
     except KeyError:
         msg = _("No robot in world to give beepers to.")
         dialogs.messageDialog(msg, 'error')
         return
     dialogs.RobotBeeperDialog(self, -1, _("Beepers!"))
コード例 #4
0
 def BeepersToRobot(self, dummy):
     if self.user_program.isRunning:
         return
     self.user_program.clear_trace()
     try:
         dummy = self.backup_dict['robot']
     except KeyError:
         msg = _("No robot in world to give beepers to.")
         dialogs.messageDialog(msg, 'error')
         return
     dialogs.RobotBeeperDialog(self, -1, _("Beepers!"))
コード例 #5
0
    def SaveProgramFile(self, dummy):
        if self.isRunning:
            return
        global code
        code = self.ProgramEditor.GetText()
        no_error, mesg = parser.ParseProgram(code)
        if no_error:
            savedFileName = savedFileName = dialogs.checkedSaveDialog(
                code, _("Save new program as"),
                _("Program files (*.rur)|*.rur| All files (*.*)|*.*"),
                self.filename, settings.USER_PROGS_DIR)

            self.filename = savedFileName
            arg = self.status_bar.program_field, \
                  os.path.basename(self.filename)
            event_manager.SendCustomEvent(self, arg)
            settings.USER_PROGS_DIR = os.path.dirname(self.filename)
            self.ProgramEditor.SetSavePoint()
        else:
            code = ""
            dialogs.messageDialog(mesg, _("Program will not be saved."))
コード例 #6
0
ファイル: rur_start.py プロジェクト: cedrick-f/rur-ple
    def SaveProgramFile(self, dummy):
        if self.isRunning:
            return
        global code
        code = self.ProgramEditor.GetText()
        no_error, mesg = parser.ParseProgram(code)
        if no_error:
            savedFileName = savedFileName = dialogs.checkedSaveDialog(
                code,
                _("Save new program as"),
                _("Program files (*.rur)|*.rur| All files (*.*)|*.*"),
                self.filename, settings.USER_PROGS_DIR)

            self.filename = savedFileName
            arg = self.status_bar.program_field, \
                  os.path.basename(self.filename)
            event_manager.SendCustomEvent(self, arg)
            settings.USER_PROGS_DIR = os.path.dirname(self.filename)
            self.ProgramEditor.SetSavePoint()
        else:
            code = ""
            dialogs.messageDialog(mesg, _("Program will not be saved."))
コード例 #7
0
ファイル: rur_start.py プロジェクト: cedrick-f/rur-ple
 def OnClose(self, event):
     if self.ProgramEditor.GetModify():
             ret = dialogs.messageDialog(_(u'Save changes to %s?')
                 % unicode(self.filename), _("About to close"), wx.YES
                 | wx.NO | wx.CANCEL | wx.ICON_QUESTION | wx.STAY_ON_TOP)
             if ret == wx.ID_YES:
                 if len(self.filename) > 0:
                     try:
                         f = open(self.filename, 'w')
                         f.write(content)
                         f.close()
                     except IOError, e:
                         messageDialog(unicode(e[1]), (u'IO Error'),
                             wx.OK | wx.STAY_ON_TOP)
                 else:
                     self.SaveProgramFile(event)
             elif ret == wx.ID_NO:
                 self.Destroy()
コード例 #8
0
 def OnClose(self, event):
     if self.ProgramEditor.GetModify():
         ret = dialogs.messageDialog(
             _(u'Save changes to %s?') % unicode(self.filename),
             _("About to close"), wx.YES
             | wx.NO | wx.CANCEL | wx.ICON_QUESTION | wx.STAY_ON_TOP)
         if ret == wx.ID_YES:
             if len(self.filename) > 0:
                 try:
                     f = open(self.filename, 'w')
                     f.write(content)
                     f.close()
                 except IOError, e:
                     messageDialog(unicode(e[1]), (u'IO Error'),
                                   wx.OK | wx.STAY_ON_TOP)
             else:
                 self.SaveProgramFile(event)
         elif ret == wx.ID_NO:
             self.Destroy()
コード例 #9
0
ファイル: rur_start.py プロジェクト: cedrick-f/rur-ple
    def UpdateWorld(self):
        try:
            av = self.backup_dict['avenues']
        except:
            dialogs.messageDialog(
                   _("Problem with %s\nPlease recreate world file.")%
                   _("avenues"), 
                   _("Invalid world file format"))
            return
        try:
            st = self.backup_dict['streets']
        except:
            dialogs.messageDialog(
                   _("Problem with %s\nPlease recreate world file.")%
                   _("streets"), 
                   _("Invalid world file format"))
            return
        self.world.resetDimensions(av, st)
        try:
            if 'robot' in self.backup_dict:
                x, y, key, beep = self.backup_dict['robot']
                arg = self.status_bar.beeper_field, beep
                event_manager.SendCustomEvent(self, arg)
        except:
            dialogs.messageDialog(
                   _("Problem with %s\nPlease recreate world file.")%
                   _("robot"), 
                   _("Invalid world file format"))
            return
        # We might be reloading the world, to which robots may have been added
        # Remove all robots that have been added, if any; 
        # recall that "named" robots are added through a user-defined program, 
        # not in a world file.
        self.world.robot_dict = {}
        # Recreate the robot that was in the original file
        if 'robot' in self.backup_dict:
            self.world.addOneRobot(x, y, key, beep, name='robot')

        # world characteristics
        # note: we make shallow copies of rurApp.backup_dict as we 
        # may need it if we call ResetWorld().
        try:
            for corner in self.world.beepers_dict:
                del self.world.beepers_dict[corner] # empty, but keep reference
            for corner in self.backup_dict['beepers']:
                self.world.beepers_dict[corner] = self.backup_dict[
                                                            'beepers'][corner]
        except:
            dialogs.messageDialog(
                   _("Problem with %s\nPlease recreate world file.")%
                   _("beepers"), 
                   _("Invalid world file format"))
            return
        # We need to keep one reference only to walls_list
        try:
            for col, row in self.world.walls_list:
                self.world.walls_list.remove((col, row)) # empty, but keep ref.
            for col, row in self.backup_dict['walls']:
                self.world.walls_list.append((col, row))
        except:
            dialogs.messageDialog(
                   _("Problem with %s\nPlease recreate world file.")%
                   _("walls"), 
                   _("Invalid world file format"))
            return

        # prepare to recreate the background images
        self.world.background_images_created = False
        self.world.AdjustWorldSize()
        self.world.InitTileSizes()
        self.WorldDisplay.InitialiseVariables()
        self.world.DoDrawing()
        # create a new bitmap image
        self.WorldDisplay.buffer = wx.EmptyBitmap(self.world.maxWidth,
                                               self.world.maxHeight)
        self.WorldDisplay.drawImage()
	self.WorldDisplay.Refresh() # added to fix refresh bug (issue #23)
コード例 #10
0
    def UpdateWorld(self):
        try:
            av = self.backup_dict['avenues']
        except:
            dialogs.messageDialog(
                _("Problem with %s\nPlease recreate world file.") %
                _("avenues"), _("Invalid world file format"))
            return
        try:
            st = self.backup_dict['streets']
        except:
            dialogs.messageDialog(
                _("Problem with %s\nPlease recreate world file.") %
                _("streets"), _("Invalid world file format"))
            return
        self.world.resetDimensions(av, st)
        try:
            if 'robot' in self.backup_dict:
                x, y, key, beep = self.backup_dict['robot']
                arg = self.status_bar.beeper_field, beep
                event_manager.SendCustomEvent(self, arg)
        except:
            dialogs.messageDialog(
                _("Problem with %s\nPlease recreate world file.") % _("robot"),
                _("Invalid world file format"))
            return
        # We might be reloading the world, to which robots may have been added
        # Remove all robots that have been added, if any;
        # recall that "named" robots are added through a user-defined program,
        # not in a world file.
        self.world.robot_dict = {}
        # Recreate the robot that was in the original file
        if 'robot' in self.backup_dict:
            self.world.addOneRobot(x, y, key, beep, name='robot')

        # world characteristics
        # note: we make shallow copies of rurApp.backup_dict as we
        # may need it if we call ResetWorld().
        try:
            for corner in self.world.beepers_dict:
                del self.world.beepers_dict[
                    corner]  # empty, but keep reference
            for corner in self.backup_dict['beepers']:
                self.world.beepers_dict[corner] = self.backup_dict['beepers'][
                    corner]
        except:
            dialogs.messageDialog(
                _("Problem with %s\nPlease recreate world file.") %
                _("beepers"), _("Invalid world file format"))
            return
        # We need to keep one reference only to walls_list
        try:
            for col, row in self.world.walls_list:
                self.world.walls_list.remove(
                    (col, row))  # empty, but keep ref.
            for col, row in self.backup_dict['walls']:
                self.world.walls_list.append((col, row))
        except:
            dialogs.messageDialog(
                _("Problem with %s\nPlease recreate world file.") % _("walls"),
                _("Invalid world file format"))
            return

        # prepare to recreate the background images
        self.world.background_images_created = False
        self.world.AdjustWorldSize()
        self.world.InitTileSizes()
        self.WorldDisplay.InitialiseVariables()
        self.world.DoDrawing()
        # create a new bitmap image
        self.WorldDisplay.buffer = wx.EmptyBitmap(self.world.maxWidth,
                                                  self.world.maxHeight)
        self.WorldDisplay.drawImage()
        self.WorldDisplay.Refresh()  # added to fix refresh bug (issue #23)