def scene_list_generator(self): scenedict = get_available_scenes( useWorking = wx.GetApp().projectObject._use_working_scene) if not self.aguidata['show_hidden']: for item in scenedict.keys(): if item.startswith("__"): scenedict.pop(item) if self.return_strings: scenelist = scenedict.keys() else: scenelist = [(name, scenedict[name]) for name in scenedict.keys()] sort_case_insensitive(scenelist) for item in self.aguidata['prepend_list']: scenelist.insert(0, item) for item in self.aguidata['append_list']: scenelist.append(item) return scenelist
def save_scene_as( sceneName=None, fileName=None):#, parentWindow=None): """save_scene_as( sceneName=None, fileName=None)->Filename or False if fail Save the current scene as a class in the scenes folder sceneName: string with name to save as. If None, a dialog will be opened. parentWindow: the parent window of name dialog. If not provided, the wx.ActiveWindow will be used """ wx.GetApp().apply() if get_scene_errors(): return False if _DEBUG: print "util: save_scene_as" scene = PigDirector.scene if not sceneName: name = scene.__class__.__name__ if name == 'Scene': name = 'MyScene' name = make_valid_attr_name(name) name.capitalize() if _DEBUG: print "util: save_scene_as 1" parentWindow=None if parentWindow == None: parentWindow = wx.GetActiveWindow() default = make_valid_attr_name(name) dlg = wx.TextEntryDialog( parentWindow, "Enter the scene's class/file name", "Save Scene", default) if _DEBUG: print "util: save_scene_as 2" while not sceneName: if dlg.ShowModal() == wx.ID_OK: name = dlg.GetValue() errorDlg = None if name == 'Scene': errorDlg = wx.MessageDialog( dlg, "You can't use the name 'Scene'", "Reserved Name", wx.OK) elif name != make_valid_attr_name(name): errorDlg = wx.MessageDialog( dlg, "Name cannot contain spaces or special characters"+\ "\nand cannot start with a number", "Invalid Name", wx.OK) if errorDlg: errorDlg.ShowModal() errorDlg.Destroy() dlg.SetValue(default) dlg.SetFocus() continue path = os.path.join('scenes', name + '.py') if name != scene.__class__.__name__: try: test = file(path) except: sceneName = name else: test.close() confirmDlg = wx.MessageDialog( dlg, "Scene file already exists. Overwrite?", "Confirm Replace", wx.YES_NO | wx.NO_DEFAULT) if confirmDlg.ShowModal() == wx.ID_YES: if sys.platform == "win32": files = os.listdir('scenes') testname = name + '.py' for f in files: if f.lower() == testname.lower(): sceneName = os.path.splitext(f)[0] break else: sceneName = name confirmDlg.Destroy() else: sceneName = name else: dlg.Destroy() return False dlg.Destroy() else: if sceneName == 'Scene': raise ValueError("Can't save over baseclass 'Scene'") # save_scene_as( sceneName, fileName) if not fileName: fileName = ''.join([sceneName, '.py']) path = os.path.join('scenes',fileName) app = wx.GetApp() if _DEBUG: print "util: save_scene_as 4" selection = app.selectedObjectDict.keys() oldscene = PigDirector.scene from pig.editor.util import wait_for_state wait_for_state( None) if _DEBUG: print "util: save_scene_as 5" wx.GetApp().set_busy_state(True) saved = False try: if _DEBUG: print "util: save_scene_as enter code_exporter" code_exporter( scene, path, True, {'name':sceneName}) if _DEBUG: print "util: save_scene_as exit code_exporter" except: if _DEBUG: print "util: save_scene_as 6" show_exception_dialog() else: if _DEBUG: print "util: save_scene_as 7" sceneDict = get_available_scenes(True) if '__Working__' not in path: PigDirector.scene.__class__ = sceneDict[sceneName] saved = True if _DEBUG: print "util: save_scene_as 8" finally: if _DEBUG: print "util: save_scene_as 9" wx.GetApp().set_busy_state(False) if PigDirector.scene != oldscene: wx.GetApp().set_selection([]) if _DEBUG: print "util: save_scene_as reset select:", selection from pig.editor.EditorState import EditorState wait_for_state(EditorState) if _DEBUG: print "util: save_scene_as 10" wx.GetApp().refresh() if _DEBUG: print "util: save_scene_as 11" if saved: return fileName else: return False
def save_scene_as(sceneName=None, fileName=None): #, parentWindow=None): """save_scene_as( sceneName=None, fileName=None)->Filename or False if fail Save the current scene as a class in the scenes folder sceneName: string with name to save as. If None, a dialog will be opened. parentWindow: the parent window of name dialog. If not provided, the wx.ActiveWindow will be used """ wx.GetApp().apply() if get_scene_errors(): return False if _DEBUG: print "util: save_scene_as" scene = PigDirector.scene if not sceneName: name = scene.__class__.__name__ if name == 'Scene': name = 'MyScene' name = make_valid_attr_name(name) name.capitalize() if _DEBUG: print "util: save_scene_as 1" parentWindow = None if parentWindow == None: parentWindow = wx.GetActiveWindow() default = make_valid_attr_name(name) dlg = wx.TextEntryDialog(parentWindow, "Enter the scene's class/file name", "Save Scene", default) if _DEBUG: print "util: save_scene_as 2" while not sceneName: if dlg.ShowModal() == wx.ID_OK: name = dlg.GetValue() errorDlg = None if name == 'Scene': errorDlg = wx.MessageDialog( dlg, "You can't use the name 'Scene'", "Reserved Name", wx.OK) elif name != make_valid_attr_name(name): errorDlg = wx.MessageDialog( dlg, "Name cannot contain spaces or special characters"+\ "\nand cannot start with a number", "Invalid Name", wx.OK) if errorDlg: errorDlg.ShowModal() errorDlg.Destroy() dlg.SetValue(default) dlg.SetFocus() continue path = os.path.join('scenes', name + '.py') if name != scene.__class__.__name__: try: test = file(path) except: sceneName = name else: test.close() confirmDlg = wx.MessageDialog( dlg, "Scene file already exists. Overwrite?", "Confirm Replace", wx.YES_NO | wx.NO_DEFAULT) if confirmDlg.ShowModal() == wx.ID_YES: if sys.platform == "win32": files = os.listdir('scenes') testname = name + '.py' for f in files: if f.lower() == testname.lower(): sceneName = os.path.splitext(f)[0] break else: sceneName = name confirmDlg.Destroy() else: sceneName = name else: dlg.Destroy() return False dlg.Destroy() else: if sceneName == 'Scene': raise ValueError("Can't save over baseclass 'Scene'") # save_scene_as( sceneName, fileName) if not fileName: fileName = ''.join([sceneName, '.py']) path = os.path.join('scenes', fileName) app = wx.GetApp() if _DEBUG: print "util: save_scene_as 4" selection = app.selectedObjectDict.keys() oldscene = PigDirector.scene from pig.editor.util import wait_for_state wait_for_state(None) if _DEBUG: print "util: save_scene_as 5" wx.GetApp().set_busy_state(True) saved = False try: if _DEBUG: print "util: save_scene_as enter code_exporter" code_exporter(scene, path, True, {'name': sceneName}) if _DEBUG: print "util: save_scene_as exit code_exporter" except: if _DEBUG: print "util: save_scene_as 6" show_exception_dialog() else: if _DEBUG: print "util: save_scene_as 7" sceneDict = get_available_scenes(True) if '__Working__' not in path: PigDirector.scene.__class__ = sceneDict[sceneName] saved = True if _DEBUG: print "util: save_scene_as 8" finally: if _DEBUG: print "util: save_scene_as 9" wx.GetApp().set_busy_state(False) if PigDirector.scene != oldscene: wx.GetApp().set_selection([]) if _DEBUG: print "util: save_scene_as reset select:", selection from pig.editor.EditorState import EditorState wait_for_state(EditorState) if _DEBUG: print "util: save_scene_as 10" wx.GetApp().refresh() if _DEBUG: print "util: save_scene_as 11" if saved: return fileName else: return False