You can subscribe to this list here.
2007 |
Jan
|
Feb
(3) |
Mar
|
Apr
|
May
|
Jun
(64) |
Jul
(77) |
Aug
(21) |
Sep
(15) |
Oct
(3) |
Nov
(4) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(1) |
Feb
|
Mar
(12) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(3) |
Dec
|
From: <ror...@us...> - 2007-08-07 15:14:08
|
Revision: 158 http://roreditor.svn.sourceforge.net/roreditor/?rev=158&view=rev Author: rorthomas Date: 2007-08-07 08:14:01 -0700 (Tue, 07 Aug 2007) Log Message: ----------- * added advanced odef parser for new format * added new ODef Edit Mode to Terrain Editor * bugfixed preview window * updated selection tree: right click now opens a menu, also the tree is now sorted and the root is hidden Modified Paths: -------------- trunk/lib/ror/odefparser.py trunk/lib/rorterraineditor/GUIObjectTree.py trunk/lib/rorterraineditor/MainFrame.py trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py Added Paths: ----------- trunk/lib/rorterraineditor/MainFrame_Tools_ODefEditor.py trunk/lib/rorterraineditor/RoROdefEditorOgreWindow.py Modified: trunk/lib/ror/odefparser.py =================================================================== --- trunk/lib/ror/odefparser.py 2007-08-03 23:52:10 UTC (rev 157) +++ trunk/lib/ror/odefparser.py 2007-08-07 15:14:01 UTC (rev 158) @@ -1,4 +1,8 @@ -def loadOdef(odefFilename): +# old format: +from ror.logger import log +from ror.settingsManager import getSettingsManager + +def loadOdef_old(odefFilename): f=open(odefFilename, 'r') content = f.readlines() f.close() @@ -8,3 +12,67 @@ scalearr = content[1].split(",") return (meshname, float(scalearr[0]), float(scalearr[1]), float(scalearr[2])) + +class odefbox: + rotating=False + virtual=False + eventname="" + coords=[] + rotation = [] + + # for 3d + uuid = None + node=None + entity=None + def __str__(self): + s = "" + if self.rotating: + s+= "rotating, " + if self.virtual: + s+= "virtual, " + s += " eventname='%s'" % self.eventname + s += " coordinates: " + str(self.coords) + s += " rotation: " + str(self.rotation) + return s + +def loadOdef(odefFilename): + try: + f=open(odefFilename, 'r') + content = f.readlines() + f.close() + ismovable = False + meshname = content[0].strip() + scalearr = [1,1,1] + boxes = [] + actualbox = None + if len(content[1].split(",")) > 2: + scalearr = content[1].split(",") + for line in content[1:]: + line = line.strip().lower() + if len(line) == 0 or line[0] == '/': + continue + elif line == "end": + break + elif line == "movable": + ismovable = True + elif line in ["beginbox", "beginmesh"]: + actualbox = odefbox() + elif line[:9] == "boxcoords": + actualbox.coords = line[10:].split(",") + elif line[:6] == "rotate": + actualbox.rotating=True + actualbox.rotation = line[7:].split(",") + elif line == "virtual": + actualbox.virtual=True + elif line[:5] == "event": + actualbox.eventname=line[6:] + elif line == "endbox": + boxes.append(actualbox) + print meshname, float(scalearr[0]), float(scalearr[1]), float(scalearr[2]), ismovable + print "boxes:" + for b in boxes: + print b + return meshname, float(scalearr[0]), float(scalearr[1]), float(scalearr[2]), ismovable, boxes + except Exception, err: + log().error(str(err)) + return None, None, None, None, None \ No newline at end of file Modified: trunk/lib/rorterraineditor/GUIObjectTree.py =================================================================== --- trunk/lib/rorterraineditor/GUIObjectTree.py 2007-08-03 23:52:10 UTC (rev 157) +++ trunk/lib/rorterraineditor/GUIObjectTree.py 2007-08-07 15:14:01 UTC (rev 158) @@ -26,7 +26,7 @@ vert = wx.BoxSizer(wx.VERTICAL) - tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.DefaultSize, wx.NO_BORDER) + tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.DefaultSize, wx.NO_BORDER | wx.TR_HIDE_ROOT) root = tree.AddRoot("Objects") items = [] @@ -60,23 +60,47 @@ data.SetData(object) tree.AppendItem(items[-1], objectname, 1, data=data) - - tree.Expand(root) + # root is hidden, no expand! + #tree.Expand(root) vert.Add(tree, 1, wx.EXPAND, 5) self.SetSizer(vert) self.GetSizer().SetSizeHints(self) self.tree = tree + self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick, self.tree) self.Bind(wx.EVT_TREE_SEL_CHANGED, self.onTreeSelectionChange, self.tree) - self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.addStuff, self.tree) + self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnRightClick, self.tree) #self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.BeginDrag, self.tree) + def OnLeftDClick(self, event): + self.selectedfn = self.tree.GetItemData(event.GetItem()).GetData() + self.addStuff() - def addStuff(self, event): - fn = self.tree.GetItemData(event.GetItem()).GetData() - if fn is None: + def OnRightClick(self, event): + self.selectedfn = self.tree.GetItemData(event.GetItem()).GetData() + if self.selectedfn is None: + event.Skip() return - self.parent.addStuff(fn) + + menu = wx.Menu() + item_add = menu.Append(wx.ID_ANY, "add to Terrain") + self.Bind(wx.EVT_MENU, self.addStuff, item_add) + if self.selectedfn[-4:].lower() == "odef": + #create odef menu entry + item_edit_odef = menu.Append(wx.ID_ANY, "Edit in ODef Editor") + self.Bind(wx.EVT_MENU, self.editOdef, item_edit_odef) + self.PopupMenu(menu) + menu.Destroy() + + def editOdef(self, event=None): + if self.selectedfn is None: + return + self.parent.editODefFile(self.selectedfn) + + def addStuff(self, event=None): + if self.selectedfn is None: + return + self.parent.addStuff(self.selectedfn) #def BeginDrag(self, event): # ''' # EVT_TREE_BEGIN_DRAG handler. @@ -100,6 +124,7 @@ onlyfilename, extension = os.path.splitext(filename) if extension.lower() == ".truck": files.append(os.path.join(TRUCKDIR, filename)) + files.sort() return files def getInstalledLoads(self): @@ -108,6 +133,7 @@ onlyfilename, extension = os.path.splitext(filename) if extension.lower() == ".load": files.append(os.path.join(TRUCKDIR, filename)) + files.sort() return files def getInstalledObjects(self): @@ -116,4 +142,5 @@ onlyfilename, extension = os.path.splitext(filename) if extension.lower() == ".odef": files.append(os.path.join(OBJECTDIR, filename)) + files.sort() return files \ No newline at end of file Modified: trunk/lib/rorterraineditor/MainFrame.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame.py 2007-08-03 23:52:10 UTC (rev 157) +++ trunk/lib/rorterraineditor/MainFrame.py 2007-08-07 15:14:01 UTC (rev 158) @@ -11,10 +11,12 @@ from RoRObjectPreviewOgreWindow import * from RoRTerrainSelectedObjectOgreWindow import * from RoRTerrainSelectedObjectTopOgreWindow import * +from RoROdefEditorOgreWindow import * # GUI Tools: from GUIObjectTree import * from MainFrame_Tools import * +from MainFrame_Tools_ODefEditor import * import wx import wx.grid @@ -35,6 +37,9 @@ ID_FindObject = wx.NewId() ID_Quit = wx.NewId() +ID_TerrainContent = wx.NewId() +ID_ODefEditorContent = wx.NewId() + ID_ViewHelp = wx.NewId() ID_CreateOgre = wx.NewId() @@ -78,7 +83,10 @@ file_menu.Append(wx.ID_EXIT, "Exit") view_menu = wx.Menu() - view_menu.Append(ID_CreateOgre, "Create OgreWindow") + view_menu.Append(ID_CreateOgre, "Create new 3D View") + view_menu.AppendSeparator() + view_menu.Append(ID_TerrainContent, "Terrain Editor Mode") + view_menu.Append(ID_ODefEditorContent, "ODef Editor Mode") self.managerInit() options_menu = wx.Menu() @@ -155,7 +163,7 @@ self.objectPreviewWindow = ObjectPreviewOgreWindow(self, wx.ID_ANY, rordir=self.rordir) self._mgr.AddPane(self.objectPreviewWindow, wx.aui.AuiPaneInfo(). - Name("ogretest1"). + Name("object_preview"). Caption("Object Preview"). Left(). MinSize(wx.Size(200,200)). @@ -189,7 +197,20 @@ CloseButton(True). MaximizeButton(True)) - # create the center pane + + # odef editor panels + self.oddefEditorViewSettings = OdefViewPanel(self, self) + self._mgr.AddPane(self.oddefEditorViewSettings, wx.aui.AuiPaneInfo(). + Name("odef_editor_view_settings"). + Caption("ODef Editor View Settings"). + MinSize(wx.Size(200,100)). + Left(). + CloseButton(True). + MaximizeButton(False). + Hide()) + + + # create the center pane(s) #Timer creation (for rendering) self.ogreTimer = wx.Timer() self.ogreTimer.SetOwner(self) @@ -202,14 +223,15 @@ self.Bind(wx.EVT_TIMER, self.OnGUITimer, self.guitimer) self.guitimer.Start(200) - - + # the terrain editor ogre window self.terrainOgreWin = RoRTerrainOgreWindow(self, wx.ID_ANY, rordir=self.rordir) - self._mgr.AddPane(self.terrainOgreWin, wx.aui.AuiPaneInfo().Name("ogre_content"). - CenterPane()) - - # add the toolbars to the manager - + self._mgr.AddPane(self.terrainOgreWin, wx.aui.AuiPaneInfo().Name("ogre_terrain_content").CenterPane()) + + # the odef editor ogre window (hidden): + self.odefEditorOgreWin = ODefEditorOgreWindow(self, wx.ID_ANY, rordir=self.rordir) + self._mgr.AddPane(self.odefEditorOgreWin, wx.aui.AuiPaneInfo().Name("ogre_odef_editor_content").CenterPane().Hide()) + + # add the toolbars to the manager self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo(). Name("tb1"). Caption("General Toolbar"). @@ -226,7 +248,7 @@ #for ii in xrange(len(all_panes)): # if not all_panes[ii].IsToolbar(): # all_panes[ii].Hide() - self._mgr.GetPane("ogre_content").Show() + self._mgr.GetPane("ogre_terrain_content").Show() perspective_default = self._mgr.SavePerspective() self._perspectives.append(perspective_default) @@ -245,6 +267,9 @@ self.Bind(wx.EVT_MENU, self.OnSaveTerrainAs, id=ID_SaveTerrainAs) self.Bind(wx.EVT_MENU, self.OnViewHelp, id=ID_ViewHelp) + self.Bind(wx.EVT_MENU, self.OnChangeEditorModePerMenu, id=ID_TerrainContent) + self.Bind(wx.EVT_MENU, self.OnChangeEditorModePerMenu, id=ID_ODefEditorContent) + self.Bind(wx.EVT_MENU, self.OnCreateOgre, id=ID_CreateOgre) self.Bind(wx.EVT_MENU, self.OnCreatePerspective, id=ID_CreatePerspective) @@ -258,7 +283,23 @@ self.Bind(wx.EVT_MENU_RANGE, self.OnRestorePerspective, id=ID_FirstPerspective, id2=ID_FirstPerspective+1000) - + + def OnChangeEditorModePerMenu(self, event): + self.changeEditorMode(event.GetId()) + + def changeEditorMode(self, id): + if id == ID_TerrainContent: + self._mgr.GetPane("ogre_odef_editor_content").Show(False) + self._mgr.GetPane("odef_editor_view_settings").Show(False) + self._mgr.GetPane("ogre_terrain_content").Show(True) + self._mgr.GetPane("object_preview").Show(True) + elif id == ID_ODefEditorContent: + self._mgr.GetPane("object_preview").Show(False) + self._mgr.GetPane("ogre_terrain_content").Show(False) + self._mgr.GetPane("ogre_odef_editor_content").Show(True) + self._mgr.GetPane("odef_editor_view_settings").Show(True) + self._mgr.Update() + def OnViewHelp(self, event=None): # show the settings pane, and float it floating_pane = self._mgr.GetPane("help").Float().Show() @@ -271,6 +312,7 @@ def addStuff(self, filename): try: + self.changeEditorMode(ID_TerrainContent) onlyfilename, extension = os.path.splitext(os.path.basename(filename)) if extension.lower() in ['.truck', '.load']: if not self.terrainOgreWin.addTruckToTerrain(truckFilename=filename): @@ -286,11 +328,20 @@ pass def previewObject(self, filename): - try: - self.objectPreviewWindow.loadFile(filename) - except: - pass - + #try: + self.objectPreviewWindow.loadFile(filename) + #except: + # pass + + def editODefFile(self, filename): + #try: + self.odefEditorOgreWin.loadFile(filename) + self.changeEditorMode(ID_ODefEditorContent) + self.oddefEditorViewSettings.resetControls() + #except Exception, err: + # print err + # pass + def updateObjPosRot(self, event=None): self.statusbar.SetStatusText(self.terrainOgreWin.currentStatusMsg, 1) if self.terrainOgreWin.terrain is None: Added: trunk/lib/rorterraineditor/MainFrame_Tools_ODefEditor.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame_Tools_ODefEditor.py (rev 0) +++ trunk/lib/rorterraineditor/MainFrame_Tools_ODefEditor.py 2007-08-07 15:14:01 UTC (rev 158) @@ -0,0 +1,83 @@ +import sys, os, os.path + +from ror.logger import log +from ror.settingsManager import getSettingsManager + +import wx +import wx.aui + +import cStringIO + +ID_ChangeMainMeshTrans = wx.NewId() +ID_ChangeMainMeshVisibility = wx.NewId() +ID_ChangeNormalBoxesVisibility = wx.NewId() +ID_ChangeVirtualBoxesVisibility = wx.NewId() + +class OdefViewPanel(wx.Panel): + def __init__(self, parent, frame): + wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, + wx.DefaultSize) + self._frame = frame + self.parent = parent + + vert = wx.BoxSizer(wx.VERTICAL) + + s1 = wx.BoxSizer(wx.HORIZONTAL) + self.ObjTransparencySlider = wx.SpinCtrl(self, ID_ChangeMainMeshTrans, "", wx.DefaultPosition, wx.Size(50,20), min=0, max=100, initial=60) + s1.Add((1, 1), 1, wx.EXPAND) + s1.Add(wx.StaticText(self, -1, "Object Transparency:")) + s1.Add(self.ObjTransparencySlider) + s1.Add((1, 1), 1, wx.EXPAND) + vert.Add(s1, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM, 5) + + self.chkMeshVisible = wx.CheckBox(self, ID_ChangeMainMeshVisibility, "Display Object", wx.DefaultPosition, wx.Size(50,20)) + vert.Add(self.chkMeshVisible, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM, 5) + + self.chkBoxNormalVisible = wx.CheckBox(self, ID_ChangeNormalBoxesVisibility, "Display Collision Boxes", wx.DefaultPosition, wx.Size(50,20)) + vert.Add(self.chkBoxNormalVisible, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM, 5) + + self.chkBoxVirtualVisible = wx.CheckBox(self, ID_ChangeVirtualBoxesVisibility, "Display Virtual Boxes", wx.DefaultPosition, wx.Size(50,20)) + self.chkBoxVirtualVisible.SetValue(True) + vert.Add(self.chkBoxVirtualVisible, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM, 5) + + + self.Bind(wx.EVT_SPINCTRL, self.OnMainMeshTransChange, id=ID_ChangeMainMeshTrans) + self.Bind(wx.EVT_CHECKBOX, self.OnMainMeshVisibilityChange, id=ID_ChangeMainMeshVisibility) + self.Bind(wx.EVT_CHECKBOX, self.OnNormalBoxesVisibilityChange, id=ID_ChangeNormalBoxesVisibility) + self.Bind(wx.EVT_CHECKBOX, self.OnVirtualBoxesVisibilityChange, id=ID_ChangeVirtualBoxesVisibility) + + self.SetSizer(vert) + self.GetSizer().SetSizeHints(self) + self.resetControls() + + def resetControls(self): + self.chkMeshVisible.SetValue(True) + self.chkBoxNormalVisible.SetValue(True) + self.ObjTransparencySlider.SetValue(60) + + + def OnMainMeshTransChange(self, event): + self.parent.odefEditorOgreWin.setMainMeshTrans(event.GetInt()) + + def OnMainMeshVisibilityChange(self, event): + self.parent.odefEditorOgreWin.setMainMeshVisible(event.IsChecked()) + + def OnNormalBoxesVisibilityChange(self, event): + self.parent.odefEditorOgreWin.setBoxesVisibility("normal", event.IsChecked()) + + def OnVirtualBoxesVisibilityChange(self, event): + self.parent.odefEditorOgreWin.setBoxesVisibility("virtual", event.IsChecked()) + + def loadReadme(self): + if os.path.isfile(HELPFILENAME): + try: + f = open(HELPFILENAME,'r') + content = f.read() + f.close() + return content + except Exception, err: + log().error(str(err)) + return None + else: + log().error("TerrainEditor Readme not found: %s" % HELPFILENAME) + return None Modified: trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py 2007-08-03 23:52:10 UTC (rev 157) +++ trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py 2007-08-07 15:14:01 UTC (rev 158) @@ -69,7 +69,7 @@ self.camera = self.sceneManager.createCamera(str(randomID())+'Camera') self.camera.lookAt(ogre.Vector3(0, 0, 0)) self.camera.setPosition(ogre.Vector3(0, 0, 100)) - self.camera.nearClipDistance = 0.1 + self.camera.nearClipDistance = 1 self.camera.setAutoAspectRatio(True) # create the Viewport" @@ -96,7 +96,7 @@ self.free() uuid = randomID() self.objnode, self.objentity, manualobject = createTruckMesh(self.sceneManager, filename, uuid) - print "aaa", self.objnode.getPosition() + #print "aaa", self.objnode.getPosition() elif extension.lower() in [".odef"]: self.free() uuid = randomID() @@ -104,9 +104,9 @@ def loadodef(self, filename, uuid): try: - (meshname, sx, sy, sz) = loadOdef(filename) + meshname, sx, sy, sz, ismovable, boxes = loadOdef(filename) except Exception, err: - log().error("error while processing odef file %s" % odefFilename) + log().error("error while processing odef file %s" % filename) log().error(str(err)) return # create mesh @@ -118,6 +118,7 @@ #self.objnode.setPosition(0,0,0) if not sx is None: self.objnode.setScale(sx, sy, sz) + def free(self): try: @@ -164,7 +165,10 @@ def updateCamera(self): if not self.objnode is None: self.radius = self.objentity.getBoundingRadius() * 2 - height = self.objentity.getBoundingBox().getMaximum().z + if self.objentity is None: + height = 20 + else: + height = self.objentity.getBoundingBox().getMaximum().z #pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) # always look to the center! pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) + (self.objentity.getBoundingBox().getMinimum() + self.objentity.getBoundingBox().getMaximum() ) / 2 Added: trunk/lib/rorterraineditor/RoROdefEditorOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoROdefEditorOgreWindow.py (rev 0) +++ trunk/lib/rorterraineditor/RoROdefEditorOgreWindow.py 2007-08-07 15:14:01 UTC (rev 158) @@ -0,0 +1,359 @@ +#Thomas Fischer 31/05/2007, th...@th... +import wx, math +import ogre.renderer.OGRE as ogre +from wxogre.OgreManager import * +from wxogre.wxOgreWindow import * +from ror.SimpleTruckRepresentation import * +from ror.odefparser import * +from ror.rorcommon import * + + +class TreeDropTarget(wx.PyDropTarget): + def __init__(self, window): + wx.PyDropTarget.__init__(self) + self.do = wx.FileDataObject() + self.SetDataObject(self.do) + + def OnEnter(self, x, y, d): + print "OnEnter: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy + + def OnDragOver(self, x, y, d): + print "OnDragOver: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy + + def OnLeave(self): + print "OnLeave\n" + + def OnDrop(self, x, y): + print "OnDrop: %d %d\n" % (x, y) + return True + + def OnData(self, x, y, d): + print "OnData: %d, %d, %d\n" % (x, y, d) + self.GetData() + print "%s\n" % self.do.GetFilenames() + return d + + +NEWMATNAME = "mysimple/odefeditor/objplaceholder" + +class ODefEditorOgreWindow(wxOgreWindow): + def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", **kwargs): + self.rordir = rordir + self.parent = parent + self.objnode = None + self.objentity = None + self.camalpha = 0 + self.radius = 40 + self.dragging = False + self.boxes = [] + self.objmat = None + self.randcolors = [0,0.2,0.4] + wxOgreWindow.__init__(self, parent, ID, size = size, **kwargs) + droptarget = TreeDropTarget(self) + self.SetDropTarget(droptarget) + + + def SceneInitialisation(self): + addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] + # only init things in the main window, not in shared ones! + # setup resources + for r in addresources: + ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) + + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() + + #get the scenemanager + self.sceneManager = getOgreManager().createSceneManager(ogre.ST_GENERIC) + + # create a camera + self.camera = self.sceneManager.createCamera(str(randomID())+'Camera') + self.camera.lookAt(ogre.Vector3(0, 0, 0)) + self.camera.setPosition(ogre.Vector3(0, 0, 100)) + self.camera.nearClipDistance = 1 + self.camera.setAutoAspectRatio(True) + + # create the Viewport" + self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) + self.viewport.backgroundColour = ogre.ColourValue(0, 0, 0) + + # bind mouse and keyboard + d=10.0 #displacement for key strokes + self.ControlKeyDict={wx.WXK_LEFT:ogre.Vector3(-d,0.0,0.0), + wx.WXK_RIGHT:ogre.Vector3(d,0.0,0.0), + wx.WXK_UP:ogre.Vector3(0.0,0.0,-d), + wx.WXK_DOWN:ogre.Vector3(0.0,0.0,d), + wx.WXK_PAGEUP:ogre.Vector3(0.0,d,0.0), + wx.WXK_PAGEDOWN:ogre.Vector3(0.0,-d,0.0)} + self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) + #self.Bind(wx.EVT_KEY_UP, self.onKeyUp) + self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) + #create objects + self.populateScene() + + def loadFile(self, filename): + self.filename = filename + filenameonly, extension = os.path.splitext(filename) + if extension.lower() in [".truck", ".load"]: + self.free() + uuid = randomID() + self.objnode, self.objentity, manualobject = createTruckMesh(self.sceneManager, filename, uuid) + elif extension.lower() in [".odef"]: + self.free() + uuid = randomID() + self.loadodef(filename, uuid) + + def loadodef(self, filename, uuid): + try: + meshname, sx, sy, sz, ismovable, boxes = loadOdef(filename) + except Exception, err: + log().error("error while processing odef file %s" % filename) + log().error(str(err)) + return + # create mesh + self.objnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"objnode") + self.objentity = self.sceneManager.createEntity(uuid+'objentity', meshname) + self.objnode.attachObject(self.objentity) + self.objnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + + self.objOriginalMat = ogre.MaterialManager.getSingleton().getByName(self.objentity.getSubEntity(0).getMaterialName()) + if self.objmat is None: + self.objmat = ogre.MaterialManager.getSingleton().getByName(NEWMATNAME) + self.objOriginalMat.copyDetailsTo(self.objmat) + # self.objmat = ogre.MaterialManager.getSingleton().getByName(NEWMATNAME) + self.objmat.setSceneBlending(ogre.SceneBlendFactor.SBF_SOURCE_ALPHA, ogre.SceneBlendFactor.SBF_DEST_ALPHA ) + self.objentity.setMaterialName(NEWMATNAME) + self.setMainMeshTrans(60) + + self.objnode.setPosition(0,0,0) + if not sx is None: + self.objnode.setScale(sx, sy, sz) + for box in boxes: + + matname = "mysimple/odefeditor/transred" + if box.virtual: + matname = "mysimple/odefeditor/transgreen" + matname = self.getNewMat(matname) + box.uuid = randomID() + box.node = self.sceneManager.getRootSceneNode().createChildSceneNode(box.uuid+"boxnode") + box.entity = self.sceneManager.createEntity(box.uuid+'boxentity', "beam.mesh") + box.entity.setMaterialName(matname) + box.node.attachObject(box.entity) + + if box.rotating: + rotx = float(box.rotation[0]) + roty = float(box.rotation[1]) + rotz = float(box.rotation[2]) + box.node.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(rotz),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + box.node.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(roty),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + box.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(rotx),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + + x = float(box.coords[0]) + x1 = float(box.coords[1]) + y = float(box.coords[2]) + y1 = float(box.coords[3]) + z = float(box.coords[4]) + z1 = float(box.coords[5]) + xdiff = x1-x + ydiff = y1-y + zdiff = z1-z + box.node.setPosition(x+xdiff/2, y+ydiff/2, z+zdiff/2) + box.node.setScale(xdiff, ydiff, zdiff) + self.boxes.append(box) + + def getNewMat(self, basematname): + uuid = randomID() + matname = uuid+"mat" + basemat = ogre.MaterialManager.getSingleton().getByName(basematname) + mat = ogre.MaterialManager.getSingleton().create(matname, basemat.getGroup()) + basemat.copyDetailsTo(mat) + #mat = ogre.MaterialManager.getSingleton().getByName(matname) + for i in range(0,2): + self.randcolors[i] += 0.1 + if self.randcolors[i] >= 1: + self.randcolors[i] -= 1 + mat.setDiffuse(self.randcolors[0], self.randcolors[1], self.randcolors[2], 0.8) + mat.setSpecular(self.randcolors[0], self.randcolors[1], self.randcolors[2], 0.8) + mat.setSelfIllumination(self.randcolors[0], self.randcolors[1], self.randcolors[2]) + mat.setAmbient(self.randcolors[0], self.randcolors[1], self.randcolors[2]) + print "new material:", matname + return matname + + def setMainMeshTrans(self, alpha): + alpha = float(alpha) / float(100) + self.objmat.setDiffuse(0.5, 1, 0.5, alpha) + self.objmat.setSpecular(0.5, 1, 0.5, alpha) + + def setMainMeshVisible(self, visible): + self.objentity.setVisible(visible) + + def setBoxesVisibility(self, type, visible): + for box in self.boxes: + if type == "normal" and box.virtual == False: + box.entity.setVisible(visible) + elif type == "virtual" and box.virtual == True: + box.entity.setVisible(visible) + + def free(self): + for box in self.boxes: + try: + box.node.detachAllObjects() + self.sceneManager.destroySceneNode(box.node.getName()) + except: + pass + try: + self.sceneManager.destroyEntity(box.entity) + except: + pass + self.boxes = [] + + try: + self.sceneManager.destroyAllManualObjects() + except: + pass + try: + self.objnode.detachAllObjects() + self.sceneManager.destroySceneNode(self.objnode.getName()) + except: + pass + try: + self.sceneManager.destroyEntity(self.objentity) + except: + pass + + def populateScene(self): + self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) + self.sceneManager.setShadowTechnique(ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE); + self.sceneManager.setSkyDome(True, 'mysimple/terraineditor/previewwindowsky', 4.0, 8.0) + + #self.MainLight = self.sceneManager.createLight('MainLight') + #self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) + + # add some fog + self.sceneManager.setFog(ogre.FOG_EXP, ogre.ColourValue.White, 0.0002) + + # create a floor Mesh + plane = ogre.Plane() + plane.normal = ogre.Vector3(0, 1, 0) + plane.d = 200 + uuid = str(randomID()) + ogre.MeshManager.getSingleton().createPlane(uuid + 'FloorPlane', "General", plane, 200000.0, 200000.0, + 20, 20, True, 1, 50.0, 50.0,ogre.Vector3(0, 0, 1), + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + True, True) + + # create floor entity + entity = self.sceneManager.createEntity(uuid+'floor', uuid + 'FloorPlane') + entity.setMaterialName('mysimple/terraineditor/previewwindowfloor') + self.sceneManager.getRootSceneNode().createChildSceneNode().attachObject(entity) + + def updateCamera(self): + return + if not self.objnode is None: + self.radius = self.objentity.getBoundingRadius() * 2 + height = self.objentity.getBoundingBox().getMaximum().z + #pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) + # always look to the center! + pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) + (self.objentity.getBoundingBox().getMinimum() + self.objentity.getBoundingBox().getMaximum() ) / 2 + dx = math.cos(self.camalpha) * self.radius + dy = math.sin(self.camalpha) * self.radius + self.camera.setPosition(pos - ogre.Vector3(dx, -5, dy)) + self.camera.lookAt(pos + ogre.Vector3(0, height / 2, 0)) + + # disable auto rotation + #if self.dragging == False: + # self.camalpha += math.pi / 720 + if self.camalpha >= 360: + self.camalpha -= 360 + + + def OnFrameStarted(self): + self.updateCamera() + wxOgreWindow.OnFrameStarted(self) + + def onMouseEvent(self,event): + self.SetFocus() + width, height, a, b, c = self.renderWindow.getMetrics() + + if event.RightDown(): #Precedes dragging + self.StartDragX, self.StartDragY = event.GetPosition() #saves position of initial click + if event.GetWheelRotation() != 0: + zfactor = 0.001 + if event.ShiftDown(): + zfactor = 0.01 + zoom = zfactor * -event.GetWheelRotation() + self.camera.moveRelative(ogre.Vector3(0,0, zoom)) + + if event.Dragging() and event.RightIsDown() and event.ControlDown(): + x,y = event.GetPosition() + dx = self.StartDragX - x + dy = self.StartDragY - y + self.StartDragX, self.StartDragY = x, y + if event.ShiftDown(): + dx = float(dx) / 10 + dy = float(dy) / 10 + else: + dx = float(dx) / 50 + dy = float(dy) / 50 + self.camera.moveRelative(ogre.Vector3(dx,-dy,0)) + + elif event.Dragging() and event.RightIsDown(): #Dragging with RMB + x,y = event.GetPosition() + dx = self.StartDragX - x + dy = self.StartDragY - y + self.StartDragX, self.StartDragY = x, y + + self.camera.yaw(ogre.Degree(dx/3.0)) + self.camera.pitch(ogre.Degree(dy/3.0)) + if event.LeftDown(): + #self.selectnew(event) + self.StartDragLeftX, self.StartDragLeftY = event.GetPosition() #saves position of initial click + zfactor = 0.1 + if event.ShiftDown(): + zfactor = 5 + zoom = zfactor * -event.GetWheelRotation() + self.camera.moveRelative(ogre.Vector3(0,0, zoom)) + + def onKeyDown(self,event): + #print event.m_keyCode + d = 3 + if event.ShiftDown(): + d = 10 + if event.m_keyCode == 65: # A, wx.WXK_LEFT: + self.camera.moveRelative(ogre.Vector3(-d,0,0)) + elif event.m_keyCode == 68: # D, wx.WXK_RIGHT: + self.camera.moveRelative(ogre.Vector3(d,0,0)) + elif event.m_keyCode == 87: # W ,wx.WXK_UP: + self.camera.moveRelative(ogre.Vector3(0,0,-d)) + elif event.m_keyCode == 83: # S, wx.WXK_DOWN: + self.camera.moveRelative(ogre.Vector3(0,0,d)) + elif event.m_keyCode == wx.WXK_PAGEUP: + self.camera.moveRelative(ogre.Vector3(0,d,0)) + elif event.m_keyCode == wx.WXK_PAGEDOWN: + self.camera.moveRelative(ogre.Vector3(0,-d,0)) + elif event.m_keyCode == 84: # 84 = T + if self.filtering == ogre.TFO_BILINEAR: + self.filtering = ogre.TFO_TRILINEAR + self.Aniso = 1 + elif self.filtering == ogre.TFO_TRILINEAR: + self.filtering = ogre.TFO_ANISOTROPIC + self.Aniso = 8 + else: + self.filtering = ogre.TFO_BILINEAR + self.Aniso = 1 + ogre.MaterialManager.getSingleton().setDefaultTextureFiltering(self.filtering) + ogre.MaterialManager.getSingleton().setDefaultAnisotropy(self.Aniso) + elif event.m_keyCode == 82: # 82 = R + detailsLevel = [ ogre.PM_SOLID, + ogre.PM_WIREFRAME, + ogre.PM_POINTS ] + self.sceneDetailIndex = (self.sceneDetailIndex + 1) % len(detailsLevel) + self.camera.polygonMode=detailsLevel[self.sceneDetailIndex] + elif event.m_keyCode == 81: # Q, wx.WXK_LEFT: + self.enablephysics = not self.enablephysics \ No newline at end of file Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-03 23:52:10 UTC (rev 157) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-07 15:14:01 UTC (rev 158) @@ -197,7 +197,9 @@ self.camera = self.sceneManager.createCamera(str(cameraUUID)+"camera") self.camera.lookAt(ogre.Vector3(0, 0, 0)) self.camera.setPosition(ogre.Vector3(0, 0, 100)) - self.camera.nearClipDistance = 0.1 + + # dont set this too low, or you will get z-fights!! + self.camera.nearClipDistance = 2 self.camera.setAutoAspectRatio(True) # create the Viewport" @@ -491,7 +493,7 @@ meshname = None try: - (meshname, sx, sy, sz) = loadOdef(odefFilename) + meshname, sx, sy, sz, ismovable, boxes = loadOdef(odefFilename) except Exception, err: data.error=True log().error("error while processing odef file %s" % odefFilename) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-03 23:52:13
|
Revision: 157 http://roreditor.svn.sourceforge.net/roreditor/?rev=157&view=rev Author: rorthomas Date: 2007-08-03 16:52:10 -0700 (Fri, 03 Aug 2007) Log Message: ----------- * small fix Modified Paths: -------------- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-03 23:46:45 UTC (rev 156) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-03 23:52:10 UTC (rev 157) @@ -214,7 +214,9 @@ self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) self.virtualMoveNode = self.sceneManager.getRootSceneNode().createChildSceneNode() - self.virtualMoveNode.attachObject(self.sceneManager.createEntity("afsdfsdfsfsdfsdfasdf", "arrow.mesh") ) + + # this is for debugging of the grid system: + #self.virtualMoveNode.attachObject(self.sceneManager.createEntity("afsdfsdfsfsdfsdfasdf", "arrow.mesh") ) #create objects self.populateScene() @@ -795,10 +797,13 @@ forcex /= 10 forcey /= 10 - LockSteps = not event.AltDown() + LockSteps = event.AltDown() forceDegree = ogre.Degree(forcex).valueRadians() + if not event.Dragging(): + return + #print self.SelectedArrow.getName(), forcex, forcey if self.SelectedArrow.getName() == 'movearrowsX': self.translateSelected(ogre.Vector3(forcex, 0, 0), LockSteps) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-03 23:47:20
|
Revision: 156 http://roreditor.svn.sourceforge.net/roreditor/?rev=156&view=rev Author: rorthomas Date: 2007-08-03 16:46:45 -0700 (Fri, 03 Aug 2007) Log Message: ----------- * rotation/translation reworked, now a grid can be used, try to press the alt key while moving Modified Paths: -------------- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-03 11:49:20 UTC (rev 155) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-03 23:46:45 UTC (rev 156) @@ -72,6 +72,7 @@ # movement related keyPress = ogre.Vector3(0,0,0) moveVector = ogre.Vector3(0,0,0) + virtualMoveNode = None # selection related selectionMaterial = None @@ -86,6 +87,8 @@ RotateNode = None stickCurrentObjectToGround = False + + def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", maininstance=None, **kwargs): self.rordir = rordir self.maininstance = maininstance @@ -210,6 +213,9 @@ self.Bind(wx.EVT_KEY_UP, self.onKeyUp) self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) + self.virtualMoveNode = self.sceneManager.getRootSceneNode().createChildSceneNode() + self.virtualMoveNode.attachObject(self.sceneManager.createEntity("afsdfsdfsfsdfsdfasdf", "arrow.mesh") ) + #create objects self.populateScene() @@ -260,9 +266,13 @@ def reattachArrows(self, entity): self.TranslateNode.setPosition(entity.getParentNode().getPosition()) self.TranslateNode.setOrientation(entity.getParentNode().getOrientation()) + self.RotateNode.setOrientation(entity.getParentNode().getOrientation()) self.RotateNode.setPosition(entity.getParentNode().getPosition()) + self.virtualMoveNode.setOrientation(entity.getParentNode().getOrientation()) + self.virtualMoveNode.setPosition(entity.getParentNode().getPosition()) + def createArrows(self): if not self.TranslateNode is None: return @@ -714,7 +724,59 @@ #self.entries[obj.uuid].node.setPosition(obj.node.getPosition) self.currentStatusMsg = "redo step %d of %d" % (self.historypointer+1, len(self.commandhistory)) + + + def rotateSelected(self, axis, amount, steps=True): + if not self.selectedEntry: + return + self.virtualMoveNode.rotate(axis, amount, relativeTo=ogre.Node.TransformSpace.TS_LOCAL) + newrot = self.virtualMoveNode.getOrientation() + + # todo: get this working! + if False: + print amount + stepsize = 10 + rotzz = -ogre.Radian(newrot.getYaw()).valueDegrees() + rotz = rotzz - (rotzz % stepsize) + rotyy = ogre.Radian(newrot.getRoll()).valueDegrees() + roty = rotyy - (rotyy % stepsize) + rotxx = ogre.Radian(newrot.getPitch()).valueDegrees() + rotx = rotxx - (rotxx % stepsize) + print rotx, roty, rotz, rotxx, rotyy, rotzz + self.virtualMoveNode.resetOrientation() + self.virtualMoveNode.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(rotz).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + self.virtualMoveNode.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(roty).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + self.virtualMoveNode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(rotx).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + + newrot = self.virtualMoveNode.getOrientation() + + self.RotateNode.setOrientation(newrot) + self.addObjectToHistory(self.selectedEntry) + self.selectedEntry.node.setOrientation(newrot) + + def translateSelected(self, vector, steps=True): + if not self.selectedEntry: + return + self.virtualMoveNode.translate(vector, relativeTo=ogre.Node.TransformSpace.TS_WORLD) + newpos = self.virtualMoveNode.getPosition() + + if steps: + stepsize = 2 + x = newpos.x - (newpos.x % stepsize) + y = newpos.y - (newpos.y % stepsize) + z = newpos.z - (newpos.z % stepsize) + newpos = ogre.Vector3(x, y, z) + + if self.stickCurrentObjectToGround: + newpos = self.StickVectorToGround(newpos) + + + self.TranslateNode.setPosition(newpos) + self.RotateNode.setPosition(newpos) + self.addObjectToHistory(self.selectedEntry) + self.selectedEntry.node.setPosition(newpos) + def controlArrows(self, event): if self.SelectedArrow is None: return @@ -733,48 +795,23 @@ forcex /= 10 forcey /= 10 + LockSteps = not event.AltDown() + forceDegree = ogre.Degree(forcex).valueRadians() - + #print self.SelectedArrow.getName(), forcex, forcey if self.SelectedArrow.getName() == 'movearrowsX': - self.TranslateNode.translate(forcex,0,0,relativeTo=ogre.Node.TransformSpace.TS_LOCAL) - if self.stickCurrentObjectToGround: - self.TranslateNode.setPosition(self.StickVectorToGround(self.TranslateNode.getPosition())) - self.RotateNode.setPosition(self.TranslateNode.getPosition()) - if self.selectedEntry: - self.addObjectToHistory(self.selectedEntry) - self.selectedEntry.node.setPosition(self.TranslateNode.getPosition()) + self.translateSelected(ogre.Vector3(forcex, 0, 0), LockSteps) elif self.SelectedArrow.getName() == 'movearrowsY': - self.TranslateNode.translate(0,0,forcex,relativeTo=ogre.Node.TransformSpace.TS_LOCAL) - if self.stickCurrentObjectToGround: - self.TranslateNode.setPosition(self.StickVectorToGround(self.TranslateNode.getPosition())) - self.RotateNode.setPosition(self.TranslateNode.getPosition()) - if self.selectedEntry: - self.addObjectToHistory(self.selectedEntry) - self.selectedEntry.node.setPosition(self.TranslateNode.getPosition()) + self.translateSelected(ogre.Vector3(0, forcex, 0), LockSteps) elif self.SelectedArrow.getName() == 'movearrowsZ': - self.TranslateNode.translate(0,forcex,0,relativeTo=ogre.Node.TransformSpace.TS_LOCAL) - if self.stickCurrentObjectToGround: - self.TranslateNode.setPosition(self.StickVectorToGround(self.TranslateNode.getPosition())) - self.RotateNode.setPosition(self.TranslateNode.getPosition()) - if self.selectedEntry: - self.addObjectToHistory(self.selectedEntry) - self.selectedEntry.node.setPosition(self.TranslateNode.getPosition()) + self.translateSelected(ogre.Vector3(0, 0, forcex), LockSteps) elif self.SelectedArrow.getName() == 'rotatearrowsX': - self.RotateNode.yaw(forceDegree) - if self.selectedEntry: - self.addObjectToHistory(self.selectedEntry) - self.selectedEntry.node.yaw(forceDegree) + self.rotateSelected(ogre.Vector3.UNIT_Y, forceDegree, LockSteps) elif self.SelectedArrow.getName() == 'rotatearrowsY': - self.RotateNode.pitch(forceDegree) - if self.selectedEntry: - self.addObjectToHistory(self.selectedEntry) - self.selectedEntry.node.pitch(forceDegree) + self.rotateSelected(ogre.Vector3.UNIT_X, forceDegree, LockSteps) elif self.SelectedArrow.getName() == 'rotatearrowsZ': - self.RotateNode.roll(forceDegree) - if self.selectedEntry: - self.addObjectToHistory(self.selectedEntry) - self.selectedEntry.node.roll(forceDegree) + self.rotateSelected(ogre.Vector3.UNIT_Z, forceDegree, LockSteps) def onMouseEvent(self, event): if self.terrain is None: @@ -782,10 +819,7 @@ width, height, a, b, c = self.renderWindow.getMetrics() - try: - self.controlArrows(event) - except: - pass + self.controlArrows(event) if event.RightDown() or event.LeftDown(): self.SetFocus() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-03 12:22:03
|
Revision: 155 http://roreditor.svn.sourceforge.net/roreditor/?rev=155&view=rev Author: rorthomas Date: 2007-08-03 04:49:20 -0700 (Fri, 03 Aug 2007) Log Message: ----------- * re-enabled rotation for trucks * changed 3d models of arrows and the ground pointer Modified Paths: -------------- trunk/lib/ror/terrainparser.py trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py trunk/media/models/roundarrow.mesh Added Paths: ----------- trunk/media/models/cylinder.mesh Removed Paths: ------------- trunk/media/models/circlepointer.mesh Modified: trunk/lib/ror/terrainparser.py =================================================================== --- trunk/lib/ror/terrainparser.py 2007-08-03 01:07:48 UTC (rev 154) +++ trunk/lib/ror/terrainparser.py 2007-08-03 11:49:20 UTC (rev 155) @@ -156,7 +156,7 @@ truck.setPosition(x, y, z) truck.setRotation(rx, ry, -rz) truck.additionaloptions = objname[1:] - truck.mayRotate=False + #truck.mayRotate=False self.trucks.append(truck) continue if objname[0][0:4] == "load" and len(objname) > 1: @@ -168,7 +168,7 @@ load.setPosition(x, y, z) load.setRotation(rx, ry, -rz) load.additionaloptions = objname[1:] - load.mayRotate=False + #load.mayRotate=False self.loads.append(load) continue Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-03 01:07:48 UTC (rev 154) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-03 11:49:20 UTC (rev 155) @@ -296,6 +296,7 @@ nry = nr.createChildSceneNode("rotatearrowsnodeY") ery = self.sceneManager.createEntity("rotatearrowsY", "roundarrow.mesh") + nry.rotate(ogre.Vector3.UNIT_X, ogre.Degree(180).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) nry.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) ery.setMaterialName("mysimple/transred") nry.setInheritOrientation(True) @@ -309,10 +310,11 @@ # terrain selection node nt = self.sceneManager.getRootSceneNode().createChildSceneNode("terrainselectnode") - et = self.sceneManager.createEntity("circlepointer", "circlepointer.mesh") + et = self.sceneManager.createEntity("circlepointer", "cylinder.mesh") et.setMaterialName("mysimple/terrainselect") nt.rotate(ogre.Vector3.UNIT_X, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) nt.attachObject(et) + nt.setScale(5,5,5) self.TerrainSelectNode = nt self.TranslateNode = n Deleted: trunk/media/models/circlepointer.mesh =================================================================== (Binary files differ) Added: trunk/media/models/cylinder.mesh =================================================================== (Binary files differ) Property changes on: trunk/media/models/cylinder.mesh ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/media/models/roundarrow.mesh =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-03 01:07:59
|
Revision: 154 http://roreditor.svn.sourceforge.net/roreditor/?rev=154&view=rev Author: rorthomas Date: 2007-08-02 18:07:48 -0700 (Thu, 02 Aug 2007) Log Message: ----------- * bugfixed new ogre window function Modified Paths: -------------- trunk/lib/rorterraineditor/MainFrame.py trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py Modified: trunk/lib/rorterraineditor/MainFrame.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame.py 2007-08-03 00:39:49 UTC (rev 153) +++ trunk/lib/rorterraineditor/MainFrame.py 2007-08-03 01:07:48 UTC (rev 154) @@ -359,11 +359,16 @@ dlg.Destroy() def OnClose(self, event): + self.OnExit(event) + + def OnExit(self, event): + all_panes = self._mgr.GetAllPanes() + for ii in xrange(len(all_panes)): + if not all_panes[ii].IsToolbar(): + all_panes[ii].Hide() self._mgr.UnInit() del self._mgr self.Destroy() - - def OnExit(self, event): self.Close() def OnAbout(self, event): @@ -438,7 +443,7 @@ self._mgr.Update() def CreateOgreCtrl(self): - return RoRTerrainOgreWindow(self, wx.ID_ANY, scenemanager=self.terrainOgreWin.sceneManager) + return RoRTerrainOgreWindow(self, wx.ID_ANY, maininstance=self.terrainOgreWin) def startApp(): MainApp = wx.PySimpleApp(0) Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-03 00:39:49 UTC (rev 153) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-03 01:07:48 UTC (rev 154) @@ -86,9 +86,11 @@ RotateNode = None stickCurrentObjectToGround = False - def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", scenemanager=None, **kwargs): + def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", maininstance=None, **kwargs): self.rordir = rordir - self.sceneManager = scenemanager + self.maininstance = maininstance + if not maininstance is None: + self.sceneManager = maininstance.sceneManager self.parent = parent self.size = size self.kwargs = kwargs @@ -185,7 +187,8 @@ #get the scenemanager self.sceneManager = getOgreManager().createSceneManager(ogre.ST_EXTERIOR_CLOSE) - + else: + self.terrain = self.maininstance.terrain # create a camera cameraUUID = randomID() self.camera = self.sceneManager.createCamera(str(cameraUUID)+"camera") @@ -206,11 +209,10 @@ self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) self.Bind(wx.EVT_KEY_UP, self.onKeyUp) self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) + + #create objects + self.populateScene() - if not hasparent: - #create objects - self.populateScene() - def updateWaterPlane(self): self.waternode.setPosition(1500, self.terrain.WaterHeight + 200, 1500) @@ -559,8 +561,8 @@ self.sceneManager.setFog(ogre.FOG_LINEAR, fadeColour, 0.001, 5000.0, 10000.0) self.renderWindow.getViewport(0).BackgroundColour = fadeColour - l = self.sceneManager.createLight("MainLight") - l.setPosition(20,80,50) + #l = self.sceneManager.createLight(str(randomID())+"MainLight") + #l.setPosition(20,80,50) #create ray template self.selectionRaySceneQuery = self.sceneManager.createRayQuery(ogre.Ray()); @@ -772,12 +774,16 @@ self.addObjectToHistory(self.selectedEntry) self.selectedEntry.node.roll(forceDegree) - def onMouseEvent(self,event): + def onMouseEvent(self, event): if self.terrain is None: return width, height, a, b, c = self.renderWindow.getMetrics() - self.controlArrows(event) + + try: + self.controlArrows(event) + except: + pass if event.RightDown() or event.LeftDown(): self.SetFocus() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-03 00:39:50
|
Revision: 153 http://roreditor.svn.sourceforge.net/roreditor/?rev=153&view=rev Author: rorthomas Date: 2007-08-02 17:39:49 -0700 (Thu, 02 Aug 2007) Log Message: ----------- * improved SimpleTruckRepresentation.py, trucks and loads now have the correct texture! * fixed truck selection bug * removed unused materials Modified Paths: -------------- trunk/lib/ror/SimpleTruckRepresentation.py trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py trunk/media/materials/mysimple.material Modified: trunk/lib/ror/SimpleTruckRepresentation.py =================================================================== --- trunk/lib/ror/SimpleTruckRepresentation.py 2007-08-02 17:33:37 UTC (rev 152) +++ trunk/lib/ror/SimpleTruckRepresentation.py 2007-08-03 00:39:49 UTC (rev 153) @@ -19,6 +19,7 @@ return False try: + myManualObject = sceneManager.createManualObject(str(uuid)+"manual") #myManualObjectMaterial = ogre.MaterialManager.getSingleton().create("manualmaterial"+truckname+str(self.randomcounter),"debugger"); @@ -29,17 +30,86 @@ #myManualObjectMaterial.getTechnique(0).getPass(0).setSelfIllumination(0,0,1) #myManualObjectMaterial.getTechnique(0).getPass(0).setCullingMode(ogre.CULL_ANTICLOCKWISE) - matname = "" - if fn[-4:].lower() == "load": - matname = 'mysimple/loadcolor' - elif fn[-5:].lower() == "truck": - matname = 'mysimple/truckcolor' - + matname = "mysimple/water" + myManualObject.useIndexes = True myManualObject.estimateVertexCount(2000) myManualObject.estimateIndexCount(2000) - myManualObject.begin(matname+"grid", ogre.RenderOperation.OT_LINE_LIST) + minPos = ogre.Vector3(999,999,999) + maxPos = ogre.Vector3(-999,-999,-999) + matname = p.tree['globals'][0]['data'][2] + + if len(p.tree['submeshgroups']) > 0: + nodecounter = 0 + nodes = {} + myManualObject.begin(matname, ogre.RenderOperation.OT_TRIANGLE_LIST) + for nodeobj in p.tree['nodes']: + if nodeobj.has_key('type'): + continue + node = nodeobj['data'] + nodes[nodecounter] = [float(node[1]),float(node[2]),float(node[3])] + nodecounter +=1 + + # get min/max positions + if float(node[0]) < minPos.x: minPos.x = float(node[0]) + if float(node[1]) < minPos.y: minPos.y = float(node[1]) + if float(node[2]) < minPos.z: minPos.z = float(node[2]) + if float(node[0]) > maxPos.x: maxPos.x = float(node[0]) + if float(node[1]) > maxPos.y: maxPos.y = float(node[1]) + if float(node[2]) > maxPos.z: maxPos.z = float(node[2]) + + nodecounter = 0 + #print len(p.tree['submeshgroups']) + counter = 0 + if len(p.tree['submeshgroups']) > 0: + faces = [] + for smobj in p.tree['submeshgroups']: + uv = {} + for data in smobj['texcoords']: + tex = data['data'] + uv[int(tex[0])] = [float(tex[1]), float(tex[2])] + + for cabobj in smobj['cab']: + if cabobj.has_key('type'): + continue + cab = cabobj['data'] + #print "########face" + if cab != []: + try: + myManualObject.position(nodes[int(cab[2])]) + myManualObject.index(nodecounter) + nodecounter += 1 + myManualObject.textureCoord(uv[int(cab[2])][0], uv[int(cab[2])][1]) + + myManualObject.position(nodes[int(cab[1])]) + myManualObject.index(nodecounter) + nodecounter += 1 + + myManualObject.textureCoord(uv[int(cab[1])][0], uv[int(cab[1])][1]) + + myManualObject.position(nodes[int(cab[0])]) + myManualObject.index(nodecounter) + nodecounter += 1 + + myManualObject.textureCoord(uv[int(cab[0])][0], uv[int(cab[0])][1]) + + except: + print "error with cab: " + str(cab) + pass + else: + print "truck has no faces!" + + myManualObject.end() + myManualObject.setCastShadows(False) + mat = ogre.MaterialManager.getSingleton().getByName(matname) + if not mat is None: + mat.setCullingMode(ogre.CullingMode.CULL_NONE) + # create the mesh now + mesh = myManualObject.convertToMesh(str(uuid)+"manual") + + # add the lines! + myManualObject.begin(matname, ogre.RenderOperation.OT_LINE_LIST) for nodeobj in p.tree['nodes']: if nodeobj.has_key('type'): continue @@ -52,51 +122,16 @@ myManualObject.index(int(beam[0])) myManualObject.index(int(beam[1])) myManualObject.end() - myManualObject.begin(matname, ogre.RenderOperation.OT_TRIANGLE_LIST) - for nodeobj in p.tree['nodes']: - if nodeobj.has_key('type'): - continue - node = nodeobj['data'] - myManualObject.position(float(node[1]),float(node[2]),float(node[3])) - - #print len(p.tree['submeshgroups']) - if len(p.tree['submeshgroups']) > 0: - faces = [] - for smobj in p.tree['submeshgroups']: - for cabobj in smobj['cab']: - if cabobj.has_key('type'): - continue - cab = cabobj['data'] - #print "########face" - if cab != []: - try: - myManualObject.triangle(int(cab[0]),int(cab[1]),int(cab[2])) - except: - print "error with cab: " + str(cab) - pass - else: - print "truck has no faces!" - - myManualObject.end() + + entity = sceneManager.createEntity(str(uuid)+"entity", str(uuid)+"manual") + + myManualObjectNode = sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") + newpos = (minPos+maxPos)/2 + #print "min:", minPos, "max:", maxPos, "newpos:", newpos + myManualObjectNode.setPosition(-newpos) + myManualObjectNode.attachObject(entity) + myManualObjectNode.attachObject(myManualObject) - try: - mesh = myManualObject.convertToMesh(str(uuid)+"manual") - entity = sceneManager.createEntity(str(uuid)+"entity", str(uuid)+"manual") - #trucknode = sceneManager.getRootSceneNode().createChildSceneNode() - myManualObjectNode = sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") - myManualObjectNode.attachObject(myManualObject) - mesh = myManualObject.convertToMesh(str(uuid)+"manual") - entity = sceneManager.createEntity(str(uuid)+"entity", str(uuid)+"manual") - #trucknode = sceneManager.getRootSceneNode().createChildSceneNode() - myManualObjectNode = sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") - myManualObjectNode.attachObject(entity) - myManualObjectNode.attachObject(myManualObject) - except: - mesh = None - entity = None - myManualObjectNode = sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") - myManualObjectNode.attachObject(myManualObject) - return myManualObjectNode, entity, mesh except Exception, err: Modified: trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py 2007-08-02 17:33:37 UTC (rev 152) +++ trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py 2007-08-03 00:39:49 UTC (rev 153) @@ -84,7 +84,6 @@ wx.WXK_DOWN:ogre.Vector3(0.0,0.0,d), wx.WXK_PAGEUP:ogre.Vector3(0.0,d,0.0), wx.WXK_PAGEDOWN:ogre.Vector3(0.0,-d,0.0)} - self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) #create objects @@ -97,6 +96,7 @@ self.free() uuid = randomID() self.objnode, self.objentity, manualobject = createTruckMesh(self.sceneManager, filename, uuid) + print "aaa", self.objnode.getPosition() elif extension.lower() in [".odef"]: self.free() uuid = randomID() @@ -139,8 +139,8 @@ self.sceneManager.setShadowTechnique(ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE); self.sceneManager.setSkyDome(True, 'mysimple/terraineditor/previewwindowsky', 4.0, 8.0) - self.MainLight = self.sceneManager.createLight('MainLight') - self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) + #self.MainLight = self.sceneManager.createLight('MainLight') + #self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) # add some fog self.sceneManager.setFog(ogre.FOG_EXP, ogre.ColourValue.White, 0.0002) @@ -163,13 +163,11 @@ def updateCamera(self): if not self.objnode is None: - if self.objentity is None: - self.radius = 15 - height = 2 - else: - self.radius = self.objentity.getBoundingRadius() * 2 - height = self.objentity.getBoundingBox().getMaximum().z - pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) + self.radius = self.objentity.getBoundingRadius() * 2 + height = self.objentity.getBoundingBox().getMaximum().z + #pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) + # always look to the center! + pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) + (self.objentity.getBoundingBox().getMinimum() + self.objentity.getBoundingBox().getMaximum() ) / 2 dx = math.cos(self.camalpha) * self.radius dy = math.sin(self.camalpha) * self.radius self.camera.setPosition(pos - ogre.Vector3(dx, -5, dy)) @@ -184,14 +182,6 @@ self.updateCamera() wxOgreWindow.OnFrameStarted(self) - def onKeyDown(self,event): - validMove = self.ControlKeyDict.get(event.m_keyCode, False) - if validMove: - pos = self.camera.getPosition() - pos += validMove - self.camera.setPosition(pos) - event.Skip() - def onMouseEvent(self, event): #self.SetFocus() #Gives Keyboard focus to the window Modified: trunk/media/materials/mysimple.material =================================================================== --- trunk/media/materials/mysimple.material 2007-08-02 17:33:37 UTC (rev 152) +++ trunk/media/materials/mysimple.material 2007-08-03 00:39:49 UTC (rev 153) @@ -36,85 +36,6 @@ } } -material mysimple/loadcolor -{ - technique - { - pass - { - lighting on - depth_check on - scene_blend alpha_blend - depth_write off - cull_hardware none - texture_unit - { - colour_op_ex source1 src_manual src_current 0.8 0.8 0 - alpha_op_ex source1 src_manual src_current 0.7 - } - } - } -} - -material mysimple/loadcolorgrid -{ - technique - { - pass - { - lighting on - depth_check on - scene_blend alpha_blend - depth_write off - cull_hardware none - texture_unit - { - colour_op_ex source1 src_manual src_current 1 1 0 - alpha_op_ex source1 src_manual src_current 1 - } - } - } -} - -material mysimple/truckcolor -{ - technique - { - pass - { - lighting on - depth_check on - scene_blend alpha_blend - depth_write off - cull_hardware none - texture_unit - { - colour_op_ex source1 src_manual src_current 0.8 0 0.8 - alpha_op_ex source1 src_manual src_current 0.7 - } - } - } -} -material mysimple/truckcolorgrid -{ - technique - { - pass - { - lighting on - depth_check on - scene_blend alpha_blend - depth_write off - cull_hardware none - texture_unit - { - colour_op_ex source1 src_manual src_current 1 0 1 - alpha_op_ex source1 src_manual src_current 1 - } - } - } -} - material mysimple/terrainselect { technique This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-02 17:33:39
|
Revision: 152 http://roreditor.svn.sourceforge.net/roreditor/?rev=152&view=rev Author: rorthomas Date: 2007-08-02 10:33:37 -0700 (Thu, 02 Aug 2007) Log Message: ----------- * fixed small bug Modified Paths: -------------- trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py Modified: trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py 2007-08-02 15:22:55 UTC (rev 151) +++ trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py 2007-08-02 17:33:37 UTC (rev 152) @@ -193,7 +193,7 @@ event.Skip() def onMouseEvent(self, event): - self.SetFocus() #Gives Keyboard focus to the window + #self.SetFocus() #Gives Keyboard focus to the window if event.RightDown(): #Precedes dragging self.StartDragX, self.StartDragY = event.GetPosition() #saves position of initial click This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-02 15:23:00
|
Revision: 151 http://roreditor.svn.sourceforge.net/roreditor/?rev=151&view=rev Author: rorthomas Date: 2007-08-02 08:22:55 -0700 (Thu, 02 Aug 2007) Log Message: ----------- * fixed truck bug Modified Paths: -------------- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-02 15:09:44 UTC (rev 150) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-02 15:22:55 UTC (rev 151) @@ -528,7 +528,7 @@ entry = Entry() entry.uuid = uuid - entry.node, entry.entity, entry.manualobject = createTruckMesh(truckFilename, uuid) + entry.node, entry.entity, entry.manualobject = createTruckMesh(self.sceneManager, truckFilename, uuid) entry.data = data entry.node.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(data.rotz).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-02 15:09:49
|
Revision: 150 http://roreditor.svn.sourceforge.net/roreditor/?rev=150&view=rev Author: rorthomas Date: 2007-08-02 08:09:44 -0700 (Thu, 02 Aug 2007) Log Message: ----------- * updated Help, now HTML Modified Paths: -------------- trunk/lib/rorterraineditor/MainFrame.py trunk/lib/rorterraineditor/MainFrame_Tools.py trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py Added Paths: ----------- trunk/lib/rorterraineditor/terrainhelp.html Removed Paths: ------------- trunk/lib/rorterraineditor/HelpFrame.py trunk/lib/rorterraineditor/terrainreadme.txt Deleted: trunk/lib/rorterraineditor/HelpFrame.py =================================================================== --- trunk/lib/rorterraineditor/HelpFrame.py 2007-08-02 14:26:50 UTC (rev 149) +++ trunk/lib/rorterraineditor/HelpFrame.py 2007-08-02 15:09:44 UTC (rev 150) @@ -1,36 +0,0 @@ -import wx, os, os.path - -class HelpFrame(wx.Frame): - def __init__(self, *args, **kwds): - kwds["style"] = wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLIP_CHILDREN - wx.Frame.__init__(self, *args, **kwds) - self.TextCtrl = wx.TextCtrl(self, wx.ID_ANY, style=wx.TE_RICH2|wx.TE_AUTO_URL|wx.TE_MULTILINE|wx.TE_READONLY,size=wx.Size(500,400)) - self.btnExit = wx.Button(self, wx.ID_ANY, "OK") - self.Bind(wx.EVT_BUTTON, self.onExit , self.btnExit) - self.__do_layout() - self.filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), "terrainreadme.txt") - self.LoadHelp() - - def LoadHelp(self): - if os.path.isfile(self.filename): - self.TextCtrl.LoadFile(self.filename) - - def onExit(self, event=None): - self.Close() - - def __do_layout(self): - sizer_main = wx.BoxSizer(wx.VERTICAL) - sizer_2 = wx.BoxSizer(wx.HORIZONTAL) - sizer_2.Add(self.TextCtrl, -1, wx.EXPAND, 0) - sizer_main.Add(sizer_2, -1, wx.EXPAND, 0) - sizer_main.Add(self.btnExit, 0, wx.EXPAND, 0) - - self.SetAutoLayout(True) - self.SetSizer(sizer_main) - sizer_main.Fit(self) - sizer_main.SetSizeHints(self) - self.Layout() - -def showHelpFrame(): - myFrame = HelpFrame(None, wx.ID_ANY, "RoREditor Help") - myFrame.Show() Modified: trunk/lib/rorterraineditor/MainFrame.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame.py 2007-08-02 14:26:50 UTC (rev 149) +++ trunk/lib/rorterraineditor/MainFrame.py 2007-08-02 15:09:44 UTC (rev 150) @@ -35,16 +35,10 @@ ID_FindObject = wx.NewId() ID_Quit = wx.NewId() +ID_ViewHelp = wx.NewId() + ID_CreateOgre = wx.NewId() -ID_CreateGrid = wx.NewId() -ID_CreateText = wx.NewId() -ID_CreateHTML = wx.NewId() -ID_CreateSizeReport = wx.NewId() -ID_GridContent = wx.NewId() -ID_TextContent = wx.NewId() -ID_HTMLContent = wx.NewId() -ID_SizeReportContent = wx.NewId() ID_CreatePerspective = wx.NewId() ID_CopyPerspective = wx.NewId() @@ -85,16 +79,6 @@ view_menu = wx.Menu() view_menu.Append(ID_CreateOgre, "Create OgreWindow") - view_menu.Append(ID_CreateText, "Create Text Control") - view_menu.Append(ID_CreateHTML, "Create HTML Control") - view_menu.Append(ID_CreateGrid, "Create Grid") - view_menu.Append(ID_CreateSizeReport, "Create Size Reporter") - view_menu.AppendSeparator() - view_menu.Append(ID_GridContent, "Use a Grid for the Content Pane") - view_menu.Append(ID_TextContent, "Use a Text Control for the Content Pane") - view_menu.Append(ID_HTMLContent, "Use an HTML Control for the Content Pane") - view_menu.Append(ID_SizeReportContent, "Use a Size Reporter for the Content Pane") - self.managerInit() options_menu = wx.Menu() @@ -109,6 +93,7 @@ help_menu = wx.Menu() help_menu.Append(ID_About, "About...") + help_menu.Append(ID_ViewHelp, "View Help") mb.Append(file_menu, "File") mb.Append(view_menu, "View") @@ -176,7 +161,17 @@ MinSize(wx.Size(200,200)). CloseButton(True). MaximizeButton(False)) - + + self._mgr.AddPane(HelpPanel(self, self), wx.aui.AuiPaneInfo(). + Name("help"). + Caption("Help"). + Dockable(False). + Float(). + Fixed(). + Hide(). + CloseButton(True). + MaximizeButton(True)) + self._mgr.AddPane(SettingsPanel(self, self), wx.aui.AuiPaneInfo(). Name("settings"). Caption("Dock Manager Settings"). @@ -194,16 +189,7 @@ CloseButton(True). MaximizeButton(True)) - # create some center panes - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo().Name("sizereport_content"). - CenterPane().Hide()) - - self._mgr.AddPane(self.CreateTextCtrl(), wx.aui.AuiPaneInfo().Name("text_content"). - CenterPane().Hide()) - - self._mgr.AddPane(self.CreateHTMLCtrl(), wx.aui.AuiPaneInfo().Name("grid_content"). - CenterPane().Hide()) - + # create the center pane #Timer creation (for rendering) self.ogreTimer = wx.Timer() self.ogreTimer.SetOwner(self) @@ -254,35 +240,35 @@ self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_CLOSE, self.OnClose) - # Show How To Use The Closing Panes Event - self.Bind(wx.aui.EVT_AUI_PANE_CLOSE, self.OnPaneClose) - - self.Bind(wx.EVT_MENU, self.OnOpenTerrain, id=ID_OpenTerrain) self.Bind(wx.EVT_MENU, self.OnSaveTerrain, id=ID_SaveTerrain) self.Bind(wx.EVT_MENU, self.OnSaveTerrainAs, id=ID_SaveTerrainAs) + self.Bind(wx.EVT_MENU, self.OnViewHelp, id=ID_ViewHelp) self.Bind(wx.EVT_MENU, self.OnCreateOgre, id=ID_CreateOgre) - self.Bind(wx.EVT_MENU, self.OnCreateGrid, id=ID_CreateGrid) - self.Bind(wx.EVT_MENU, self.OnCreateText, id=ID_CreateText) - self.Bind(wx.EVT_MENU, self.OnCreateHTML, id=ID_CreateHTML) - self.Bind(wx.EVT_MENU, self.OnCreateSizeReport, id=ID_CreateSizeReport) self.Bind(wx.EVT_MENU, self.OnCreatePerspective, id=ID_CreatePerspective) self.Bind(wx.EVT_MENU, self.OnCopyPerspective, id=ID_CopyPerspective) self.Bind(wx.EVT_MENU, self.OnSettings, id=ID_Settings) - self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_GridContent) - self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_TextContent) - self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_SizeReportContent) - self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_HTMLContent) + self.Bind(wx.EVT_MENU, self.OnExit, id=ID_Quit) self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT) self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_About) self.Bind(wx.EVT_MENU_RANGE, self.OnRestorePerspective, id=ID_FirstPerspective, id2=ID_FirstPerspective+1000) + def OnViewHelp(self, event=None): + # show the settings pane, and float it + floating_pane = self._mgr.GetPane("help").Float().Show() + + if floating_pane.floating_pos == wx.DefaultPosition: + floating_pane.FloatingPosition(self.GetStartPosition()) + + self._mgr.Update() + + def addStuff(self, filename): try: onlyfilename, extension = os.path.splitext(os.path.basename(filename)) @@ -372,25 +358,11 @@ dlg.ShowModal() dlg.Destroy() - def OnPaneClose(self, event): - caption = event.GetPane().caption - - if caption in ["Dock Manager Settings", "Fixed Pane"]: - msg = "Are You Sure You Want To Close This Pane?" - dlg = wx.MessageDialog(self, msg, "AUI Question", - wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) - - if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]: - event.Veto() - dlg.Destroy() - - def OnClose(self, event): self._mgr.UnInit() del self._mgr self.Destroy() - def OnExit(self, event): self.Close() @@ -400,19 +372,15 @@ def GetDockArt(self): return self._mgr.GetArtProvider() - def DoUpdate(self): self._mgr.Update() - def OnEraseBackground(self, event): event.Skip() - def OnSize(self, event): event.Skip() - def OnSettings(self, event): # show the settings pane, and float it floating_pane = self._mgr.GetPane("settings").Float().Show() @@ -462,47 +430,6 @@ return wx.Point(pt.x + x, pt.y + x) - - def OnCreateGrid(self, event): - self._mgr.AddPane(self.CreateGrid(), wx.aui.AuiPaneInfo(). - Caption("Grid"). - Float().FloatingPosition(self.GetStartPosition()). - FloatingSize(wx.Size(300, 200)).CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - - def OnCreateHTML(self, event): - self._mgr.AddPane(self.CreateHTMLCtrl(), wx.aui.AuiPaneInfo(). - Caption("HTML Content"). - Float().FloatingPosition(self.GetStartPosition()). - FloatingSize(wx.Size(300, 200)).CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - - def OnCreateText(self, event): - self._mgr.AddPane(self.CreateTextCtrl(), wx.aui.AuiPaneInfo(). - Caption("Text Control"). - Float().FloatingPosition(self.GetStartPosition()). - CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - - def OnCreateSizeReport(self, event): - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Caption("Client Size Reporter"). - Float().FloatingPosition(self.GetStartPosition()). - CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - - def OnChangeContentPane(self, event): - - self._mgr.GetPane("grid_content").Show(event.GetId() == ID_GridContent) - self._mgr.GetPane("text_content").Show(event.GetId() == ID_TextContent) - self._mgr.GetPane("sizereport_content").Show(event.GetId() == ID_SizeReportContent) - self._mgr.GetPane("html_content").Show(event.GetId() == ID_HTMLContent) - self._mgr.Update() - def OnCreateOgre(self, event): self._mgr.AddPane(self.CreateOgreCtrl(), wx.aui.AuiPaneInfo(). Caption("Ogre Window"). @@ -510,38 +437,9 @@ CloseButton(True).MaximizeButton(False)) self._mgr.Update() - def CreateOgreCtrl(self): return RoRTerrainOgreWindow(self, wx.ID_ANY, scenemanager=self.terrainOgreWin.sceneManager) - def CreateTextCtrl(self): - text = ("This is text box %d")%(self.n + 1) - return wx.TextCtrl(self,-1, text, wx.Point(0, 0), wx.Size(150, 90), - wx.NO_BORDER | wx.TE_MULTILINE) - - - - def CreateGrid(self): - grid = wx.grid.Grid(self, -1, wx.Point(0, 0), wx.Size(150, 250), - wx.NO_BORDER | wx.WANTS_CHARS) - grid.CreateGrid(50, 20) - return grid - - def CreateSizeReportCtrl(self, width=80, height=80): - ctrl = SizeReportCtrl(self, -1, wx.DefaultPosition, - wx.Size(width, height), self._mgr) - return ctrl - - def CreateHTMLCtrl(self): - ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300)) - if "gtk2" in wx.PlatformInfo: - ctrl.SetStandardFonts() - ctrl.SetPage(self.GetIntroText()) - return ctrl - - def GetIntroText(self): - return overview - def startApp(): MainApp = wx.PySimpleApp(0) wx.InitAllImageHandlers() #you may or may not need this Modified: trunk/lib/rorterraineditor/MainFrame_Tools.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame_Tools.py 2007-08-02 14:26:50 UTC (rev 149) +++ trunk/lib/rorterraineditor/MainFrame_Tools.py 2007-08-02 15:09:44 UTC (rev 150) @@ -1,5 +1,8 @@ import sys, os, os.path +from ror.logger import log +from ror.settingsManager import getSettingsManager + import wx import wx.grid import wx.html @@ -9,70 +12,41 @@ # -- wx.SizeReportCtrl -- # (a utility control that always reports it's client size) -class SizeReportCtrl(wx.PyControl): +HELPFILENAME = os.path.join(os.path.dirname(os.path.abspath(__file__)), "terrainhelp.html") - def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, - size=wx.DefaultSize, mgr=None): - - wx.PyControl.__init__(self, parent, id, pos, size, wx.NO_BORDER) - - self._mgr = mgr - - self.Bind(wx.EVT_PAINT, self.OnPaint) - self.Bind(wx.EVT_SIZE, self.OnSize) - self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) - - - def OnPaint(self, event): - - dc = wx.PaintDC(self) +class HelpPanel(wx.Panel): + def __init__(self, parent, frame): + wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, + wx.DefaultSize) + self._frame = frame - size = self.GetClientSize() - s = ("Size: %d x %d")%(size.x, size.y) - - dc.SetFont(wx.NORMAL_FONT) - w, height = dc.GetTextExtent(s) - height = height + 3 - dc.SetBrush(wx.WHITE_BRUSH) - dc.SetPen(wx.WHITE_PEN) - dc.DrawRectangle(0, 0, size.x, size.y) - dc.SetPen(wx.LIGHT_GREY_PEN) - dc.DrawLine(0, 0, size.x, size.y) - dc.DrawLine(0, size.y, size.x, 0) - dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)) - - if self._mgr: - - pi = self._mgr.GetPane(self) - - s = ("Layer: %d")%pi.dock_layer - w, h = dc.GetTextExtent(s) - dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*1)) - - s = ("Dock: %d Row: %d")%(pi.dock_direction, pi.dock_row) - w, h = dc.GetTextExtent(s) - dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*2)) - - s = ("Position: %d")%pi.dock_pos - w, h = dc.GetTextExtent(s) - dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*3)) - - s = ("Proportion: %d")%pi.dock_proportion - w, h = dc.GetTextExtent(s) - dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*4)) - - - def OnEraseBackground(self, event): - # intentionally empty - pass + vert = wx.BoxSizer(wx.VERTICAL) + self.htmlctrl = wx.html.HtmlWindow(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(800, 600)) + if "gtk2" in wx.PlatformInfo: + ctrl.SetStandardFonts() + readme = self.loadReadme() + if readme is None: + self.Hide() + return + self.htmlctrl.SetPage(readme) + vert.Add(self.htmlctrl, 2, wx.EXPAND, 0) + self.SetSizer(vert) + self.GetSizer().SetSizeHints(self) + def loadReadme(self): + if os.path.isfile(HELPFILENAME): + try: + f = open(HELPFILENAME,'r') + content = f.read() + f.close() + return content + except Exception, err: + log().error(str(err)) + return None + else: + log().error("TerrainEditor Readme not found: %s" % HELPFILENAME) + return None - def OnSize(self, event): - - self.Refresh() - event.Skip() - - ID_PaneBorderSize = wx.ID_HIGHEST + 1 ID_SashSize = ID_PaneBorderSize + 1 ID_CaptionSize = ID_PaneBorderSize + 2 @@ -366,52 +340,3 @@ self.UpdateColors() - -#---------------------------------------------------------------------- - -class TestPanel(wx.Panel): - def __init__(self, parent, log): - self.log = log - wx.Panel.__init__(self, parent, -1) - b = wx.Button(self, -1, "Show the wx.aui Demo Frame", (50,50)) - self.Bind(wx.EVT_BUTTON, self.OnButton, b) - - def OnButton(self, evt): - frame = PyAUIFrame(self, wx.ID_ANY, "wx.aui wxPython Demo", size=(750, 590)) - frame.Show() - -#---------------------------------------------------------------------- - -def runTest(frame, nb, log): - win = TestPanel(nb, log) - return win - -#---------------------------------------------------------------------- - - - -overview = """\ -<html><body> -<h3>wx.aui, the Advanced User Interface module</h3> - -<br/><b>Overview</b><br/> - -<p>wx.aui is an Advanced User Interface library for the wxWidgets toolkit -that allows developers to create high-quality, cross-platform user -interfaces quickly and easily.</p> - -<p><b>Features</b></p> - -<p>With wx.aui developers can create application frameworks with:</p> - -<ul> -<li>Native, dockable floating frames</li> -<li>Perspective saving and loading</li> -<li>Native toolbars incorporating real-time, "spring-loaded" dragging</li> -<li>Customizable floating/docking behavior</li> -<li>Completely customizable look-and-feel</li> -<li>Optional transparent window effects (while dragging or docking)</li> -</ul> - -</body></html> -""" \ No newline at end of file Modified: trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py 2007-08-02 14:26:50 UTC (rev 149) +++ trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py 2007-08-02 15:09:44 UTC (rev 150) @@ -202,7 +202,7 @@ dx = self.StartDragX - x dy = self.StartDragY - y self.StartDragX, self.StartDragY = x, y - self.camalpha -= float(dx) * (math.pi / 720) + self.camalpha -= float(dx) * (math.pi / 720) * 2 self.updateCamera() self.dragging = True else: Copied: trunk/lib/rorterraineditor/terrainhelp.html (from rev 147, trunk/lib/rorterraineditor/terrainreadme.txt) =================================================================== --- trunk/lib/rorterraineditor/terrainhelp.html (rev 0) +++ trunk/lib/rorterraineditor/terrainhelp.html 2007-08-02 15:09:44 UTC (rev 150) @@ -0,0 +1,27 @@ +<h1>Short Introduction / Help</h1> +<table border="1"> +<tr><td>A</td><td>move left</td></tr> +<tr><td>D</td><td>move right</td></tr> +<tr><td>W</td><td>move foreward</td></tr> +<tr><td>S</td><td>move backward</td></tr> +<tr><td>PAGEUP</td><td>move up</td></tr> +<tr><td>PAGEDOWN</td><td>move down</td></tr> +<tr><td>SHIFT + above keys</td><td>faster movement</td></tr> + +<tr><td>P</td><td>print position of the camera to the console</td></tr> +<tr><td>Q</td><td>switch between object rotation and translation (Please note, that trucks and loads cannot be rotated)</td></tr> +<tr><td>T</td><td>switch between bilinear and trilinear filtering</td></tr> +<tr><td>R</td><td>switch between solid, wireframe and point mode</td></tr> +<tr><td>F</td><td>undo last movement/rotation</td></tr> +<tr><td>G</td><td>redo last undo</td></tr> +<tr><td>Mousewheel in Main Viewport</td><td>zoom in/out (like forward/backward)</td></tr> +<tr><td>rightclick and drag</td><td>look around</td></tr> +<tr><td>control + rightclick</td><td>move to the side and up and down</td></tr> +<tr><td> control + leftclick (when selected an object)</td><td>position that object at the pointed terrain</td></tr> +</table> + +<h1>How To Add Things</h1> +rightclick on an item in the Object Browser + +<h1>Tips and Tricks</h1> +If you want to select an object behind another object, just left-click twice on the foreground object to select the background one. \ No newline at end of file Deleted: trunk/lib/rorterraineditor/terrainreadme.txt =================================================================== --- trunk/lib/rorterraineditor/terrainreadme.txt 2007-08-02 14:26:50 UTC (rev 149) +++ trunk/lib/rorterraineditor/terrainreadme.txt 2007-08-02 15:09:44 UTC (rev 150) @@ -1,41 +0,0 @@ -============================================================ -Short Introduction / Help -============================================================ -A move left -D move right -W move foreward -S move backward -PAGEUP move up -PAGEDOWN move down -SHIFT + above keys = faster movement - - -Mousewheel in Main Viewport: zoom in/out (like forward/backward) -Mousewheel int objects view lower viewport: zoom in/out - - -drag: rightklick: look around -drag: control + rightclick move to the side and up and down -if selected an object: control + leftclick positions that object at the pointed terrain - - -P print position of the camera to the console -Q switch between object rotation and translation - (Please note, that trucks and loads cannot be rotated) -T switch between bilinear and trilinear filtering -R switch between solid, wireframe and point mode - -History Functions: -F undo last movement/rotation -G redo last undo - -============================================================ -How To Add Things -============================================================ -1. select a place on the terrain with leftclick, a red circle should appear. -2. add a truck or mesh using the "Add" menu. - -============================================================ -Tips and Tricks -============================================================ -* If you want to select an object behind another object, just left-click twice on the foreground object to select the background one. \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-02 14:26:55
|
Revision: 149 http://roreditor.svn.sourceforge.net/roreditor/?rev=149&view=rev Author: rorthomas Date: 2007-08-02 07:26:50 -0700 (Thu, 02 Aug 2007) Log Message: ----------- * deleted unused mesh * added object browser and re-added functionality to add objects to the terrain * splitted up some code, to use it in more than one place (odefparser, simpletruckrep.) Modified Paths: -------------- trunk/lib/ror/rorcommon.py trunk/lib/rorterraineditor/MainFrame.py trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py trunk/media/materials/mysimple.material Added Paths: ----------- trunk/lib/ror/SimpleTruckRepresentation.py trunk/lib/ror/odefparser.py trunk/lib/rorterraineditor/GUIObjectTree.py trunk/lib/rorterraineditor/GUIPreviewObject.py trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py Removed Paths: ------------- trunk/media/models/wheel.mesh Added: trunk/lib/ror/SimpleTruckRepresentation.py =================================================================== --- trunk/lib/ror/SimpleTruckRepresentation.py (rev 0) +++ trunk/lib/ror/SimpleTruckRepresentation.py 2007-08-02 14:26:50 UTC (rev 149) @@ -0,0 +1,105 @@ +#Thomas Fischer 31/05/2007, th...@th... +import wx, os, os.path, copy +import ogre.renderer.OGRE as ogre +from ror.truckparser import * +from ror.terrainparser import * +from wxogre.OgreManager import * +from wxogre.wxOgreWindow import * +from ror.rorcommon import * + +def createTruckMesh(sceneManager, fn, uuid): + if not os.path.isfile(fn): + #print "truck file not found: " + fn + log().error("truck file not found: %s" % fn) + return + p = rorparser() + p.parse(fn) + if not 'nodes' in p.tree.keys() or not 'beams' in p.tree.keys(): + log().error("error while processing truck file %s" % fn) + return False + + try: + myManualObject = sceneManager.createManualObject(str(uuid)+"manual") + + #myManualObjectMaterial = ogre.MaterialManager.getSingleton().create("manualmaterial"+truckname+str(self.randomcounter),"debugger"); + #myManualObjectMaterial.setReceiveShadows(False) + #myManualObjectMaterial.getTechnique(0).setLightingEnabled(True) + #myManualObjectMaterial.getTechnique(0).getPass(0).setDiffuse(0,0,1,0) + #myManualObjectMaterial.getTechnique(0).getPass(0).setAmbient(0,0,1) + #myManualObjectMaterial.getTechnique(0).getPass(0).setSelfIllumination(0,0,1) + #myManualObjectMaterial.getTechnique(0).getPass(0).setCullingMode(ogre.CULL_ANTICLOCKWISE) + + matname = "" + if fn[-4:].lower() == "load": + matname = 'mysimple/loadcolor' + elif fn[-5:].lower() == "truck": + matname = 'mysimple/truckcolor' + + myManualObject.useIndexes = True + myManualObject.estimateVertexCount(2000) + myManualObject.estimateIndexCount(2000) + + myManualObject.begin(matname+"grid", ogre.RenderOperation.OT_LINE_LIST) + for nodeobj in p.tree['nodes']: + if nodeobj.has_key('type'): + continue + node = nodeobj['data'] + myManualObject.position(float(node[1]),float(node[2]),float(node[3])) + for beamobj in p.tree['beams']: + if beamobj.has_key('type'): + continue + beam = beamobj['data'] + myManualObject.index(int(beam[0])) + myManualObject.index(int(beam[1])) + myManualObject.end() + myManualObject.begin(matname, ogre.RenderOperation.OT_TRIANGLE_LIST) + for nodeobj in p.tree['nodes']: + if nodeobj.has_key('type'): + continue + node = nodeobj['data'] + myManualObject.position(float(node[1]),float(node[2]),float(node[3])) + + #print len(p.tree['submeshgroups']) + if len(p.tree['submeshgroups']) > 0: + faces = [] + for smobj in p.tree['submeshgroups']: + for cabobj in smobj['cab']: + if cabobj.has_key('type'): + continue + cab = cabobj['data'] + #print "########face" + if cab != []: + try: + myManualObject.triangle(int(cab[0]),int(cab[1]),int(cab[2])) + except: + print "error with cab: " + str(cab) + pass + else: + print "truck has no faces!" + + myManualObject.end() + + try: + mesh = myManualObject.convertToMesh(str(uuid)+"manual") + entity = sceneManager.createEntity(str(uuid)+"entity", str(uuid)+"manual") + #trucknode = sceneManager.getRootSceneNode().createChildSceneNode() + myManualObjectNode = sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") + myManualObjectNode.attachObject(myManualObject) + mesh = myManualObject.convertToMesh(str(uuid)+"manual") + entity = sceneManager.createEntity(str(uuid)+"entity", str(uuid)+"manual") + #trucknode = sceneManager.getRootSceneNode().createChildSceneNode() + myManualObjectNode = sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") + myManualObjectNode.attachObject(entity) + myManualObjectNode.attachObject(myManualObject) + except: + mesh = None + entity = None + myManualObjectNode = sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") + myManualObjectNode.attachObject(myManualObject) + + + return myManualObjectNode, entity, mesh + except Exception, err: + log().error("error while processing truck file %s" % fn) + log().error(str(err)) + return None, None, None \ No newline at end of file Added: trunk/lib/ror/odefparser.py =================================================================== --- trunk/lib/ror/odefparser.py (rev 0) +++ trunk/lib/ror/odefparser.py 2007-08-02 14:26:50 UTC (rev 149) @@ -0,0 +1,10 @@ +def loadOdef(odefFilename): + f=open(odefFilename, 'r') + content = f.readlines() + f.close() + meshname = content[0].strip() + scalearr = [1,1,1] + if len(content) > 2: + scalearr = content[1].split(",") + + return (meshname, float(scalearr[0]), float(scalearr[1]), float(scalearr[2])) Modified: trunk/lib/ror/rorcommon.py =================================================================== --- trunk/lib/ror/rorcommon.py 2007-08-01 12:09:55 UTC (rev 148) +++ trunk/lib/ror/rorcommon.py 2007-08-02 14:26:50 UTC (rev 149) @@ -14,9 +14,10 @@ dlg.ShowModal() dlg.Destroy() - - + +uniqueIDs = [] def randomID(num_bits=64): + global uniqueIDs """Return a string representing a bitfield num_bits long. Maximum artbitrarily set to 1025""" @@ -36,4 +37,11 @@ # The 2: removes the '0x' and :-1 removes the L rnd_id = hex(tmp_id)[2:-1] - return(rnd_id) \ No newline at end of file + + # this ensure that all ids are unique + if rnd_id in uniqueIDs: + rnd_id = randomID(num_bits) + else: + uniqueIDs.append(rnd_id) + + return rnd_id \ No newline at end of file Added: trunk/lib/rorterraineditor/GUIObjectTree.py =================================================================== --- trunk/lib/rorterraineditor/GUIObjectTree.py (rev 0) +++ trunk/lib/rorterraineditor/GUIObjectTree.py 2007-08-02 14:26:50 UTC (rev 149) @@ -0,0 +1,119 @@ +import sys, os, os.path + +import wx +import wx.grid +import wx.html +import wx.aui +import ror.settingsManager + +import cStringIO + +RORPATH = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") +DATADIR = os.path.join(RORPATH, "data") +TRUCKDIR = os.path.join(DATADIR, "trucks") +TERRAINDIR = os.path.join(DATADIR, "terrains") +OBJECTDIR = os.path.join(DATADIR, "objects") + +class RoRObjectTreeCtrl(wx.Panel): + def __init__(self, parent, frame): + wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, + wx.DefaultSize) + + self.parent = parent + self._frame = frame + + + vert = wx.BoxSizer(wx.VERTICAL) + + + tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.DefaultSize, wx.NO_BORDER) + + root = tree.AddRoot("Objects") + items = [] + + imglist = wx.ImageList(16, 16, True, 2) + imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16,16))) + imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16,16))) + tree.AssignImageList(imglist) + + trucks = self.getInstalledTrucks() + items.append(tree.AppendItem(root, "Trucks", 0)) + for truck in trucks: + truckname, extension = os.path.splitext(os.path.basename(truck)) + data = wx.TreeItemData() + data.SetData(truck) + tree.AppendItem(items[-1], truckname, 1, data=data) + + loads = self.getInstalledLoads() + items.append(tree.AppendItem(root, "Loads", 0)) + for load in loads: + loadname, extension = os.path.splitext(os.path.basename(load)) + data = wx.TreeItemData() + data.SetData(load) + tree.AppendItem(items[-1], loadname, 1, data=data) + + objects = self.getInstalledObjects() + items.append(tree.AppendItem(root, "Objects", 0)) + for object in objects: + objectname, extension = os.path.splitext(os.path.basename(object)) + data = wx.TreeItemData() + data.SetData(object) + tree.AppendItem(items[-1], objectname, 1, data=data) + + + tree.Expand(root) + vert.Add(tree, 1, wx.EXPAND, 5) + self.SetSizer(vert) + self.GetSizer().SetSizeHints(self) + + self.tree = tree + self.Bind(wx.EVT_TREE_SEL_CHANGED, self.onTreeSelectionChange, self.tree) + self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.addStuff, self.tree) + + #self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.BeginDrag, self.tree) + + def addStuff(self, event): + fn = self.tree.GetItemData(event.GetItem()).GetData() + if fn is None: + return + self.parent.addStuff(fn) + #def BeginDrag(self, event): + # ''' + # EVT_TREE_BEGIN_DRAG handler. + # ''' + # self.dragItem = event.GetItem() + # fn = self.tree.GetItemData(event.GetItem()).GetData() + # if fn is None: + # return + # #event.Allow() + # wx.TreeEvent.Allow(event) + + def onTreeSelectionChange(self, event=None): + fn = self.tree.GetItemData(self.tree.GetSelection()).GetData() + if fn is None: + return + self.parent.previewObject(fn) + + def getInstalledTrucks(self): + files = [] + for filename in os.listdir(TRUCKDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".truck": + files.append(os.path.join(TRUCKDIR, filename)) + return files + + def getInstalledLoads(self): + files = [] + for filename in os.listdir(TRUCKDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".load": + files.append(os.path.join(TRUCKDIR, filename)) + return files + + def getInstalledObjects(self): + files = [] + for filename in os.listdir(OBJECTDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".odef": + files.append(os.path.join(OBJECTDIR, filename)) + return files \ No newline at end of file Added: trunk/lib/rorterraineditor/GUIPreviewObject.py =================================================================== --- trunk/lib/rorterraineditor/GUIPreviewObject.py (rev 0) +++ trunk/lib/rorterraineditor/GUIPreviewObject.py 2007-08-02 14:26:50 UTC (rev 149) @@ -0,0 +1,70 @@ +import sys, os, os.path + +import wx +import wx.grid +import wx.html +import wx.aui +import ror.settingsManager + +import cStringIO + +RORPATH = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") +DATADIR = os.path.join(RORPATH, "data") +TRUCKDIR = os.path.join(DATADIR, "trucks") +TERRAINDIR = os.path.join(DATADIR, "terrains") +OBJECTDIR = os.path.join(DATADIR, "objects") + +class RoRObjectTreeCtrl(wx.Panel): + def __init__(self, parent, frame): + wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, + wx.DefaultSize) + + self._frame = frame + + + vert = wx.BoxSizer(wx.VERTICAL) + + + tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.DefaultSize, wx.NO_BORDER) + + root = tree.AddRoot("Objects") + items = [] + + imglist = wx.ImageList(16, 16, True, 2) + imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16,16))) + imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16,16))) + tree.AssignImageList(imglist) + + trucks = self.getInstalledTrucks() + items.append(tree.AppendItem(root, "Trucks", 0)) + for truck in trucks: + truckname, extension = os.path.splitext(truck) + tree.AppendItem(items[-1], truckname, 1) + + objects = self.getInstalledObjects() + items.append(tree.AppendItem(root, "Objects", 0)) + for object in objects: + objectname, extension = os.path.splitext(object) + tree.AppendItem(items[-1], objectname, 1) + + + tree.Expand(root) + vert.Add(tree, 1, wx.EXPAND, 5) + self.SetSizer(vert) + self.GetSizer().SetSizeHints(self) + + def getInstalledTrucks(self): + files = [] + for filename in os.listdir(TRUCKDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".truck": + files.append(filename) + return files + + def getInstalledObjects(self): + files = [] + for filename in os.listdir(OBJECTDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".odef": + files.append(filename) + return files \ No newline at end of file Modified: trunk/lib/rorterraineditor/MainFrame.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame.py 2007-08-01 12:09:55 UTC (rev 148) +++ trunk/lib/rorterraineditor/MainFrame.py 2007-08-02 14:26:50 UTC (rev 149) @@ -8,9 +8,12 @@ from ror.rorcommon import * from RoRTerrainOgreWindow import * +from RoRObjectPreviewOgreWindow import * from RoRTerrainSelectedObjectOgreWindow import * from RoRTerrainSelectedObjectTopOgreWindow import * +# GUI Tools: +from GUIObjectTree import * from MainFrame_Tools import * import wx @@ -34,14 +37,12 @@ ID_CreateOgre = wx.NewId() -ID_CreateTree = wx.NewId() ID_CreateGrid = wx.NewId() ID_CreateText = wx.NewId() ID_CreateHTML = wx.NewId() ID_CreateSizeReport = wx.NewId() ID_GridContent = wx.NewId() ID_TextContent = wx.NewId() -ID_TreeContent = wx.NewId() ID_HTMLContent = wx.NewId() ID_SizeReportContent = wx.NewId() ID_CreatePerspective = wx.NewId() @@ -86,14 +87,12 @@ view_menu.Append(ID_CreateOgre, "Create OgreWindow") view_menu.Append(ID_CreateText, "Create Text Control") view_menu.Append(ID_CreateHTML, "Create HTML Control") - view_menu.Append(ID_CreateTree, "Create Tree") view_menu.Append(ID_CreateGrid, "Create Grid") view_menu.Append(ID_CreateSizeReport, "Create Size Reporter") view_menu.AppendSeparator() view_menu.Append(ID_GridContent, "Use a Grid for the Content Pane") view_menu.Append(ID_TextContent, "Use a Text Control for the Content Pane") view_menu.Append(ID_HTMLContent, "Use an HTML Control for the Content Pane") - view_menu.Append(ID_TreeContent, "Use a Tree Control for the Content Pane") view_menu.Append(ID_SizeReportContent, "Use a Size Reporter for the Content Pane") @@ -137,38 +136,65 @@ tb1.SetToolBitmapSize(wx.Size(16,16)) tb1.AddLabelTool(ID_OpenTerrain, "Open Terrain", wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) tb1.AddLabelTool(ID_SaveTerrain, "Save Terrain", wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE)) + tb1.EnableTool(ID_SaveTerrain, False) tb1.AddLabelTool(ID_SaveTerrainAs, "Save Terrain as", wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS)) + tb1.EnableTool(ID_SaveTerrainAs, False) tb1.AddSeparator() tb1.AddLabelTool(ID_AddObject, "Add Something", wx.ArtProvider_GetBitmap(wx.ART_NEW)) + tb1.EnableTool(ID_AddObject, False) tb1.AddLabelTool(ID_DeleteSelection, "Delete Selection", wx.ArtProvider_GetBitmap(wx.ART_DELETE)) + tb1.EnableTool(ID_DeleteSelection, False) tb1.AddSeparator() tb1.AddLabelTool(ID_CopySelection, "Copy Selection", wx.ArtProvider_GetBitmap(wx.ART_COPY)) + tb1.EnableTool(ID_CopySelection, False) tb1.AddLabelTool(ID_PasteSelection, "Paste Selection", wx.ArtProvider_GetBitmap(wx.ART_PASTE)) + tb1.EnableTool(ID_PasteSelection, False) tb1.AddSeparator() tb1.AddLabelTool(ID_UndoAction, "Undo last Action", wx.ArtProvider_GetBitmap(wx.ART_UNDO)) + tb1.EnableTool(ID_UndoAction, False) tb1.AddLabelTool(ID_RedoAction, "Redo last Undo", wx.ArtProvider_GetBitmap(wx.ART_REDO)) + tb1.EnableTool(ID_RedoAction, False) tb1.AddSeparator() tb1.AddLabelTool(ID_FindObject, "Find Object", wx.ArtProvider_GetBitmap(wx.ART_FIND)) + tb1.EnableTool(ID_FindObject, False) tb1.AddSeparator() tb1.AddLabelTool(ID_Quit, "Quit", wx.ArtProvider_GetBitmap(wx.ART_QUIT)) - tb1.EnableTool(ID_SaveTerrain, False) - tb1.EnableTool(ID_SaveTerrainAs, False) tb1.Realize() self.tb1 = tb1 + + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") + + # add a bunch of panes - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Name("test1").Caption("Pane Caption").Top(). - CloseButton(True).MaximizeButton(True)) + self.objectPreviewWindow = ObjectPreviewOgreWindow(self, wx.ID_ANY, rordir=self.rordir) + self._mgr.AddPane(self.objectPreviewWindow, wx.aui.AuiPaneInfo(). + Name("ogretest1"). + Caption("Object Preview"). + Left(). + MinSize(wx.Size(200,200)). + CloseButton(True). + MaximizeButton(False)) + self._mgr.AddPane(SettingsPanel(self, self), wx.aui.AuiPaneInfo(). - Name("settings").Caption("Dock Manager Settings"). - Dockable(False).Float().Hide().CloseButton(True).MaximizeButton(True)) + Name("settings"). + Caption("Dock Manager Settings"). + Dockable(False). + Float(). + Fixed(). + Hide(). + CloseButton(True). + MaximizeButton(True)) + + self._mgr.AddPane(RoRObjectTreeCtrl(self, self), wx.aui.AuiPaneInfo(). + Caption("Object Tree"). + MinSize(wx.Size(200,100)). + Left(). + CloseButton(True). + MaximizeButton(True)) # create some center panes - self._mgr.AddPane(self.CreateTreeCtrl(), wx.aui.AuiPaneInfo().Name("tree_content"). - CenterPane().Hide()) - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo().Name("sizereport_content"). CenterPane().Hide()) @@ -191,7 +217,7 @@ self.guitimer.Start(200) - self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") + self.terrainOgreWin = RoRTerrainOgreWindow(self, wx.ID_ANY, rordir=self.rordir) self._mgr.AddPane(self.terrainOgreWin, wx.aui.AuiPaneInfo().Name("ogre_content"). CenterPane()) @@ -211,9 +237,9 @@ # all - perspective all_panes = self._mgr.GetAllPanes() - for ii in xrange(len(all_panes)): - if not all_panes[ii].IsToolbar(): - all_panes[ii].Hide() + #for ii in xrange(len(all_panes)): + # if not all_panes[ii].IsToolbar(): + # all_panes[ii].Hide() self._mgr.GetPane("ogre_content").Show() perspective_default = self._mgr.SavePerspective() @@ -238,7 +264,6 @@ self.Bind(wx.EVT_MENU, self.OnCreateOgre, id=ID_CreateOgre) - self.Bind(wx.EVT_MENU, self.OnCreateTree, id=ID_CreateTree) self.Bind(wx.EVT_MENU, self.OnCreateGrid, id=ID_CreateGrid) self.Bind(wx.EVT_MENU, self.OnCreateText, id=ID_CreateText) self.Bind(wx.EVT_MENU, self.OnCreateHTML, id=ID_CreateHTML) @@ -249,7 +274,6 @@ self.Bind(wx.EVT_MENU, self.OnSettings, id=ID_Settings) self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_GridContent) - self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_TreeContent) self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_TextContent) self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_SizeReportContent) self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_HTMLContent) @@ -259,6 +283,28 @@ self.Bind(wx.EVT_MENU_RANGE, self.OnRestorePerspective, id=ID_FirstPerspective, id2=ID_FirstPerspective+1000) + def addStuff(self, filename): + try: + onlyfilename, extension = os.path.splitext(os.path.basename(filename)) + if extension.lower() in ['.truck', '.load']: + if not self.terrainOgreWin.addTruckToTerrain(truckFilename=filename): + dlg = wx.MessageDialog(self, "You must select a position on the ground first!", "error", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + elif extension.lower() in ['.odef']: + if not self.terrainOgreWin.addObjectToTerrain(odefFilename=filename): + dlg = wx.MessageDialog(self, "You must select a position on the ground first!", "error", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + except: + pass + + def previewObject(self, filename): + try: + self.objectPreviewWindow.loadFile(filename) + except: + pass + def updateObjPosRot(self, event=None): self.statusbar.SetStatusText(self.terrainOgreWin.currentStatusMsg, 1) if self.terrainOgreWin.terrain is None: @@ -297,6 +343,13 @@ if res == wx.ID_OK: filename = dialog.GetPath() self.terrainOgreWin.LoadTerrain(filename) + self.tb1.EnableTool(ID_AddObject, True) + self.tb1.EnableTool(ID_DeleteSelection, True) + self.tb1.EnableTool(ID_CopySelection, True) + self.tb1.EnableTool(ID_PasteSelection, True) + self.tb1.EnableTool(ID_UndoAction, True) + self.tb1.EnableTool(ID_RedoAction, True) + self.tb1.EnableTool(ID_FindObject, True) self.tb1.EnableTool(ID_SaveTerrain, True) self.tb1.EnableTool(ID_SaveTerrainAs, True) @@ -322,7 +375,7 @@ def OnPaneClose(self, event): caption = event.GetPane().caption - if caption in ["Tree Pane", "Dock Manager Settings", "Fixed Pane"]: + if caption in ["Dock Manager Settings", "Fixed Pane"]: msg = "Are You Sure You Want To Close This Pane?" dlg = wx.MessageDialog(self, msg, "AUI Question", wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) @@ -410,14 +463,6 @@ return wx.Point(pt.x + x, pt.y + x) - def OnCreateTree(self, event): - self._mgr.AddPane(self.CreateTreeCtrl(), wx.aui.AuiPaneInfo(). - Caption("Tree Control"). - Float().FloatingPosition(self.GetStartPosition()). - FloatingSize(wx.Size(150, 300)).CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - def OnCreateGrid(self, event): self._mgr.AddPane(self.CreateGrid(), wx.aui.AuiPaneInfo(). Caption("Grid"). @@ -454,7 +499,6 @@ self._mgr.GetPane("grid_content").Show(event.GetId() == ID_GridContent) self._mgr.GetPane("text_content").Show(event.GetId() == ID_TextContent) - self._mgr.GetPane("tree_content").Show(event.GetId() == ID_TreeContent) self._mgr.GetPane("sizereport_content").Show(event.GetId() == ID_SizeReportContent) self._mgr.GetPane("html_content").Show(event.GetId() == ID_HTMLContent) self._mgr.Update() @@ -463,12 +507,12 @@ self._mgr.AddPane(self.CreateOgreCtrl(), wx.aui.AuiPaneInfo(). Caption("Ogre Window"). Float().FloatingPosition(self.GetStartPosition()). - CloseButton(True).MaximizeButton(True)) + CloseButton(True).MaximizeButton(False)) self._mgr.Update() def CreateOgreCtrl(self): - return RoRTerrainOgreWindow(self, wx.ID_ANY, scenemanager=self.ogrewin.sceneManager) + return RoRTerrainOgreWindow(self, wx.ID_ANY, scenemanager=self.terrainOgreWin.sceneManager) def CreateTextCtrl(self): text = ("This is text box %d")%(self.n + 1) @@ -483,39 +527,6 @@ grid.CreateGrid(50, 20) return grid - - def CreateTreeCtrl(self): - tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.Size(160, 250), - wx.TR_DEFAULT_STYLE | wx.NO_BORDER) - - root = tree.AddRoot("AUI Project") - items = [] - - imglist = wx.ImageList(16, 16, True, 2) - imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16,16))) - imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16,16))) - tree.AssignImageList(imglist) - - items.append(tree.AppendItem(root, "Item 1", 0)) - items.append(tree.AppendItem(root, "Item 2", 0)) - items.append(tree.AppendItem(root, "Item 3", 0)) - items.append(tree.AppendItem(root, "Item 4", 0)) - items.append(tree.AppendItem(root, "Item 5", 0)) - - for ii in xrange(len(items)): - - id = items[ii] - tree.AppendItem(id, "Subitem 1", 1) - tree.AppendItem(id, "Subitem 2", 1) - tree.AppendItem(id, "Subitem 3", 1) - tree.AppendItem(id, "Subitem 4", 1) - tree.AppendItem(id, "Subitem 5", 1) - - tree.Expand(root) - - return tree - - def CreateSizeReportCtrl(self, width=80, height=80): ctrl = SizeReportCtrl(self, -1, wx.DefaultPosition, wx.Size(width, height), self._mgr) Added: trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py (rev 0) +++ trunk/lib/rorterraineditor/RoRObjectPreviewOgreWindow.py 2007-08-02 14:26:50 UTC (rev 149) @@ -0,0 +1,211 @@ +#Thomas Fischer 31/05/2007, th...@th... +import wx, math +import ogre.renderer.OGRE as ogre +from wxogre.OgreManager import * +from wxogre.wxOgreWindow import * +from ror.SimpleTruckRepresentation import * +from ror.odefparser import * +from ror.rorcommon import * + + +class TreeDropTarget(wx.PyDropTarget): + def __init__(self, window): + wx.PyDropTarget.__init__(self) + self.do = wx.FileDataObject() + self.SetDataObject(self.do) + + def OnEnter(self, x, y, d): + print "OnEnter: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy + + def OnDragOver(self, x, y, d): + print "OnDragOver: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy + + def OnLeave(self): + print "OnLeave\n" + + def OnDrop(self, x, y): + print "OnDrop: %d %d\n" % (x, y) + return True + + def OnData(self, x, y, d): + print "OnData: %d, %d, %d\n" % (x, y, d) + self.GetData() + print "%s\n" % self.do.GetFilenames() + return d + +class ObjectPreviewOgreWindow(wxOgreWindow): + def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", **kwargs): + self.rordir = rordir + self.parent = parent + self.objnode = None + self.objentity = None + self.camalpha = 0 + self.radius = 40 + self.dragging = False + wxOgreWindow.__init__(self, parent, ID, size = size, **kwargs) + droptarget = TreeDropTarget(self) + self.SetDropTarget(droptarget) + + + def SceneInitialisation(self): + addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] + # only init things in the main window, not in shared ones! + # setup resources + for r in addresources: + ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) + + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() + + #get the scenemanager + self.sceneManager = getOgreManager().createSceneManager(ogre.ST_GENERIC) + + # create a camera + self.camera = self.sceneManager.createCamera(str(randomID())+'Camera') + self.camera.lookAt(ogre.Vector3(0, 0, 0)) + self.camera.setPosition(ogre.Vector3(0, 0, 100)) + self.camera.nearClipDistance = 0.1 + self.camera.setAutoAspectRatio(True) + + # create the Viewport" + self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) + self.viewport.backgroundColour = ogre.ColourValue(0, 0, 0) + + # bind mouse and keyboard + d=10.0 #displacement for key strokes + self.ControlKeyDict={wx.WXK_LEFT:ogre.Vector3(-d,0.0,0.0), + wx.WXK_RIGHT:ogre.Vector3(d,0.0,0.0), + wx.WXK_UP:ogre.Vector3(0.0,0.0,-d), + wx.WXK_DOWN:ogre.Vector3(0.0,0.0,d), + wx.WXK_PAGEUP:ogre.Vector3(0.0,d,0.0), + wx.WXK_PAGEDOWN:ogre.Vector3(0.0,-d,0.0)} + self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) + self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) + + #create objects + self.populateScene() + + def loadFile(self, filename): + self.filename = filename + filenameonly, extension = os.path.splitext(filename) + if extension.lower() in [".truck", ".load"]: + self.free() + uuid = randomID() + self.objnode, self.objentity, manualobject = createTruckMesh(self.sceneManager, filename, uuid) + elif extension.lower() in [".odef"]: + self.free() + uuid = randomID() + self.loadodef(filename, uuid) + + def loadodef(self, filename, uuid): + try: + (meshname, sx, sy, sz) = loadOdef(filename) + except Exception, err: + log().error("error while processing odef file %s" % odefFilename) + log().error(str(err)) + return + # create mesh + print meshname, sx, sy, sz + self.objnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"objnode") + self.objentity = self.sceneManager.createEntity(uuid+'objentity', meshname) + self.objnode.attachObject(self.objentity) + self.objnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + #self.objnode.setPosition(0,0,0) + if not sx is None: + self.objnode.setScale(sx, sy, sz) + + def free(self): + try: + self.sceneManager.destroyAllManualObjects() + except: + pass + try: + self.objnode.detachAllObjects() + self.sceneManager.destroySceneNode(self.objnode.getName()) + except: + pass + try: + self.sceneManager.destroyEntity(self.objentity) + except: + pass + + def populateScene(self): + self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) + self.sceneManager.setShadowTechnique(ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE); + self.sceneManager.setSkyDome(True, 'mysimple/terraineditor/previewwindowsky', 4.0, 8.0) + + self.MainLight = self.sceneManager.createLight('MainLight') + self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) + + # add some fog + self.sceneManager.setFog(ogre.FOG_EXP, ogre.ColourValue.White, 0.0002) + + # create a floor Mesh + plane = ogre.Plane() + plane.normal = ogre.Vector3(0, 1, 0) + plane.d = 200 + uuid = str(randomID()) + ogre.MeshManager.getSingleton().createPlane(uuid + 'FloorPlane', "General", plane, 200000.0, 200000.0, + 20, 20, True, 1, 50.0, 50.0,ogre.Vector3(0, 0, 1), + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + True, True) + + # create floor entity + entity = self.sceneManager.createEntity(uuid+'floor', uuid + 'FloorPlane') + entity.setMaterialName('mysimple/terraineditor/previewwindowfloor') + self.sceneManager.getRootSceneNode().createChildSceneNode().attachObject(entity) + + def updateCamera(self): + if not self.objnode is None: + if self.objentity is None: + self.radius = 15 + height = 2 + else: + self.radius = self.objentity.getBoundingRadius() * 2 + height = self.objentity.getBoundingBox().getMaximum().z + pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) + dx = math.cos(self.camalpha) * self.radius + dy = math.sin(self.camalpha) * self.radius + self.camera.setPosition(pos - ogre.Vector3(dx, -5, dy)) + self.camera.lookAt(pos + ogre.Vector3(0, height / 2, 0)) + if self.dragging == False: + self.camalpha += math.pi / 720 + if self.camalpha >= 360: + self.camalpha -= 360 + + + def OnFrameStarted(self): + self.updateCamera() + wxOgreWindow.OnFrameStarted(self) + + def onKeyDown(self,event): + validMove = self.ControlKeyDict.get(event.m_keyCode, False) + if validMove: + pos = self.camera.getPosition() + pos += validMove + self.camera.setPosition(pos) + event.Skip() + + def onMouseEvent(self, event): + self.SetFocus() #Gives Keyboard focus to the window + + if event.RightDown(): #Precedes dragging + self.StartDragX, self.StartDragY = event.GetPosition() #saves position of initial click + elif event.Dragging() and event.RightIsDown(): #Dragging with RMB + x,y = event.GetPosition() + dx = self.StartDragX - x + dy = self.StartDragY - y + self.StartDragX, self.StartDragY = x, y + self.camalpha -= float(dx) * (math.pi / 720) + self.updateCamera() + self.dragging = True + else: + self.dragging = False + event.Skip() + \ No newline at end of file Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-01 12:09:55 UTC (rev 148) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-02 14:26:50 UTC (rev 149) @@ -3,11 +3,12 @@ import ogre.renderer.OGRE as ogre from ror.truckparser import * from ror.terrainparser import * +from ror.odefparser import * from wxogre.OgreManager import * from wxogre.wxOgreWindow import * from ror.rorcommon import * +from ror.SimpleTruckRepresentation import * - ADDEDBY = "//added by the terrrain editor:\n" SHIFT_SPEED_FACTOR = 20 SLOW_DOWN_FACTOR = 0.75 @@ -26,6 +27,33 @@ Position = None Rotation = None +class MyDropTarget(wx.PyDropTarget): + def __init__(self, window): + wx.PyDropTarget.__init__(self) + self.do = wx.FileDataObject() + self.SetDataObject(self.do) + + def OnEnter(self, x, y, d): + print "OnEnter: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy + + def OnDragOver(self, x, y, d): + print "OnDragOver: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy + + def OnLeave(self): + print "OnLeave\n" + + def OnDrop(self, x, y): + print "OnDrop: %d %d\n" % (x, y) + return True + + def OnData(self, x, y, d): + print "OnData: %d, %d, %d\n" % (x, y, d) + self.GetData() + print "%s\n" % self.do.GetFilenames() + return d + class RoRTerrainOgreWindow(wxOgreWindow): terrain = None @@ -65,8 +93,9 @@ self.size = size self.kwargs = kwargs self.ID = ID - wxOgreWindow.__init__(self, self.parent, self.ID, size = self.size, **self.kwargs) + myDrop = MyDropTarget(self) + self.SetDropTarget(myDrop) def CameraLandCollision(self, value): self.cameralandcollisionenabled = value @@ -417,21 +446,7 @@ log().error("Error while adding an object to the terrain:") log().error(str(err)) - self.currentStatusMsg = "Terrain loaded" - - - def loadOdef(self, odefFilename): - f=open(odefFilename, 'r') - content = f.readlines() - f.close() - meshname = content[0].strip() - scalearr = [1,1,1] - if len(content) > 2: - scalearr = content[1].split(",") - - return (meshname, float(scalearr[0]), float(scalearr[1]), float(scalearr[2])) - - + self.currentStatusMsg = "Terrain loaded" def addObjectToTerrain(self, data=None, odefFilename=None, coords=None): if coords is None: @@ -460,7 +475,7 @@ meshname = None try: - (meshname, sx, sy, sz) = self.loadOdef(odefFilename) + (meshname, sx, sy, sz) = loadOdef(odefFilename) except Exception, err: data.error=True log().error("error while processing odef file %s" % odefFilename) @@ -513,7 +528,7 @@ entry = Entry() entry.uuid = uuid - entry.node, entry.entity, entry.manualobject = self.createTruckMesh(truckFilename, uuid) + entry.node, entry.entity, entry.manualobject = createTruckMesh(truckFilename, uuid) entry.data = data entry.node.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(data.rotz).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) @@ -523,89 +538,8 @@ self.entries[uuid] = entry return True - def createTruckMesh(self, fn, uuid): - if not os.path.isfile(fn): - #print "truck file not found: " + fn - return - p = rorparser() - p.parse(fn) - if not 'nodes' in p.tree.keys() or not 'beams' in p.tree.keys() : - return False - - try: - myManualObject = self.sceneManager.createManualObject(str(uuid)+"manual") - #myManualObjectMaterial = ogre.MaterialManager.getSingleton().create("manualmaterial"+truckname+str(self.randomcounter),"debugger"); - #myManualObjectMaterial.setReceiveShadows(False) - #myManualObjectMaterial.getTechnique(0).setLightingEnabled(True) - #myManualObjectMaterial.getTechnique(0).getPass(0).setDiffuse(0,0,1,0) - #myManualObjectMaterial.getTechnique(0).getPass(0).setAmbient(0,0,1) - #myManualObjectMaterial.getTechnique(0).getPass(0).setSelfIllumination(0,0,1) - #myManualObjectMaterial.getTechnique(0).getPass(0).setCullingMode(ogre.CULL_ANTICLOCKWISE) - matname = "" - if fn[-4:].lower() == "load": - matname = 'mysimple/loadcolor' - elif fn[-5:].lower() == "truck": - matname = 'mysimple/truckcolor' - - myManualObject.useIndexes = True - myManualObject.estimateVertexCount(2000) - myManualObject.estimateIndexCount(2000) - - myManualObject.begin(matname+"grid", ogre.RenderOperation.OT_LINE_LIST) - for nodeobj in p.tree['nodes']: - if nodeobj.has_key('type'): - continue - node = nodeobj['data'] - myManualObject.position(float(node[1]),float(node[2]),float(node[3])) - for beamobj in p.tree['beams']: - if beamobj.has_key('type'): - continue - beam = beamobj['data'] - myManualObject.index(int(beam[0])) - myManualObject.index(int(beam[1])) - myManualObject.end() - myManualObject.begin(matname, ogre.RenderOperation.OT_TRIANGLE_LIST) - for nodeobj in p.tree['nodes']: - if nodeobj.has_key('type'): - continue - node = nodeobj['data'] - myManualObject.position(float(node[1]),float(node[2]),float(node[3])) - - #print len(p.tree['submeshgroups']) - if len(p.tree['submeshgroups']) > 0: - faces = [] - for smobj in p.tree['submeshgroups']: - for cabobj in smobj['cab']: - if cabobj.has_key('type'): - continue - cab = cabobj['data'] - #print "########face" - if cab != []: - try: - myManualObject.triangle(int(cab[0]),int(cab[1]),int(cab[2])) - except: - print "error with cab: " + str(cab) - pass - else: - print "truck has no faces!" - - myManualObject.end() - mesh = myManualObject.convertToMesh(str(uuid)+"manual") - entity = self.sceneManager.createEntity(str(uuid)+"entity", str(uuid)+"manual") - #trucknode = self.sceneManager.getRootSceneNode().createChildSceneNode() - myManualObjectNode = self.sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") - myManualObjectNode.attachObject(entity) - - myManualObjectNode.attachObject(myManualObject) - - return myManualObjectNode, entity, mesh - except Exception, err: - log().error("error while processing truck file %s" % fn) - log().error(str(err)) - return None, None, None - def getPointedPosition(self, event): x, y = event.GetPosition() width, height, a, b, c = self.renderWindow.getMetrics() Modified: trunk/media/materials/mysimple.material =================================================================== --- trunk/media/materials/mysimple.material 2007-08-01 12:09:55 UTC (rev 148) +++ trunk/media/materials/mysimple.material 2007-08-02 14:26:50 UTC (rev 149) @@ -75,6 +75,7 @@ } } } + material mysimple/truckcolor { technique @@ -289,3 +290,33 @@ } } } + +material mysimple/terraineditor/previewwindowfloor +{ + technique + { + pass + { + lighting off + texture_unit + { + colour_op_ex source1 src_manual src_current 0.8 0.8 0.8 + } + } + } +} + +material mysimple/terraineditor/previewwindowsky +{ + technique + { + pass + { + lighting off + texture_unit + { + colour_op_ex source1 src_manual src_current 0.8 0.8 0.8 + } + } + } +} \ No newline at end of file Deleted: trunk/media/models/wheel.mesh =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-01 12:09:59
|
Revision: 148 http://roreditor.svn.sourceforge.net/roreditor/?rev=148&view=rev Author: rorthomas Date: 2007-08-01 05:09:55 -0700 (Wed, 01 Aug 2007) Log Message: ----------- * made water material more transparent * new GUI system, not completed yet, WIP! Modified Paths: -------------- trunk/lib/rorterraineditor/MainFrame.py trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py trunk/media/materials/mysimple.material Added Paths: ----------- trunk/lib/rorterraineditor/MainFrame_Tools.py Modified: trunk/lib/rorterraineditor/MainFrame.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame.py 2007-07-29 16:07:10 UTC (rev 147) +++ trunk/lib/rorterraineditor/MainFrame.py 2007-08-01 12:09:55 UTC (rev 148) @@ -1,4 +1,5 @@ -#Thomas Fischer 31/05/2007, th...@th... +import sys, os, os.path + from wxogre.OgreManager import * from ror.RoROgreWindow import * @@ -10,209 +11,254 @@ from RoRTerrainSelectedObjectOgreWindow import * from RoRTerrainSelectedObjectTopOgreWindow import * -ID_ABOUT = 101 -ID_OPENFILE = 102 -ID_SAVEFILE = 103 -ID_VIEWOBJ = 104 -ID_OGRESET = 105 -ID_SHOWHELP = 106 -ID_ADDTRUCK = 107 -ID_ADDMESH = 108 -ID_CHECKUPDATE = 109 -ID_SAVEFILEAS = 110 -ID_TERRAINCOLLISION = 111 -ID_EXIT = 199 +from MainFrame_Tools import * + +import wx +import wx.grid +import wx.html +import wx.aui +import cStringIO + +ID_OpenTerrain = wx.NewId() +ID_SaveTerrain = wx.NewId() +ID_SaveTerrainAs = wx.NewId() +ID_AddObject = wx.NewId() +ID_DeleteSelection = wx.NewId() +ID_CopySelection = wx.NewId() +ID_PasteSelection = wx.NewId() +ID_UndoAction = wx.NewId() +ID_RedoAction = wx.NewId() +ID_FindObject = wx.NewId() +ID_Quit = wx.NewId() + +ID_CreateOgre = wx.NewId() + +ID_CreateTree = wx.NewId() +ID_CreateGrid = wx.NewId() +ID_CreateText = wx.NewId() +ID_CreateHTML = wx.NewId() +ID_CreateSizeReport = wx.NewId() +ID_GridContent = wx.NewId() +ID_TextContent = wx.NewId() +ID_TreeContent = wx.NewId() +ID_HTMLContent = wx.NewId() +ID_SizeReportContent = wx.NewId() +ID_CreatePerspective = wx.NewId() +ID_CopyPerspective = wx.NewId() + +ID_Settings = wx.NewId() +ID_About = wx.NewId() +ID_FirstPerspective = ID_CreatePerspective+1000 + DATADIR = "data" TRUCKDIR = os.path.join(DATADIR, "trucks") TERRAINDIR = os.path.join(DATADIR, "terrains") OBJECTDIR = os.path.join(DATADIR, "objects") - -class MainFrame(wx.Frame): - def __init__(self, *args, **kwds): - kwds["style"] = wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLIP_CHILDREN +class MainFrame(wx.Frame): + + def __init__(self, parent, id=-1, title="", pos=wx.DefaultPosition, + size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE | + wx.SUNKEN_BORDER | + wx.CLIP_CHILDREN): + + wx.Frame.__init__(self, parent, id, title, pos, size, style) - wx.Frame.__init__(self, *args, **kwds) + # tell FrameManager to manage this frame + self._mgr = wx.aui.AuiManager() + self._mgr.SetManagedWindow(self) + + self._perspectives = [] + self.n = 0 + self.x = 0 + + self.SetIcon(wx.Icon('ror.ico',wx.BITMAP_TYPE_ICO)) + # create menu + mb = wx.MenuBar() - #main splitter - self.splitter = wx.SplitterWindow(self, wx.ID_ANY, style=wx.SP_PERMIT_UNSPLIT|wx.SP_3DSASH) - self.splitterleft = wx.Panel(self.splitter, wx.ID_ANY) - self.splitterright = wx.Panel(self.splitter, wx.ID_ANY) - self.splitter.SetSashGravity(1) - self.splitter.SetSashPosition(100) - self.splitter.SetMinimumPaneSize(200) + file_menu = wx.Menu() + file_menu.Append(ID_OpenTerrain, "Open Terrain") + file_menu.Append(wx.ID_EXIT, "Exit") - #viewsplitter - self.viewsplitter = wx.SplitterWindow(self.splitterright, wx.ID_ANY) - self.viewsplitterup = wx.Panel(self.viewsplitter, wx.ID_ANY) - self.viewsplitterdown = wx.Panel(self.viewsplitter, wx.ID_ANY) - self.splitter.SetSashGravity(0.5) - self.splitter.SetSashPosition(100) - self.splitter.SetMinimumPaneSize(200) + view_menu = wx.Menu() + view_menu.Append(ID_CreateOgre, "Create OgreWindow") + view_menu.Append(ID_CreateText, "Create Text Control") + view_menu.Append(ID_CreateHTML, "Create HTML Control") + view_menu.Append(ID_CreateTree, "Create Tree") + view_menu.Append(ID_CreateGrid, "Create Grid") + view_menu.Append(ID_CreateSizeReport, "Create Size Reporter") + view_menu.AppendSeparator() + view_menu.Append(ID_GridContent, "Use a Grid for the Content Pane") + view_menu.Append(ID_TextContent, "Use a Text Control for the Content Pane") + view_menu.Append(ID_HTMLContent, "Use an HTML Control for the Content Pane") + view_menu.Append(ID_TreeContent, "Use a Tree Control for the Content Pane") + view_menu.Append(ID_SizeReportContent, "Use a Size Reporter for the Content Pane") + - self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") + self.managerInit() + options_menu = wx.Menu() + options_menu.Append(ID_Settings, "GUI Settings Pane") - #ogre windows - self.terrainOgreWin = RoRTerrainOgreWindow(self.splitterleft, wx.ID_ANY, rordir=self.rordir) - self.sharedOgreWin = RoRTerrainSelectedObjectOgreWindow(self.viewsplitterup, wx.ID_ANY, self.terrainOgreWin) - self.sharedOgreWin2 = RoRTerrainSelectedObjectTopOgreWindow(self.viewsplitterdown, wx.ID_ANY, self.terrainOgreWin) + self._perspectives_menu = wx.Menu() + self._perspectives_menu.Append(ID_CreatePerspective, "Create Perspective") + self._perspectives_menu.Append(ID_CopyPerspective, "Copy Perspective Data To Clipboard") + self._perspectives_menu.AppendSeparator() + self._perspectives_menu.Append(ID_FirstPerspective+0, "Default Startup") + self._perspectives_menu.Append(ID_FirstPerspective+1, "All Panes") + + help_menu = wx.Menu() + help_menu.Append(ID_About, "About...") - #some labels - #self.helptext = wx.StaticText(self.splitterleft, wx.ID_ANY, "short help: right click = rotate; ctrl + right click, AWSD, mouse wheel = move") - #self.rotatingLabel = wx.StaticText(self.viewsplitterup, wx.ID_ANY, "rotating") - #self.topLabel = wx.StaticText(self.viewsplitterdown, wx.ID_ANY, "top") + mb.Append(file_menu, "File") + mb.Append(view_menu, "View") + mb.Append(self._perspectives_menu, "Perspectives") + mb.Append(options_menu, "Options") + mb.Append(help_menu, "Help") + + self.SetMenuBar(mb) - #Timer creation (for label updates) - self.timer = wx.Timer() - self.timer.SetOwner(self) #Sets the timer to notify self: binding the timer event is not enough - self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer) - self.timer.Start(200) + self.statusbar = self.CreateStatusBar(5, 0, wx.ID_ANY, "mainstatusbar") + self.statusbar.SetStatusWidths([-1, 200, 130, 250, 80]) + # min size for the frame itself isn't completely done. + # see the end up FrameManager::Update() for the test + # code. For now, just hard code a frame minimum size + self.SetMinSize(wx.Size(600, 400)) + try: + import ror.svn + self.SetTitle("Rigs of Rods Terrain Editor revision %d" % ror.svn.getRevision()) + except: + self.SetTitle("Rigs of Rods Terrain Editor") + + # create some toolbars + tb1 = wx.ToolBar(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TB_FLAT | wx.TB_NODIVIDER) + tb1.SetToolBitmapSize(wx.Size(16,16)) + tb1.AddLabelTool(ID_OpenTerrain, "Open Terrain", wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) + tb1.AddLabelTool(ID_SaveTerrain, "Save Terrain", wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE)) + tb1.AddLabelTool(ID_SaveTerrainAs, "Save Terrain as", wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS)) + tb1.AddSeparator() + tb1.AddLabelTool(ID_AddObject, "Add Something", wx.ArtProvider_GetBitmap(wx.ART_NEW)) + tb1.AddLabelTool(ID_DeleteSelection, "Delete Selection", wx.ArtProvider_GetBitmap(wx.ART_DELETE)) + tb1.AddSeparator() + tb1.AddLabelTool(ID_CopySelection, "Copy Selection", wx.ArtProvider_GetBitmap(wx.ART_COPY)) + tb1.AddLabelTool(ID_PasteSelection, "Paste Selection", wx.ArtProvider_GetBitmap(wx.ART_PASTE)) + tb1.AddSeparator() + tb1.AddLabelTool(ID_UndoAction, "Undo last Action", wx.ArtProvider_GetBitmap(wx.ART_UNDO)) + tb1.AddLabelTool(ID_RedoAction, "Redo last Undo", wx.ArtProvider_GetBitmap(wx.ART_REDO)) + tb1.AddSeparator() + tb1.AddLabelTool(ID_FindObject, "Find Object", wx.ArtProvider_GetBitmap(wx.ART_FIND)) + tb1.AddSeparator() + tb1.AddLabelTool(ID_Quit, "Quit", wx.ArtProvider_GetBitmap(wx.ART_QUIT)) + tb1.EnableTool(ID_SaveTerrain, False) + tb1.EnableTool(ID_SaveTerrainAs, False) + tb1.Realize() + self.tb1 = tb1 + + # add a bunch of panes + self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). + Name("test1").Caption("Pane Caption").Top(). + CloseButton(True).MaximizeButton(True)) + + self._mgr.AddPane(SettingsPanel(self, self), wx.aui.AuiPaneInfo(). + Name("settings").Caption("Dock Manager Settings"). + Dockable(False).Float().Hide().CloseButton(True).MaximizeButton(True)) + + # create some center panes + self._mgr.AddPane(self.CreateTreeCtrl(), wx.aui.AuiPaneInfo().Name("tree_content"). + CenterPane().Hide()) + + self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo().Name("sizereport_content"). + CenterPane().Hide()) + + self._mgr.AddPane(self.CreateTextCtrl(), wx.aui.AuiPaneInfo().Name("text_content"). + CenterPane().Hide()) + + self._mgr.AddPane(self.CreateHTMLCtrl(), wx.aui.AuiPaneInfo().Name("grid_content"). + CenterPane().Hide()) + #Timer creation (for rendering) self.ogreTimer = wx.Timer() self.ogreTimer.SetOwner(self) self.Bind(wx.EVT_TIMER, self.onUpdateRender, self.ogreTimer) self.ogreTimer.Start(25) - #create statusbar - self.statusbar = self.CreateStatusBar(5, 0, wx.ID_ANY, "mainstatusbar") - self.statusbar.SetStatusWidths([-1, 200, 130, 250, 80]) - #self.statusbar.SetStatusText("", 1) + # create timer for gui update + self.guitimer = wx.Timer() + self.guitimer.SetOwner(self) #Sets the timer to notify self: binding the timer event is not enough + self.Bind(wx.EVT_TIMER, self.OnGUITimer, self.guitimer) + self.guitimer.Start(200) - #create toolbar - #self.toolbar = wx.ToolBar(self, wx.ID_ANY, style = wx.TB_HORZ_TEXT) - #self.SetToolBar(self.toolbar ) - #bitmap = wx.Bitmap("media/gui/OpenFile.gif", wx.BITMAP_TYPE_GIF) - #self.toolbar.DoAddTool(0, "Open Terrain", bitmap, bitmap, wx.ITEM_NORMAL, "Open Terrain", "Opens a new terrain for edit") - #create general settings - #self.GeneralSettingsPanel = wx.Panel(self, wx.ID_ANY) - self.terrainName = wx.StaticText(self, wx.ID_ANY, "Terrain Name:") - self.terrainNamectrl = wx.TextCtrl(self, wx.ID_ANY) - self.Bind(wx.EVT_TEXT, self.OnChangeTerrainNameChange, self.terrainNamectrl) + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") + self.terrainOgreWin = RoRTerrainOgreWindow(self, wx.ID_ANY, rordir=self.rordir) + self._mgr.AddPane(self.terrainOgreWin, wx.aui.AuiPaneInfo().Name("ogre_content"). + CenterPane()) + + # add the toolbars to the manager + + self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo(). + Name("tb1"). + Caption("General Toolbar"). + ToolbarPane().Top(). + LeftDockable(False). + RightDockable(False) + ) - self.waterLevelText = wx.StaticText(self, wx.ID_ANY, "Water Level: 0") - self.waterlevelctrl = wx.Slider(self, wx.ID_ANY) - self.waterlevelctrl.max = 300 - self.Bind(wx.EVT_SCROLL, self.OnChangeWaterLevel, self.waterlevelctrl) + # make some default perspectives + perspective_all = self._mgr.SavePerspective() + + # all - perspective + all_panes = self._mgr.GetAllPanes() + for ii in xrange(len(all_panes)): + if not all_panes[ii].IsToolbar(): + all_panes[ii].Hide() + self._mgr.GetPane("ogre_content").Show() + perspective_default = self._mgr.SavePerspective() - #self.CurrEntName = wx.StaticText(self, wx.ID_ANY, "\n\n\n") - #self.PosText = wx.StaticText(self, wx.ID_ANY, "Position: x,y,z") - #self.terrPosX = wx.TextCtrl(self, wx.ID_ANY) - #self.terrPosY = wx.TextCtrl(self, wx.ID_ANY) - #self.terrPosZ = wx.TextCtrl(self, wx.ID_ANY) - #self.RotText = wx.StaticText(self, wx.ID_ANY, "Rotation: x,y,z") - #self.terrRotX = wx.TextCtrl(self, wx.ID_ANY) - #self.terrRotY = wx.TextCtrl(self, wx.ID_ANY) - #self.terrRotZ = wx.TextCtrl(self, wx.ID_ANY) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrPosX) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrPosY) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrPosZ) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrRotX) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrRotY) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrRotZ) + self._perspectives.append(perspective_default) + self._perspectives.append(perspective_all) - self.btnResetRotation = wx.Button(self, wx.ID_ANY, "Reset Rotation") - self.Bind(wx.EVT_BUTTON, self.OnBtnResetRotation, self.btnResetRotation) - self.btnStickToGround = wx.ToggleButton(self, wx.ID_ANY, "Stick to Ground") - self.Bind(wx.EVT_TOGGLEBUTTON, self.OnBtnStickToGroundChange, self.btnStickToGround) - - - #menu creation - menuBar = wx.MenuBar() - file_menu = wx.Menu() - self.fileopenmenu = file_menu.Append(ID_OPENFILE, "&Open", "Open Terrain") - self.filesavemenu = file_menu.Append(ID_SAVEFILE, "&Save", "Save Terrain") - self.filesaveasmenu = file_menu.Append(ID_SAVEFILEAS, "&Save as", "Save Terrain as") - - self.filesavemenu.Enable(False) - self.filesaveasmenu.Enable(False) - file_menu.AppendSeparator() - file_menu.Append(ID_EXIT, "E&xit", "Terminate the program") - menuBar.Append(file_menu, "&File"); - - view_menu = wx.Menu() - self.mnuterraincollision = view_menu.AppendCheckItem(ID_TERRAINCOLLISION, "Camera collides with Terrain", "") - self.mnuterraincollision.Check(True) - view_menu.AppendSeparator() - self.viewObjectDetails = view_menu.AppendCheckItem(ID_VIEWOBJ, "&Additional Object View Window", "creates two additional views") - self.viewObjectDetails.Check(False) - view_menu.AppendSeparator() - view_menu.Append(ID_OGRESET, "&Ogre Settings", "Change Ogre Display Settings") - menuBar.Append(view_menu, "&View"); - - add_menu = wx.Menu() - add_menu.Append(ID_ADDTRUCK, "&Truck/Load", "add a Truck or a Load to the terrain") - self.Bind(wx.EVT_MENU, self.OnAddTruck, id=ID_ADDTRUCK) - add_menu.Append(ID_ADDMESH, "&Object", "add a static Object to the terrain") - self.Bind(wx.EVT_MENU, self.OnAddMesh, id=ID_ADDMESH) - menuBar.Append(add_menu, "&Add"); - help_menu = wx.Menu() - help_menu.Append(ID_SHOWHELP, "Show &Help", "view the documentation") - help_menu.AppendSeparator() - help_menu.Append(ID_ABOUT, "&About", "More information about this program") - menuBar.Append(help_menu, "&Help"); - - #bindings - self.SetMenuBar(menuBar) - self.__set_properties() - self.__do_layout() - self.Bind(wx.EVT_MENU, self.OnExit, id=ID_EXIT) - self.Bind(wx.EVT_MENU, self.OnFileOpen, id=ID_OPENFILE) - self.Bind(wx.EVT_MENU, self.OnFileSave, id=ID_SAVEFILE) - self.Bind(wx.EVT_MENU, self.OnFileSaveAs, id=ID_SAVEFILEAS) - self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_ABOUT) - self.Bind(wx.EVT_MENU, self.onViewObjectDetails, id=ID_VIEWOBJ) - self.Bind(wx.EVT_MENU, self.OnChangeOgreSettings, id=ID_OGRESET) - self.Bind(wx.EVT_MENU, self.OnCameraTerrainCollision, id=ID_TERRAINCOLLISION) + # "commit" all changes made to FrameManager + self._mgr.Update() - def OnAbout(self, event=None): - ShowOnAbout() + self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) + self.Bind(wx.EVT_SIZE, self.OnSize) + self.Bind(wx.EVT_CLOSE, self.OnClose) + + # Show How To Use The Closing Panes Event + self.Bind(wx.aui.EVT_AUI_PANE_CLOSE, self.OnPaneClose) + - def OnCheckUpdate(self, event=None): - pass + self.Bind(wx.EVT_MENU, self.OnOpenTerrain, id=ID_OpenTerrain) + self.Bind(wx.EVT_MENU, self.OnSaveTerrain, id=ID_SaveTerrain) + self.Bind(wx.EVT_MENU, self.OnSaveTerrainAs, id=ID_SaveTerrainAs) - def OnCameraTerrainCollision(self, event=None): - self.terrainOgreWin.CameraLandCollision(self.mnuterraincollision.IsChecked()) + self.Bind(wx.EVT_MENU, self.OnCreateOgre, id=ID_CreateOgre) - def OnHelp(self, event=None): - import HelpFrame - HelpFrame.showHelpFrame() - - def OnAddTruck(self, event=None): - default = "" - if self.rordir: - default = os.path.join(self.rordir, TRUCKDIR) - dialog = wx.FileDialog(self, "Add Truck", default, "", "Truck and Load Files (*.truck,*.load)|*.truck;*.load", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) - res = dialog.ShowModal() - if res == wx.ID_OK: - if not self.terrainOgreWin.addTruckToTerrain(truckFilename=dialog.GetPath()): - dlg = wx.MessageDialog(self, "You must select a position on the ground first!", "error", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() + self.Bind(wx.EVT_MENU, self.OnCreateTree, id=ID_CreateTree) + self.Bind(wx.EVT_MENU, self.OnCreateGrid, id=ID_CreateGrid) + self.Bind(wx.EVT_MENU, self.OnCreateText, id=ID_CreateText) + self.Bind(wx.EVT_MENU, self.OnCreateHTML, id=ID_CreateHTML) + self.Bind(wx.EVT_MENU, self.OnCreateSizeReport, id=ID_CreateSizeReport) + self.Bind(wx.EVT_MENU, self.OnCreatePerspective, id=ID_CreatePerspective) + self.Bind(wx.EVT_MENU, self.OnCopyPerspective, id=ID_CopyPerspective) - def OnAddMesh(self, event=None): - default = "" - if self.rordir: - default = os.path.join(self.rordir, OBJECTDIR) - dialog = wx.FileDialog(self, "Add Object", default, "", "RoR Object Definitions (*.odef)|*.odef", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) - res = dialog.ShowModal() - if res == wx.ID_OK: - if not self.terrainOgreWin.addObjectToTerrain(odefFilename=dialog.GetPath()): - dlg = wx.MessageDialog(self, "You must select a position on the ground first!", "error", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - - - def OnBtnResetRotation(self, event=None): - self.terrainOgreWin.ObjectResetRotation() - - def OnBtnStickToGroundChange(self, event=None): - self.terrainOgreWin.stickCurrentObjectToGround = self.btnStickToGround.GetValue() + self.Bind(wx.EVT_MENU, self.OnSettings, id=ID_Settings) + self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_GridContent) + self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_TreeContent) + self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_TextContent) + self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_SizeReportContent) + self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_HTMLContent) + self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT) + self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_About) + + self.Bind(wx.EVT_MENU_RANGE, self.OnRestorePerspective, id=ID_FirstPerspective, + id2=ID_FirstPerspective+1000) + def updateObjPosRot(self, event=None): self.statusbar.SetStatusText(self.terrainOgreWin.currentStatusMsg, 1) if self.terrainOgreWin.terrain is None: @@ -232,40 +278,36 @@ txt = "%0.2f, %0.2f, %0.2f / %0.2f, %0.2f, %0.2f" % (posx, posy, posz, rotx, roty, rotz) self.statusbar.SetStatusText(txt, 3) - #pos = n.getPosition() - #self.terrPosX.SetValue(str(round(pos.x,2))) - #self.terrPosY.SetValue(str(round(pos.y,2))) - #self.terrPosZ.SetValue(str(round(pos.z,2))) - #rot = n.getOrientation() - #self.terrRotX.SetValue(str(round(ogre.Radian(rot.getPitch(False)+90).valueDegrees(),2))) - #self.terrRotY.SetValue(str(round(ogre.Radian(rot.getYaw(False)).valueDegrees(),2))) - #self.terrRotZ.SetValue(str(round(ogre.Radian(rot.getRoll(False)).valueDegrees(),2))) + def OnGUITimer(self, event): + #fill labels with some information, all windows have the same FPS! + txt = "%0.2f FPS" % (self.terrainOgreWin.renderWindow.getStatistics().lastFPS) + self.statusbar.SetStatusText(txt, 4) + self.updateObjPosRot() - #def OnChangeObjPosRot(self, event=None): - # pass - - def OnChangeTerrainNameChange(self, event=None): - self.terrainOgreWin.terrain.TerrainName = self.terrainNamectrl.GetValue() - - def OnChangeWaterLevel(self, event=None): - if not self.terrainOgreWin.terrain is None: - self.terrainOgreWin.terrain.WaterHeight = self.waterlevelctrl.GetValue() - self.waterLevelText.Label = "Water Level: %0.1f" % (self.terrainOgreWin.terrain.WaterHeight) - self.terrainOgreWin.updateWaterPlane() - - def OnChangeOgreSettings(self, event): - getOgreManager().getRoot().showConfigDialog() - dlg = wx.MessageDialog(self, "You must restart the program for the settings to get active", "Ogre Settings", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - - def OnFileSave(self, event): + def onUpdateRender(self, event=None): + getOgreManager().RenderAll() + pass + + def OnOpenTerrain(self, event=None): + default = "" + if self.rordir: + default = os.path.join(self.rordir, TERRAINDIR) + dialog = wx.FileDialog(self, "Open Terrain", default, "", "Terrain Files (*.terrn)|*.terrn", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + res = dialog.ShowModal() + if res == wx.ID_OK: + filename = dialog.GetPath() + self.terrainOgreWin.LoadTerrain(filename) + self.tb1.EnableTool(ID_SaveTerrain, True) + self.tb1.EnableTool(ID_SaveTerrainAs, True) + + + def OnSaveTerrain(self, event=None): if not self.terrainOgreWin.SaveTerrain(): dlg = wx.MessageDialog(self, "error while saving, see console!\n","error", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() - def OnFileSaveAs(self, event): + def OnSaveTerrainAs(self, event=None): default = "" if self.rordir: default = os.path.join(self.rordir, TERRAINDIR) @@ -277,136 +319,227 @@ dlg.ShowModal() dlg.Destroy() + def OnPaneClose(self, event): + caption = event.GetPane().caption - def OnFileOpen(self, event=None): - default = "" - if self.rordir: - default = os.path.join(self.rordir, TERRAINDIR) - #print default - dialog = wx.FileDialog(self, "Open Terrain", default, "", "Terrain Files (*.terrn)|*.terrn", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) - res = dialog.ShowModal() - if res == wx.ID_OK: - #self.fileopenmenu.Enable(False) - self.filesavemenu.Enable(True) - self.filesaveasmenu.Enable(True) - filename = dialog.GetPath() - - self.terrainOgreWin.LoadTerrain(filename) - if not self.terrainOgreWin.terrain is None: - #update some controls if finished loading - self.waterlevelctrl.SetValue(self.terrainOgreWin.terrain.WaterHeight) - self.waterLevelText.Label = "Water Level: %0.1f" % (self.terrainOgreWin.terrain.WaterHeight) - self.terrainNamectrl.SetValue(self.terrainOgreWin.terrain.TerrainName) + if caption in ["Tree Pane", "Dock Manager Settings", "Fixed Pane"]: + msg = "Are You Sure You Want To Close This Pane?" + dlg = wx.MessageDialog(self, msg, "AUI Question", + wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) - - def onViewObjectDetails(self, event=None): - # split/unsplit - if self.viewObjectDetails.IsChecked(): - self.viewObjectDetails.Check(True) - self.splitter.SetSashPosition(600, True) - self.splitter.SplitVertically(self.splitterleft, self.splitterright) - else: - self.viewObjectDetails.Check(False) - self.splitter.Unsplit() + if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]: + event.Veto() + dlg.Destroy() - def onUpdateRender(self, event=None): - getOgreManager().RenderAll() - pass - def OnTimer(self, event): - #fill labels with some information, all windows have the same FPS! - txt = "%0.2f FPS" % (self.terrainOgreWin.renderWindow.getStatistics().lastFPS) - self.statusbar.SetStatusText(txt, 4) - self.updateObjPosRot() - + def OnClose(self, event): + self._mgr.UnInit() + del self._mgr + self.Destroy() + + def OnExit(self, event): - self.Close(True) - del self - sys.exit(0) - - def __set_properties(self): - try: - import ror.svn - self.SetTitle("RoR Terrain Editor revision %d" % ror.svn.getRevision()) - except: - self.SetTitle("RoR Terrain Editor") - - self.terrainOgreWin.SetMinSize((640,480)) + self.Close() - def __do_layout(self): - sizer_main = wx.BoxSizer(wx.HORIZONTAL) + def OnAbout(self, event): + ShowOnAbout() - sizer_left = wx.BoxSizer(wx.VERTICAL) - sizer_left.Add(self.terrainOgreWin, 2, wx.EXPAND, 0) - self.splitterleft.SetSizer(sizer_left) + def GetDockArt(self): + return self._mgr.GetArtProvider() - - #construct view boxes - sizerviewup = wx.BoxSizer(wx.VERTICAL) - #sizerviewup.Add(self.rotatingLabel, 0, wx.EXPAND, 0) - sizerviewup.Add(self.sharedOgreWin, 1, wx.EXPAND, 0) - self.viewsplitterup.SetSizer(sizerviewup) - sizerviewdown = wx.BoxSizer(wx.VERTICAL) - #sizerviewdown.Add(self.topLabel, 0, wx.EXPAND, 0) - sizerviewdown.Add(self.sharedOgreWin2, 1, wx.EXPAND, 0) - self.viewsplitterdown.SetSizer(sizerviewdown) - self.viewsplitter.SplitHorizontally(self.viewsplitterup, self.viewsplitterdown) + def DoUpdate(self): + self._mgr.Update() - - sizer_right = wx.BoxSizer(wx.VERTICAL) - sizer_right.Add(self.viewsplitter, 1, wx.EXPAND, 0) - self.splitterright.SetSizer(sizer_right) + def OnEraseBackground(self, event): + event.Skip() - self.splitter.SplitVertically(self.splitterleft, self.splitterright) - self.splitter.Unsplit() - self.splitter.SetSashPosition(600) + def OnSize(self, event): + event.Skip() + + + def OnSettings(self, event): + # show the settings pane, and float it + floating_pane = self._mgr.GetPane("settings").Float().Show() + + if floating_pane.floating_pos == wx.DefaultPosition: + floating_pane.FloatingPosition(self.GetStartPosition()) + + self._mgr.Update() + + def managerInit(self): + flags = self._mgr.GetFlags() + # based on default settings! + flags |= wx.aui.AUI_MGR_ALLOW_ACTIVE_PANE + flags &= ~wx.aui.AUI_MGR_TRANSPARENT_DRAG + self._mgr.SetFlags(flags) + + def OnCreatePerspective(self, event): + dlg = wx.TextEntryDialog(self, "Enter a name for the new perspective:", "AUI Test") - sizer_main.Add(self.splitter, 1, wx.EXPAND, 0) + dlg.SetValue(("Perspective %d")%(len(self._perspectives)+1)) + if dlg.ShowModal() != wx.ID_OK: + return + + if len(self._perspectives) == 0: + self._perspectives_menu.AppendSeparator() + + self._perspectives_menu.Append(ID_FirstPerspective + len(self._perspectives), dlg.GetValue()) + self._perspectives.append(self._mgr.SavePerspective()) - sizer_settings = wx.BoxSizer(wx.VERTICAL) - sizer_settings.Add(self.waterLevelText, 0, wx.EXPAND, 0) - sizer_settings.Add(self.waterlevelctrl, 0, wx.EXPAND, 0) - sizer_settings.Add(self.terrainName, 0, wx.EXPAND, 0) - sizer_settings.Add(self.terrainNamectrl, 0, wx.EXPAND, 0) + def OnCopyPerspective(self, event): + s = self._mgr.SavePerspective() - #sizer_settings.Add(self.CurrEntName, 0, wx.EXPAND, 0) - #sizer_settings.Add(self.PosText, 0, wx.EXPAND, 0) - #sizer_terrPos = wx.BoxSizer(wx.HORIZONTAL) - #sizer_terrPos.Add(self.terrPosX, 0, wx.EXPAND, 0) - #sizer_terrPos.Add(self.terrPosY, 0, wx.EXPAND, 0) - #sizer_terrPos.Add(self.terrPosZ, 0, wx.EXPAND, 0) - #sizer_settings.Add(sizer_terrPos, 0, wx.EXPAND, 0) + if wx.TheClipboard.Open(): - #sizer_settings.Add(self.RotText, 0, wx.EXPAND, 0) - #sizer_terrRot = wx.BoxSizer(wx.HORIZONTAL) - #sizer_terrRot.Add(self.terrRotX, 0, wx.EXPAND, 0) - #sizer_terrRot.Add(self.terrRotY, 0, wx.EXPAND, 0) - #sizer_terrRot.Add(self.terrRotZ, 0, wx.EXPAND, 0) - #sizer_settings.Add(sizer_terrRot, 0, wx.EXPAND, 0) + wx.TheClipboard.SetData(wx.TextDataObject(s)) + wx.TheClipboard.Close() - sizer_settings.Add(self.btnResetRotation, 0, wx.EXPAND, 0) - sizer_settings.Add(self.btnStickToGround, 0, wx.EXPAND, 0) + def OnRestorePerspective(self, event): + self._mgr.LoadPerspective(self._perspectives[event.GetId() - ID_FirstPerspective]) + + + def GetStartPosition(self): + self.x = self.x + 20 + x = self.x + pt = self.ClientToScreen(wx.Point(0, 0)) + return wx.Point(pt.x + x, pt.y + x) + + + def OnCreateTree(self, event): + self._mgr.AddPane(self.CreateTreeCtrl(), wx.aui.AuiPaneInfo(). + Caption("Tree Control"). + Float().FloatingPosition(self.GetStartPosition()). + FloatingSize(wx.Size(150, 300)).CloseButton(True).MaximizeButton(True)) + self._mgr.Update() + + + def OnCreateGrid(self, event): + self._mgr.AddPane(self.CreateGrid(), wx.aui.AuiPaneInfo(). + Caption("Grid"). + Float().FloatingPosition(self.GetStartPosition()). + FloatingSize(wx.Size(300, 200)).CloseButton(True).MaximizeButton(True)) + self._mgr.Update() + + + def OnCreateHTML(self, event): + self._mgr.AddPane(self.CreateHTMLCtrl(), wx.aui.AuiPaneInfo(). + Caption("HTML Content"). + Float().FloatingPosition(self.GetStartPosition()). + FloatingSize(wx.Size(300, 200)).CloseButton(True).MaximizeButton(True)) + self._mgr.Update() + + + def OnCreateText(self, event): + self._mgr.AddPane(self.CreateTextCtrl(), wx.aui.AuiPaneInfo(). + Caption("Text Control"). + Float().FloatingPosition(self.GetStartPosition()). + CloseButton(True).MaximizeButton(True)) + self._mgr.Update() + + + def OnCreateSizeReport(self, event): + self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). + Caption("Client Size Reporter"). + Float().FloatingPosition(self.GetStartPosition()). + CloseButton(True).MaximizeButton(True)) + self._mgr.Update() + + + def OnChangeContentPane(self, event): + + self._mgr.GetPane("grid_content").Show(event.GetId() == ID_GridContent) + self._mgr.GetPane("text_content").Show(event.GetId() == ID_TextContent) + self._mgr.GetPane("tree_content").Show(event.GetId() == ID_TreeContent) + self._mgr.GetPane("sizereport_content").Show(event.GetId() == ID_SizeReportContent) + self._mgr.GetPane("html_content").Show(event.GetId() == ID_HTMLContent) + self._mgr.Update() + + def OnCreateOgre(self, event): + self._mgr.AddPane(self.CreateOgreCtrl(), wx.aui.AuiPaneInfo(). + Caption("Ogre Window"). + Float().FloatingPosition(self.GetStartPosition()). + CloseButton(True).MaximizeButton(True)) + self._mgr.Update() + - sizer_main.Add(sizer_settings, 0, wx.EXPAND, 0) + def CreateOgreCtrl(self): + return RoRTerrainOgreWindow(self, wx.ID_ANY, scenemanager=self.ogrewin.sceneManager) + + def CreateTextCtrl(self): + text = ("This is text box %d")%(self.n + 1) + return wx.TextCtrl(self,-1, text, wx.Point(0, 0), wx.Size(150, 90), + wx.NO_BORDER | wx.TE_MULTILINE) + + + + def CreateGrid(self): + grid = wx.grid.Grid(self, -1, wx.Point(0, 0), wx.Size(150, 250), + wx.NO_BORDER | wx.WANTS_CHARS) + grid.CreateGrid(50, 20) + return grid + + + def CreateTreeCtrl(self): + tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.Size(160, 250), + wx.TR_DEFAULT_STYLE | wx.NO_BORDER) - self.SetAutoLayout(True) - self.SetSizer(sizer_main) - sizer_main.Fit(self) - sizer_main.SetSizeHints(self) - self.Layout() + root = tree.AddRoot("AUI Project") + items = [] - + imglist = wx.ImageList(16, 16, True, 2) + imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16,16))) + imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16,16))) + tree.AssignImageList(imglist) + + items.append(tree.AppendItem(root, "Item 1", 0)) + items.append(tree.AppendItem(root, "Item 2", 0)) + items.append(tree.AppendItem(root, "Item 3", 0)) + items.append(tree.AppendItem(root, "Item 4", 0)) + items.append(tree.AppendItem(root, "Item 5", 0)) + + for ii in xrange(len(items)): + + id = items[ii] + tree.AppendItem(id, "Subitem 1", 1) + tree.AppendItem(id, "Subitem 2", 1) + tree.AppendItem(id, "Subitem 3", 1) + tree.AppendItem(id, "Subitem 4", 1) + tree.AppendItem(id, "Subitem 5", 1) + + tree.Expand(root) + + return tree + + + def CreateSizeReportCtrl(self, width=80, height=80): + ctrl = SizeReportCtrl(self, -1, wx.DefaultPosition, + wx.Size(width, height), self._mgr) + return ctrl + + def CreateHTMLCtrl(self): + ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300)) + if "gtk2" in wx.PlatformInfo: + ctrl.SetStandardFonts() + ctrl.SetPage(self.GetIntroText()) + return ctrl + + def GetIntroText(self): + return overview + def startApp(): MainApp = wx.PySimpleApp(0) wx.InitAllImageHandlers() #you may or may not need this myFrame = MainFrame(None, -1, "") MainApp.SetTopWindow(myFrame) + + myFrame.SetSize((800, 600)) + myFrame.SetFocus() myFrame.Show() MainApp.MainLoop() \ No newline at end of file Added: trunk/lib/rorterraineditor/MainFrame_Tools.py =================================================================== --- trunk/lib/rorterraineditor/MainFrame_Tools.py (rev 0) +++ trunk/lib/rorterraineditor/MainFrame_Tools.py 2007-08-01 12:09:55 UTC (rev 148) @@ -0,0 +1,417 @@ +import sys, os, os.path + +import wx +import wx.grid +import wx.html +import wx.aui + +import cStringIO +# -- wx.SizeReportCtrl -- +# (a utility control that always reports it's client size) + +class SizeReportCtrl(wx.PyControl): + + def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, + size=wx.DefaultSize, mgr=None): + + wx.PyControl.__init__(self, parent, id, pos, size, wx.NO_BORDER) + + self._mgr = mgr + + self.Bind(wx.EVT_PAINT, self.OnPaint) + self.Bind(wx.EVT_SIZE, self.OnSize) + self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) + + + def OnPaint(self, event): + + dc = wx.PaintDC(self) + + size = self.GetClientSize() + s = ("Size: %d x %d")%(size.x, size.y) + + dc.SetFont(wx.NORMAL_FONT) + w, height = dc.GetTextExtent(s) + height = height + 3 + dc.SetBrush(wx.WHITE_BRUSH) + dc.SetPen(wx.WHITE_PEN) + dc.DrawRectangle(0, 0, size.x, size.y) + dc.SetPen(wx.LIGHT_GREY_PEN) + dc.DrawLine(0, 0, size.x, size.y) + dc.DrawLine(0, size.y, size.x, 0) + dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)) + + if self._mgr: + + pi = self._mgr.GetPane(self) + + s = ("Layer: %d")%pi.dock_layer + w, h = dc.GetTextExtent(s) + dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*1)) + + s = ("Dock: %d Row: %d")%(pi.dock_direction, pi.dock_row) + w, h = dc.GetTextExtent(s) + dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*2)) + + s = ("Position: %d")%pi.dock_pos + w, h = dc.GetTextExtent(s) + dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*3)) + + s = ("Proportion: %d")%pi.dock_proportion + w, h = dc.GetTextExtent(s) + dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*4)) + + + def OnEraseBackground(self, event): + # intentionally empty + pass + + + def OnSize(self, event): + + self.Refresh() + event.Skip() + + +ID_PaneBorderSize = wx.ID_HIGHEST + 1 +ID_SashSize = ID_PaneBorderSize + 1 +ID_CaptionSize = ID_PaneBorderSize + 2 +ID_BackgroundColor = ID_PaneBorderSize + 3 +ID_SashColor = ID_PaneBorderSize + 4 +ID_InactiveCaptionColor = ID_PaneBorderSize + 5 +ID_InactiveCaptionGradientColor = ID_PaneBorderSize + 6 +ID_InactiveCaptionTextColor = ID_PaneBorderSize + 7 +ID_ActiveCaptionColor = ID_PaneBorderSize + 8 +ID_ActiveCaptionGradientColor = ID_PaneBorderSize + 9 +ID_ActiveCaptionTextColor = ID_PaneBorderSize + 10 +ID_BorderColor = ID_PaneBorderSize + 11 +ID_GripperColor = ID_PaneBorderSize + 12 + +class SettingsPanel(wx.Panel): + + def __init__(self, parent, frame): + + wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, + wx.DefaultSize) + + self._frame = frame + + vert = wx.BoxSizer(wx.VERTICAL) + + s1 = wx.BoxSizer(wx.HORIZONTAL) + self._border_size = wx.SpinCtrl(self, ID_PaneBorderSize, "", wx.DefaultPosition, wx.Size(50,20)) + s1.Add((1, 1), 1, wx.EXPAND) + s1.Add(wx.StaticText(self, -1, "Pane Border Size:")) + s1.Add(self._border_size) + s1.Add((1, 1), 1, wx.EXPAND) + s1.SetItemMinSize(1, (180, 20)) + #vert.Add(s1, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5) + + s2 = wx.BoxSizer(wx.HORIZONTAL) + self._sash_size = wx.SpinCtrl(self, ID_SashSize, "", wx.DefaultPosition, wx.Size(50,20)) + s2.Add((1, 1), 1, wx.EXPAND) + s2.Add(wx.StaticText(self, -1, "Sash Size:")) + s2.Add(self._sash_size) + s2.Add((1, 1), 1, wx.EXPAND) + s2.SetItemMinSize(1, (180, 20)) + #vert.Add(s2, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5) + + s3 = wx.BoxSizer(wx.HORIZONTAL) + self._caption_size = wx.SpinCtrl(self, ID_CaptionSize, "", wx.DefaultPosition, wx.Size(50,20)) + s3.Add((1, 1), 1, wx.EXPAND) + s3.Add(wx.StaticText(self, -1, "Caption Size:")) + s3.Add(self._caption_size) + s3.Add((1, 1), 1, wx.EXPAND) + s3.SetItemMinSize(1, (180, 20)) + #vert.Add(s3, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5) + + #vert.Add(1, 1, 1, wx.EXPAND) + + b = self.CreateColorBitmap(wx.BLACK) + + s4 = wx.BoxSizer(wx.HORIZONTAL) + self._background_color = wx.BitmapButton(self, ID_BackgroundColor, b, wx.DefaultPosition, wx.Size(50,25)) + s4.Add((1, 1), 1, wx.EXPAND) + s4.Add(wx.StaticText(self, -1, "Background Color:")) + s4.Add(self._background_color) + s4.Add((1, 1), 1, wx.EXPAND) + s4.SetItemMinSize(1, (180, 20)) + + s5 = wx.BoxSizer(wx.HORIZONTAL) + self._sash_color = wx.BitmapButton(self, ID_SashColor, b, wx.DefaultPosition, wx.Size(50,25)) + s5.Add((1, 1), 1, wx.EXPAND) + s5.Add(wx.StaticText(self, -1, "Sash Color:")) + s5.Add(self._sash_color) + s5.Add((1, 1), 1, wx.EXPAND) + s5.SetItemMinSize(1, (180, 20)) + + s6 = wx.BoxSizer(wx.HORIZONTAL) + self._inactive_caption_color = wx.BitmapButton(self, ID_InactiveCaptionColor, b, + wx.DefaultPosition, wx.Size(50,25)) + s6.Add((1, 1), 1, wx.EXPAND) + s6.Add(wx.StaticText(self, -1, "Normal Caption:")) + s6.Add(self._inactive_caption_color) + s6.Add((1, 1), 1, wx.EXPAND) + s6.SetItemMinSize(1, (180, 20)) + + s7 = wx.BoxSizer(wx.HORIZONTAL) + self._inactive_caption_gradient_color = wx.BitmapButton(self, ID_InactiveCaptionGradientColor, + b, wx.DefaultPosition, wx.Size(50,25)) + s7.Add((1, 1), 1, wx.EXPAND) + s7.Add(wx.StaticText(self, -1, "Normal Caption Gradient:")) + s7.Add(self._inactive_caption_gradient_color) + s7.Add((1, 1), 1, wx.EXPAND) + s7.SetItemMinSize(1, (180, 20)) + + s8 = wx.BoxSizer(wx.HORIZONTAL) + self._inactive_caption_text_color = wx.BitmapButton(self, ID_InactiveCaptionTextColor, b, + wx.DefaultPosition, wx.Size(50,25)) + s8.Add((1, 1), 1, wx.EXPAND) + s8.Add(wx.StaticText(self, -1, "Normal Caption Text:")) + s8.Add(self._inactive_caption_text_color) + s8.Add((1, 1), 1, wx.EXPAND) + s8.SetItemMinSize(1, (180, 20)) + + s9 = wx.BoxSizer(wx.HORIZONTAL) + self._active_caption_color = wx.BitmapButton(self, ID_ActiveCaptionColor, b, + wx.DefaultPosition, wx.Size(50,25)) + s9.Add((1, 1), 1, wx.EXPAND) + s9.Add(wx.StaticText(self, -1, "Active Caption:")) + s9.Add(self._active_caption_color) + s9.Add((1, 1), 1, wx.EXPAND) + s9.SetItemMinSize(1, (180, 20)) + + s10 = wx.BoxSizer(wx.HORIZONTAL) + self._active_caption_gradient_color = wx.BitmapButton(self, ID_ActiveCaptionGradientColor, + b, wx.DefaultPosition, wx.Size(50,25)) + s10.Add((1, 1), 1, wx.EXPAND) + s10.Add(wx.StaticText(self, -1, "Active Caption Gradient:")) + s10.Add(self._active_caption_gradient_color) + s10.Add((1, 1), 1, wx.EXPAND) + s10.SetItemMinSize(1, (180, 20)) + + s11 = wx.BoxSizer(wx.HORIZONTAL) + self._active_caption_text_color = wx.BitmapButton(self, ID_ActiveCaptionTextColor, + b, wx.DefaultPosition, wx.Size(50,25)) + s11.Add((1, 1), 1, wx.EXPAND) + s11.Add(wx.StaticText(self, -1, "Active Caption Text:")) + s11.Add(self._active_caption_text_color) + s11.Add((1, 1), 1, wx.EXPAND) + s11.SetItemMinSize(1, (180, 20)) + + s12 = wx.BoxSizer(wx.HORIZONTAL) + self._border_color = wx.BitmapButton(self, ID_BorderColor, b, wx.DefaultPosition, + wx.Size(50,25)) + s12.Add((1, 1), 1, wx.EXPAND) + s12.Add(wx.StaticText(self, -1, "Border Color:")) + s12.Add(self._border_color) + s12.Add((1, 1), 1, wx.EXPAND) + s12.SetItemMinSize(1, (180, 20)) + + s13 = wx.BoxSizer(wx.HORIZONTAL) + self._gripper_color = wx.BitmapButton(self, ID_GripperColor, b, wx.DefaultPosition, + wx.Size(50,25)) + s13.Add((1, 1), 1, wx.EXPAND) + s13.Add(wx.StaticText(self, -1, "Gripper Color:")) + s13.Add(self._gripper_color) + s13.Add((1, 1), 1, wx.EXPAND) + s13.SetItemMinSize(1, (180, 20)) + + grid_sizer = wx.GridSizer(0, 2) + grid_sizer.SetHGap(5) + grid_sizer.Add(s1) + grid_sizer.Add(s4) + grid_sizer.Add(s2) + grid_sizer.Add(s5) + grid_sizer.Add(s3) + grid_sizer.Add(s13) + grid_sizer.Add((1, 1)) + grid_sizer.Add(s12) + grid_sizer.Add(s6) + grid_sizer.Add(s9) + grid_sizer.Add(s7) + grid_sizer.Add(s10) + grid_sizer.Add(s8) + grid_sizer.Add(s11) + + cont_sizer = wx.BoxSizer(wx.VERTICAL) + cont_sizer.Add(grid_sizer, 1, wx.EXPAND | wx.ALL, 5) + self.SetSizer(cont_sizer) + self.GetSizer().SetSizeHints(self) + + self._border_size.SetValue(frame.GetDockArt().GetMetric(wx.aui.AUI_DOCKART_PANE_BORDER_SIZE)) + self._sash_size.SetValue(frame.GetDockArt().GetMetric(wx.aui.AUI_DOCKART_SASH_SIZE)) + self._caption_size.SetValue(frame.GetDockArt().GetMetric(wx.aui.AUI_DOCKART_CAPTION_SIZE)) + + self.UpdateColors() + + self.Bind(wx.EVT_SPINCTRL, self.OnPaneBorderSize, id=ID_PaneBorderSize) + self.Bind(wx.EVT_SPINCTRL, self.OnSashSize, id=ID_SashSize) + self.Bind(wx.EVT_SPINCTRL, self.OnCaptionSize, id=ID_CaptionSize) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_BackgroundColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_SashColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_InactiveCaptionColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_InactiveCaptionGradientColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_InactiveCaptionTextColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_ActiveCaptionColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_ActiveCaptionGradientColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_ActiveCaptionTextColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_BorderColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_GripperColor) + + + def CreateColorBitmap(self, c): + image = wx.EmptyImage(25, 14) + + for x in xrange(25): + for y in xrange(14): + pixcol = c + if x == 0 or x == 24 or y == 0 or y == 13: + pixcol = wx.BLACK + + image.SetRGB(x, y, pixcol.Red(), pixcol.Green(), pixcol.Blue()) + + return image.ConvertToBitmap() + + + def UpdateColors(self): + + bk = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_BACKGROUND_COLOUR) + self._background_color.SetBitmapLabel(self.CreateColorBitmap(bk)) + + cap = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_INACTIVE_CAPTION_COLOUR) + self._inactive_caption_color.SetBitmapLabel(self.CreateColorBitmap(cap)) + + capgrad = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR) + self._inactive_caption_gradient_color.SetBitmapLabel(self.CreateColorBitmap(capgrad)) + + captxt = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR) + self._inactive_caption_text_color.SetBitmapLabel(self.CreateColorBitmap(captxt)) + + acap = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_ACTIVE_CAPTION_COLOUR) + self._active_caption_color.SetBitmapLabel(self.CreateColorBitmap(acap)) + + acapgrad = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR) + self._active_caption_gradient_color.SetBitmapLabel(self.CreateColorBitmap(acapgrad)) + + acaptxt = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR) + self._active_caption_text_color.SetBitmapLabel(self.CreateColorBitmap(acaptxt)) + + sash = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_SASH_COLOUR) + self._sash_color.SetBitmapLabel(self.CreateColorBitmap(sash)) + + border = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_BORDER_COLOUR) + self._border_color.SetBitmapLabel(self.CreateColorBitmap(border)) + + gripper = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_GRIPPER_COLOUR) + self._gripper_color.SetBitmapLabel(self.CreateColorBitmap(gripper)) + + + def OnPaneBorderSize(self, event): + + self._frame.GetDockArt().SetMetric(wx.aui.AUI_DOCKART_PANE_BORDER_SIZE, + event.GetInt()) + self._frame.DoUpdate() + + + def OnSashSize(self, event): + + self._frame.GetDockArt().SetMetric(wx.aui.AUI_DOCKART_SASH_SIZE, + event.GetInt()) + self._frame.DoUpdate() + + + def OnCaptionSize(self, event): + + self._frame.GetDockArt().SetMetric(wx.aui.AUI_DOCKART_CAPTION_SIZE, + event.GetInt()) + self._frame.DoUpdate() + + + def OnSetColor(self, event): + + dlg = wx.ColourDialog(self._frame) + + dlg.SetTitle("Color Picker") + + if dlg.ShowModal() != wx.ID_OK: + return + + var = 0 + if event.GetId() == ID_BackgroundColor: + var = wx.aui.AUI_DOCKART_BACKGROUND_COLOUR + elif event.GetId() == ID_SashColor: + var = wx.aui.AUI_DOCKART_SASH_COLOUR + elif event.GetId() == ID_InactiveCaptionColor: + var = wx.aui.AUI_DOCKART_INACTIVE_CAPTION_COLOUR + elif event.GetId() == ID_InactiveCaptionGradientColor: + var = wx.aui.AUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR + elif event.GetId() == ID_InactiveCaptionTextColor: + var = wx.aui.AUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR + elif event.GetId() == ID_ActiveCaptionColor: + var = wx.aui.AUI_DOCKART_ACTIVE_CAPTION_COLOUR + elif event.GetId() == ID_ActiveCaptionGradientColor: + var = wx.aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR + elif event.GetId() == ID_ActiveCaptionTextColor: + var = wx.aui.AUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR + elif event.GetId() == ID_BorderColor: + var = wx.aui.AUI_DOCKART_BORDER_COLOUR + elif event.GetId() == ID_GripperColor: + var = wx.aui.AUI_DOCKART_GRIPPER_COLOUR + else: + return + + self._frame.GetDockArt().SetColor(var, dlg.GetColourData().GetColour()) + self._frame.DoUpdate() + self.UpdateColors() + + + +#---------------------------------------------------------------------- + +class TestPanel(wx.Panel): + def __init__(self, parent, log): + self.log = log + wx.Panel.__init__(self, parent, -1) + b = wx.Button(self, -1, "Show the wx.aui Demo Frame", (50,50)) + self.Bind(wx.EVT_BUTTON, self.OnButton, b) + + def OnButton(self, evt): + frame = PyAUIFrame(self, wx.ID_ANY, "wx.aui wxPython Demo", size=(750, 590)) + frame.Show() + +#---------------------------------------------------------------------- + +def runTest(frame, nb, log): + win = TestPanel(nb, log) + return win + +#---------------------------------------------------------------------- + + + +overview = """\ +<html><body> +<h3>wx.aui, the Advanced User Interface module</h3> + +<br/><b>Overview</b><br/> + +<p>wx.aui is an Advanced User Interface library for the wxWidgets toolkit +that allows developers to create high-quality, cross-platform user +interfaces quickly and easily.</p> + +<p><b>Features</b></p> + +<p>With wx.aui developers can create application frameworks with:</p> + +<ul> +<li>Native, dockable floating frames</li> +<li>Perspective saving and loading</li> +<li>Native toolbars incorporating real-time, "spring-loaded" dragging</li> +<li>Customizable floating/docking behavior</li> +<li>Completely customizable look-and-feel</li> +<li>Optional transparent window effects (while dragging or docking)</li> +</ul> + +</body></html> +""" \ No newline at end of file Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-07-29 16:07:10 UTC (rev 147) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-08-01 12:09:55 UTC (rev 148) @@ -58,9 +58,9 @@ RotateNode = None stickCurrentObjectToGround = False - def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", **kwargs): + def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", scenemanager=None, **kwargs): self.rordir = rordir - + self.sceneManager = scenemanager self.parent = parent self.size = size self.kwargs = kwargs @@ -140,20 +140,22 @@ def SceneInitialisation(self): - addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] - # only init things in the main window, not in shared ones! - # setup resources - for r in addresources: - ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) + hasparent = (not self.sceneManager is None) + if not hasparent: + addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] + # only init things in the main window, not in shared ones! + # setup resources + for r in addresources: + ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() - #get the scenemanager - self.sceneManager = getOgreManager().createSceneManager(ogre.ST_EXTERIOR_CLOSE) + #get the scenemanager + self.sceneManager = getOgreManager().createSceneManager(ogre.ST_EXTERIOR_CLOSE) # create a camera cameraUUID = randomID() @@ -176,8 +178,9 @@ self.Bind(wx.EVT_KEY_UP, self.onKeyUp) self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) - #create objects - self.populateScene() + if not hasparent: + #create objects + self.populateScene() def updateWaterPlane(self): @@ -192,7 +195,7 @@ # see http://www.ogre3d.org/docs/api/html/classOgre_1_1MeshManager.html#Ogre_1_1MeshManagera5 waterid = str(randomID()) mesh = ogre.MeshManager.getSingleton().createPlane(waterid+'WaterPlane', "General", plane, 3000, 3000, - 20, 20, True, 1, 50.0, 50.0, ogre.Vector3(0, 0, 1), + 20, 20, True, 1, 200.0, 200.0, ogre.Vector3(0, 0, 1), ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, True, True) Modified: trunk/media/materials/mysimple.material =================================================================== --- trunk/media/materials/mysimple.material 2007-07-29 16:07:10 UTC (rev 147) +++ trunk/media/materials/mysimple.material 2007-08-01 12:09:55 UTC (rev 148) @@ -10,7 +10,7 @@ { texture water.jpg scroll_anim 0.01 0.01 - alpha_op_ex source1 src_manual src_current 0.75 + alpha_op_ex source1 src_manual src_current 0.5 } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-29 16:07:16
|
Revision: 147 http://roreditor.svn.sourceforge.net/roreditor/?rev=147&view=rev Author: rorthomas Date: 2007-07-29 09:07:10 -0700 (Sun, 29 Jul 2007) Log Message: ----------- * modgui can now uninstall and repoinstall * removed gui options from modtool command line version Modified Paths: -------------- trunk/tools/modgui.py trunk/tools/modtool.py Modified: trunk/tools/modgui.py =================================================================== --- trunk/tools/modgui.py 2007-07-29 15:44:48 UTC (rev 146) +++ trunk/tools/modgui.py 2007-07-29 16:07:10 UTC (rev 147) @@ -9,13 +9,49 @@ import wx def main(): - app = wx.PySimpleApp(0) - wx.InitAllImageHandlers() - frame_1 = ror.modgui.ModGUI(None, -1, "") - app.SetTopWindow(frame_1) - frame_1.Show() - app.MainLoop() + log().info("modgui started") + import wx + app = wx.PySimpleApp(0) + wx.InitAllImageHandlers() #you may or may not need this + + # check for valid RoR Directory! + import ror.settingsManager + rorpath = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isfile(os.path.join(rorpath,"RoR.exe")): + import ror.starter + ror.starter.startApp() + return + if len(sys.argv) == 1: + log().error("missing arguments") + return + mode = sys.argv[1] + if mode in ["uninstall"]: + frame_1 = ror.modgui.ModGUI(None, -1, "") + app.SetTopWindow(frame_1) + frame_1.Show() + app.MainLoop() + elif mode in ['installrepo']: + if len(sys.argv) != 3: + return + targetfile = sys.argv[2] + import ror.modtool + result = ror.modtool.ModTool().work(mode, targetfile, False, False) + if result == False or result is None: + msg = "Installation failed! :( Please have a look at the file editorlog.log" + else: + msg = "Installation successfull! Mods installed:\n %s" % ", ".join(result) + dlg = wx.MessageDialog(None, msg, "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + else: + log().error("function %s not implemented in gui version!" % mode) + return + + + + + if __name__=="__main__": main() Modified: trunk/tools/modtool.py =================================================================== --- trunk/tools/modtool.py 2007-07-29 15:44:48 UTC (rev 146) +++ trunk/tools/modtool.py 2007-07-29 16:07:10 UTC (rev 147) @@ -34,13 +34,6 @@ sys.exit(0) def main(): - guiVersion = True #(os.path.basename(sys.executable).lower() == "pythonw.exe") - if guiVersion: - log().info("using GUI version") - import wx - MainApp = wx.PySimpleApp(0) - wx.InitAllImageHandlers() #you may or may not need this - # check for valid RoR Directory! import ror.settingsManager rorpath = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") @@ -91,13 +84,7 @@ installtarget = None import ror.modtool result = ror.modtool.ModTool().work(mode, targetfile, verbose, dryrun, installtarget) - if guiVersion: - msg = "Installation failed! :( Please have a look at the file editorlog.log" - if result: - msg = "Installation successfull! You can now use the Mod.\n more details can be found in the log window!\n(The Log Window will close when you click OK)" - dlg = wx.MessageDialog(None, msg, "Info", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() + if __name__=="__main__": main() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-29 15:44:53
|
Revision: 146 http://roreditor.svn.sourceforge.net/roreditor/?rev=146&view=rev Author: rorthomas Date: 2007-07-29 08:44:48 -0700 (Sun, 29 Jul 2007) Log Message: ----------- * modtool makes now backups on mod installation and restores them on uninstallation * modtool can now differ between original files and modified original files * no support for skins yet ... Modified Paths: -------------- trunk/lib/ror/modtool.py Modified: trunk/lib/ror/modtool.py =================================================================== --- trunk/lib/ror/modtool.py 2007-07-29 14:46:14 UTC (rev 145) +++ trunk/lib/ror/modtool.py 2007-07-29 15:44:48 UTC (rev 146) @@ -139,10 +139,22 @@ md5s = dc.readMD5File() for file in dc.dstree: filename = file['filename'] - if not os.path.basename(filename) in md5s.keys(): + if not filename in md5s.keys(): newtargets.append(filename) + else: + # found in original file list, but check md5 sum first! + filenamefound = self.searchFile(filename, rorpath) + filemd5 = dc.md5Sum(filenamefound) + if filemd5.strip() != md5s[filename].strip(): + newtargets.append(filename) + log().info("### removed %d files from dependency tree." % (len(dc.dstree)-len(newtargets))) - #print newtargets + + if len(newtargets) == 0: + log().error("Cannot uninstall original Files!") + return + + #print newtargets if dryrun: log().info("### would uninstall %d file(s):" % len(newtargets)) else: @@ -152,9 +164,7 @@ if filenamefound is None: log().error("### File not found: %s" % target) continue - log().info(" %s" % filenamefound) - if not dryrun: - os.unlink(filenamefound) + self.unInstallfile(filenamefound, dryrun) return None @@ -223,6 +233,38 @@ shutil.copyfile(filename, os.path.join(TEMPDIR, os.path.basename(filename))) return False + def unInstallfile(self, dstfile, dryrun): + filename = os.path.basename(dstfile) + filenamesplit = filename.split(".") + + backups = {} + for file in os.listdir(os.path.dirname(dstfile)): + #print file + tmpfilesplit = file.split(".") + if tmpfilesplit[0] == filenamesplit[0]: + if tmpfilesplit[-1] == "backup" and int(tmpfilesplit[-2]) in range(0, 99): + backups[int(tmpfilesplit[-2])] = file + if len(backups) > 0: + # sort backups to get the latest + keys = backups.keys() + keys.sort() + latestbackup = backups[keys[-1]] + latestbackup = os.path.join(os.path.dirname(dstfile), latestbackup) + log().info("Latest Backup: %s" % latestbackup) + if dryrun: + log().info("would move backup file %s to %s" % (latestbackup, dstfile)) + else: + log().info("moving backup file %s to %s" % (latestbackup, dstfile)) + shutil.move(latestbackup, dstfile) + else: + if dryrun: + log().info("would remove file %s " % (dstfile)) + else: + log().info("removing file %s " % (dstfile)) + os.unlink(dstfile) + + + def installfile(self, maintarget, srcfile, dryrun): file, extension = os.path.splitext(maintarget) rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") @@ -233,9 +275,27 @@ path = os.path.join(rorpath, "data", "terrains") else: path = rorpath + + dstfile = os.path.join(path, os.path.basename(srcfile)) + + backupnumber = -1 + if os.path.isfile(dstfile): + for i in range(0, 99): + dstfile2 = dstfile + ".%02d.backup" % i + if not os.path.isfile(dstfile2): + backupnumber = i + break + log().info("file existing, adding file to the backup queue. File got backup number %d." % backupnumber) + + if dryrun: + if backupnumber != -1: + log().info("would move original, existing file %s to %s" % (dstfile, dstfile2)) log().info("would install %s to %s" % (os.path.basename(srcfile), path)) else: + if backupnumber != -1: + log().info("moving original file %s to %s" % (dstfile, dstfile2)) + shutil.move(dstfile, dstfile2) log().info("installing %s to %s" % (os.path.basename(srcfile), path)) shutil.copyfile(srcfile, os.path.join(path, os.path.basename(srcfile))) @@ -278,12 +338,18 @@ for file in dc.files: filename, extension = os.path.splitext(file) if extension.lower() in ['.truck', '.terrn', '.load']: - targets.append(os.path.basename(file)) + targets.append(file) newtargets = [] md5s = dc.readMD5File() for target in targets: if not os.path.basename(target) in md5s.keys(): - newtargets.append(target) + newtargets.append(os.path.basename(target)) + else: + # found in original file list, but check md5 sum first! + filemd5 = dc.md5Sum(target) + if filemd5.strip() != md5s[os.path.basename(target)].strip(): + newtargets.append(os.path.basename(target)) + return newtargets \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-29 14:46:29
|
Revision: 145 http://roreditor.svn.sourceforge.net/roreditor/?rev=145&view=rev Author: rorthomas Date: 2007-07-29 07:46:14 -0700 (Sun, 29 Jul 2007) Log Message: ----------- * packed controls in the starter * fixed some minor bugs Modified Paths: -------------- trunk/lib/ror/bugreport.py trunk/lib/ror/repomanager.py trunk/lib/ror/starter.py Modified: trunk/lib/ror/bugreport.py =================================================================== --- trunk/lib/ror/bugreport.py 2007-07-28 15:37:02 UTC (rev 144) +++ trunk/lib/ror/bugreport.py 2007-07-29 14:46:14 UTC (rev 145) @@ -77,7 +77,7 @@ try: import sysinfo except: - dlg = wx.MessageDialog(self, "You must install pywin32 first.\nYou can find the setup in INSTALLDIR\tools\3rdparty\pywin32-setup.exe (This means you must install it by hand!)\nPlease note that you must restart this program after the pywin installation.", "Error", wx.OK | wx.ICON_INFORMATION) + dlg = wx.MessageDialog(self, "You must install pywin32 first.\nYou can find the setup in INSTALLDIR\\tools\\3rdparty\\pywin32-setup.exe (This means you must install it by hand!)\nPlease note that you must restart this program after the pywin installation.", "Error", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() self.Close() Modified: trunk/lib/ror/repomanager.py =================================================================== --- trunk/lib/ror/repomanager.py 2007-07-28 15:37:02 UTC (rev 144) +++ trunk/lib/ror/repomanager.py 2007-07-29 14:46:14 UTC (rev 145) @@ -1,7 +1,8 @@ #Thomas Fischer 31/05/2007, th...@th... import repoclient - +from logger import log +from settingsManager import getSettingsManager import wx, wx.grid, wx.html, os, os.path, base64, sys from datetime import * @@ -81,7 +82,8 @@ self.grid_1 = wx.grid.Grid(self, -1, size=(1, 1)) try: self.data = repoclient.getFiles(-1) - except: + except Exception, err: + log().error(err) dlg = wx.MessageDialog(self, "Repository Server is unavailable right now. Please note that the server is in a beta stage and that it is not online every time.", "Info", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() Modified: trunk/lib/ror/starter.py =================================================================== --- trunk/lib/ror/starter.py 2007-07-28 15:37:02 UTC (rev 144) +++ trunk/lib/ror/starter.py 2007-07-29 14:46:14 UTC (rev 145) @@ -61,13 +61,13 @@ self.btnUpdate = wx.Button(self.panel, wx.ID_ANY, "Update") self.Bind(wx.EVT_BUTTON, self.OnUpdate, self.btnUpdate) - self.btnDepGraph = wx.Button(self.panel, wx.ID_ANY, "Create dependency Graph") + self.btnDepGraph = wx.Button(self.panel, wx.ID_ANY, "Dependency Graph") self.Bind(wx.EVT_BUTTON, self.OnDepGraph, self.btnDepGraph) self.btnModUninstaller = wx.Button(self.panel, wx.ID_ANY, "Mod Uninstaller") self.Bind(wx.EVT_BUTTON, self.OnModUninstaller, self.btnModUninstaller) - self.btnRepClient = wx.Button(self.panel, wx.ID_ANY, "Open Repository Client") + self.btnRepClient = wx.Button(self.panel, wx.ID_ANY, "Repository Client") self.Bind(wx.EVT_BUTTON, self.OnRepClient, self.btnRepClient) self.btnExit = wx.Button(self.panel, wx.ID_ANY, "Exit") @@ -241,27 +241,45 @@ sys.exit(0) def __set_properties(self): - try: - import ror.svn - self.SetTitle("RoR Toolkit r%d" % ror.svn.getRevision()) - except: - self.SetTitle("RoR Toolkit") + #try: + import ror.svn + self.SetTitle("RoR Toolkit r%d" % ror.svn.getRevision()) + #except: + # self.SetTitle("RoR Toolkit") def __do_layout(self): sizer_panel = wx.BoxSizer(wx.VERTICAL) sizer_panel.Add(self.image, 0, wx.EXPAND, 0) - sizer_panel.Add(self.lblRoRDir, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnSelectRoRDir, 0, wx.EXPAND, 0) - sizer_panel.Add(self.cbbRenderEngine, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnStartRoR, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnStartTerrainEditor, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnStartTruckEditor, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnBugReport, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnUpdate, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnDepGraph, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnRepClient, 0, wx.EXPAND, 0) - sizer_panel.Add(self.btnModUninstaller, 0, wx.EXPAND, 0) + + sizer_a = wx.BoxSizer(wx.HORIZONTAL) + sizer_a.Add(self.lblRoRDir, 1, wx.EXPAND, 0) + sizer_a.Add(self.btnSelectRoRDir, 0, wx.EXPAND, 0) + sizer_panel.Add(sizer_a, 0, wx.EXPAND, 0) + + sizer_b = wx.BoxSizer(wx.HORIZONTAL) + sizer_b.Add(self.btnStartRoR, 0, wx.EXPAND, 0) + + sizer_c = wx.BoxSizer(wx.VERTICAL) + sizer_c.Add(self.btnStartTruckEditor, 1, wx.EXPAND, 0) + sizer_c.Add(self.btnStartTerrainEditor, 1, wx.EXPAND, 0) + sizer_b.Add(sizer_c, 1, wx.EXPAND, 0) + + sizer_b.Add(self.cbbRenderEngine, 0, wx.EXPAND, 0) + sizer_panel.Add(sizer_b, 1, wx.EXPAND, 0) + + sizer_d = wx.BoxSizer(wx.HORIZONTAL) + sizer_d.Add(self.btnBugReport, 1, wx.EXPAND, 0) + sizer_d.Add(self.btnUpdate, 1, wx.EXPAND, 0) + sizer_panel.Add(sizer_d, 0, wx.EXPAND, 0) + + + sizer_e = wx.BoxSizer(wx.HORIZONTAL) + sizer_e.Add(self.btnDepGraph, 1, wx.EXPAND, 0) + sizer_e.Add(self.btnRepClient, 1, wx.EXPAND, 0) + sizer_e.Add(self.btnModUninstaller, 1, wx.EXPAND, 0) + sizer_panel.Add(sizer_e, 0, wx.EXPAND, 0) + sizer_panel.Add(self.btnExit, 0, wx.EXPAND, 0) self.panel.SetSizer(sizer_panel) @@ -275,11 +293,15 @@ self.Layout() def startApp(): - MainApp = wx.PySimpleApp(0) + MainApp = wx.PySimpleApp() wx.InitAllImageHandlers() #you may or may not need this - myFrame = SettingsDialog(None, -1, "") + myFrame = SettingsDialog(None, -1, "") - MainApp.SetTopWindow(myFrame) + # add icon to the window + icon = wx.Icon("ror.ico",wx.BITMAP_TYPE_ICO) + myFrame.SetIcon(icon) + MainApp.SetTopWindow(myFrame) + myFrame.Show() MainApp.MainLoop() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-28 15:37:04
|
Revision: 144 http://roreditor.svn.sourceforge.net/roreditor/?rev=144&view=rev Author: rorthomas Date: 2007-07-28 08:37:02 -0700 (Sat, 28 Jul 2007) Log Message: ----------- * added Mod Uninstaller Modified Paths: -------------- trunk/lib/ror/starter.py Added Paths: ----------- trunk/lib/ror/modgui.py trunk/tools/modgui.py Added: trunk/lib/ror/modgui.py =================================================================== --- trunk/lib/ror/modgui.py (rev 0) +++ trunk/lib/ror/modgui.py 2007-07-28 15:37:02 UTC (rev 144) @@ -0,0 +1,95 @@ +#Thomas Fischer 31/05/2007, th...@th... + +import sys, os, os.path, base64 + +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) + +from logger import log +from settingsManager import getSettingsManager +import modtool + +import wx, wx.html + +class ModGUI(wx.Frame): + def __init__(self, *args, **kwds): + kwds["style"] = wx.DEFAULT_FRAME_STYLE + wx.Frame.__init__(self, *args, **kwds) + + + self.mainPanel = wx.Panel(self, wx.ID_ANY) + + self.listbox = wx.ListBox(self.mainPanel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, [], wx.LB_MULTIPLE) + self.chkDryRun = wx.CheckBox(self.mainPanel, wx.ID_ANY, "Dry run (only print out what would be done)") + self.btnNext = wx.Button(self.mainPanel, wx.ID_ANY, "Uninstall selected") + self.btnCancel = wx.Button(self.mainPanel, wx.ID_ANY, "Exit") + + self.Bind(wx.EVT_BUTTON, self.onUninstall , self.btnNext) + self.Bind(wx.EVT_BUTTON, self.onCancel , self.btnCancel) + + self.updateData() + + if len(self.data) == 0: + dlg = wx.MessageDialog(self, "No Mods found to uninstall!\n Uninstaller will now exit.", "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + self.Close() + return + + + self.__set_properties() + self.__do_layout() + + def updateData(self): + self.data = modtool.ModTool().getRoRMods(False) + self.listbox.Set(self.data) + + + def onCancel(self, event=None): + self.Close() + + def onUninstall(self, event=None): + if len(self.listbox.GetSelections()) == 0: + dlg = wx.MessageDialog(self, "Please select a Mod to uninstall!", "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + return + counter = 0 + dryrun = self.chkDryRun.GetValue() + log().info("starting uninstallation using the GUI") + for number in self.listbox.GetSelections(): + targetname = self.data[number] + log().info("trying to uninstall mod %s ..." % targetname) + modtool.ModTool().work("uninstall", targetname, False, dryrun) + counter += 1 + if not dryrun: + dlg = wx.MessageDialog(self, "%d Mods uninstalled!" % counter, "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + log().info("finished uninstallation using the GUI.") + self.updateData() + + def __set_properties(self): + self.SetTitle("Mod Uninstaller") + self.SetSize((400, 400)) + + def __do_layout(self): + sizer_panel = wx.BoxSizer(wx.VERTICAL) + sizer_panel.Add(self.listbox, 1, wx.EXPAND, 0) + + sizer_panel.Add(self.chkDryRun, 0, wx.EXPAND, 0) + + sizer_buttons = wx.BoxSizer(wx.HORIZONTAL) + sizer_buttons.Add(self.btnNext, 1, wx.EXPAND, 0) + sizer_buttons.Add(self.btnCancel, 1, wx.EXPAND, 0) + + sizer_panel.Add(sizer_buttons, 0, wx.EXPAND, 0) + + self.mainPanel.SetSizer(sizer_panel) + + sizer_main = wx.BoxSizer(wx.VERTICAL) + sizer_main.Add(self.mainPanel, 1, wx.EXPAND, 0) + + self.SetAutoLayout(True) + self.SetSizer(sizer_main) + sizer_main.Fit(self) + sizer_main.SetSizeHints(self) Modified: trunk/lib/ror/starter.py =================================================================== --- trunk/lib/ror/starter.py 2007-07-28 11:29:50 UTC (rev 143) +++ trunk/lib/ror/starter.py 2007-07-28 15:37:02 UTC (rev 144) @@ -64,6 +64,9 @@ self.btnDepGraph = wx.Button(self.panel, wx.ID_ANY, "Create dependency Graph") self.Bind(wx.EVT_BUTTON, self.OnDepGraph, self.btnDepGraph) + self.btnModUninstaller = wx.Button(self.panel, wx.ID_ANY, "Mod Uninstaller") + self.Bind(wx.EVT_BUTTON, self.OnModUninstaller, self.btnModUninstaller) + self.btnRepClient = wx.Button(self.panel, wx.ID_ANY, "Open Repository Client") self.Bind(wx.EVT_BUTTON, self.OnRepClient, self.btnRepClient) @@ -140,7 +143,12 @@ dlg.ShowModal() dlg.Destroy() - + def OnModUninstaller(self, event=None): + import modgui + gui = modgui.ModGUI(None, -1, "") + gui.Show() + del gui + def OnUpdate(self, event=None): import svngui gui = svngui.svnUpdate() @@ -253,6 +261,7 @@ sizer_panel.Add(self.btnUpdate, 0, wx.EXPAND, 0) sizer_panel.Add(self.btnDepGraph, 0, wx.EXPAND, 0) sizer_panel.Add(self.btnRepClient, 0, wx.EXPAND, 0) + sizer_panel.Add(self.btnModUninstaller, 0, wx.EXPAND, 0) sizer_panel.Add(self.btnExit, 0, wx.EXPAND, 0) self.panel.SetSizer(sizer_panel) Added: trunk/tools/modgui.py =================================================================== --- trunk/tools/modgui.py (rev 0) +++ trunk/tools/modgui.py 2007-07-28 15:37:02 UTC (rev 144) @@ -0,0 +1,21 @@ +#Thomas Fischer 31/05/2007, th...@th... +import sys, os, os.path, shutil + +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib")) + +from ror.logger import log +from ror.settingsManager import getSettingsManager +import ror.modgui +import wx + +def main(): + app = wx.PySimpleApp(0) + wx.InitAllImageHandlers() + frame_1 = ror.modgui.ModGUI(None, -1, "") + app.SetTopWindow(frame_1) + frame_1.Show() + app.MainLoop() + + +if __name__=="__main__": + main() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-28 11:29:56
|
Revision: 143 http://roreditor.svn.sourceforge.net/roreditor/?rev=143&view=rev Author: rorthomas Date: 2007-07-28 04:29:50 -0700 (Sat, 28 Jul 2007) Log Message: ----------- * updated setup Modified Paths: -------------- trunk/devtools/setup/setup.nsi Modified: trunk/devtools/setup/setup.nsi =================================================================== --- trunk/devtools/setup/setup.nsi 2007-07-28 10:15:55 UTC (rev 142) +++ trunk/devtools/setup/setup.nsi 2007-07-28 11:29:50 UTC (rev 143) @@ -2,7 +2,7 @@ ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "RoRToolkit" -!define PRODUCT_VERSION "0.1.140" +!define PRODUCT_VERSION "0.1.142" !define PRODUCT_PUBLISHER "Thomas Fischer" !define PRODUCT_WEB_SITE "http://wiki.rigsofrods.com/index.php?title=RoRToolkit" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" @@ -250,15 +250,15 @@ FunctionEnd Section -AdditionalIcons - ReadEnvStr $0 SYSTEMDRIVE + #ReadEnvStr $0 SYSTEMDRIVE SetOutPath $INSTDIR WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateDirectory "$SMPROGRAMS\RoRToolkit" CreateShortCut "$SMPROGRAMS\RoRToolkit\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\RoRToolkit\Uninstall.lnk" "$INSTDIR\uninst.exe" - CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Terrain Editor.lnk' '"$0\python25\python.exe" "$INSTDIR\terraineditor.py"' '' '$INSTDIR\ror.ico' - CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Truck Editor.lnk' '"$0\python25\python.exe" "$INSTDIR\truckeditor.py"' '' '$INSTDIR\ror.ico' - CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Toolkit.lnk' '"$0\python25\python.exe" "$INSTDIR\rortoolkit.py"' '' '$INSTDIR\ror.ico' + CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Terrain Editor.lnk' '$INSTDIR\terraineditor.py' '' '$INSTDIR\ror.ico' + CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Truck Editor.lnk' '$INSTDIR\truckeditor.py' '' '$INSTDIR\ror.ico' + CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Toolkit.lnk' '$INSTDIR\rortoolkit.py' '' '$INSTDIR\ror.ico' SectionEnd Section -Post @@ -285,7 +285,6 @@ Section Uninstall Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" - #RMDir "/r" "$INSTDIR\media" RMDir "/r" "$INSTDIR" RMDir "/r" "$SMPROGRAMS\RoRToolkit" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-28 10:15:57
|
Revision: 142 http://roreditor.svn.sourceforge.net/roreditor/?rev=142&view=rev Author: rorthomas Date: 2007-07-28 03:15:55 -0700 (Sat, 28 Jul 2007) Log Message: ----------- * small fixes at some sharp corners Modified Paths: -------------- trunk/devtools/setup/setup.nsi trunk/lib/ror/bugreport.py trunk/lib/ror/svn.py trunk/lib/ror/terrainparser.py trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py trunk/tools/modtool.py Modified: trunk/devtools/setup/setup.nsi =================================================================== --- trunk/devtools/setup/setup.nsi 2007-07-28 09:17:08 UTC (rev 141) +++ trunk/devtools/setup/setup.nsi 2007-07-28 10:15:55 UTC (rev 142) @@ -2,7 +2,7 @@ ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "RoRToolkit" -!define PRODUCT_VERSION "0.1.139" +!define PRODUCT_VERSION "0.1.140" !define PRODUCT_PUBLISHER "Thomas Fischer" !define PRODUCT_WEB_SITE "http://wiki.rigsofrods.com/index.php?title=RoRToolkit" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" @@ -17,7 +17,7 @@ BrandingText "Rigs of Rods Toolkit" InstProgressFlags smooth colored XPStyle on -ShowInstDetails show +#ShowInstDetails show ShowUninstDetails show SetDateSave on #SetDatablockOptimize on @@ -196,7 +196,8 @@ WriteRegStr HKCR "RoRRepo" "URL Protocol" "" WriteRegStr HKCR "RoRRepo\shell" "" "" WriteRegStr HKCR "RoRRepo\shell\open" "" "" - WriteRegStr HKCR 'RoRRepo\shell\open\command' '' '"%systemdrive%\python25\pythonw.exe" "$INSTDIR\tools\modgui.py installrepo" "%1"' + ReadEnvStr $0 SYSTEMDRIVE + WriteRegStr HKCR 'RoRRepo\shell\open\command' '' '"$0\python25\python.exe" "$INSTDIR\tools\modtool.py" "installrepo" "%1"' Banner::destroy FunctionEnd @@ -231,31 +232,33 @@ SectionIn 1 2 RO SetOutPath "$INSTDIR" SetOverwrite try - File /r /x *.pyc /x doc /x devtools /x 3rdparty /x downloaded /x graphs ..\..\* + File /r /x *.pyc /x *.pyo /x doc /x devtools /x 3rdparty /x downloaded /x graphs ..\..\* SectionEnd !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN -!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "installs python 2.5" -!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "installs required Tools (directX)" -!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "installs optional Tools (PyWin32 for bugreporting, PyParsing and GraphViz for Dependency Graphs)" -!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "installs the RoR Toolkit. It includes the Truckeditor, Terraineditor and various tools" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "python 2.5" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "required Tools (directX)" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "optional Tools (PyWin32 for bugreporting, PyParsing and GraphViz for Dependency Graphs)" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "the RoR Toolkit. It includes the Truckeditor, Terraineditor and various other tools" !insertmacro MUI_FUNCTION_DESCRIPTION_END Function "LaunchPostInstallation" - ExecWait "$INSTDIR\tools\update.py" - ExecWait "%systemdrive%\python25\pythonw.exe $INSTDIR\rortoolkit.py" + ReadEnvStr $0 SYSTEMDRIVE + ExecWait "$0\python25\python.exe $INSTDIR\tools\update.py" + ExecWait "$0\python25\python.exe $INSTDIR\rortoolkit.py" FunctionEnd Section -AdditionalIcons + ReadEnvStr $0 SYSTEMDRIVE SetOutPath $INSTDIR WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateDirectory "$SMPROGRAMS\RoRToolkit" CreateShortCut "$SMPROGRAMS\RoRToolkit\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\RoRToolkit\Uninstall.lnk" "$INSTDIR\uninst.exe" - CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Terrain Editor.lnk' '"%systemdrive%\python25\pythonw.exe" "$INSTDIR\terraineditor.py"' '' '$INSTDIR\ror.ico' - CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Truck Editor.lnk' '"%systemdrive%\python25\pythonw.exe" "$INSTDIR\truckeditor.py"' '' '$INSTDIR\ror.ico' - CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Toolkit.lnk' '"%systemdrive%\python25\pythonw.exe" "$INSTDIR\rortoolkit.py"' '' '$INSTDIR\ror.ico' + CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Terrain Editor.lnk' '"$0\python25\python.exe" "$INSTDIR\terraineditor.py"' '' '$INSTDIR\ror.ico' + CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Truck Editor.lnk' '"$0\python25\python.exe" "$INSTDIR\truckeditor.py"' '' '$INSTDIR\ror.ico' + CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Toolkit.lnk' '"$0\python25\python.exe" "$INSTDIR\rortoolkit.py"' '' '$INSTDIR\ror.ico' SectionEnd Section -Post Modified: trunk/lib/ror/bugreport.py =================================================================== --- trunk/lib/ror/bugreport.py 2007-07-28 09:17:08 UTC (rev 141) +++ trunk/lib/ror/bugreport.py 2007-07-28 10:15:55 UTC (rev 142) @@ -77,7 +77,7 @@ try: import sysinfo except: - dlg = wx.MessageDialog(self, "You must install pywin32 first.\nYou can find the setup in INSTALLDIR/tools/pywin32-setup.exe\nPLease note that you must restart this program after the pywin installation.", "Error", wx.OK | wx.ICON_INFORMATION) + dlg = wx.MessageDialog(self, "You must install pywin32 first.\nYou can find the setup in INSTALLDIR\tools\3rdparty\pywin32-setup.exe (This means you must install it by hand!)\nPlease note that you must restart this program after the pywin installation.", "Error", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() self.Close() Modified: trunk/lib/ror/svn.py =================================================================== --- trunk/lib/ror/svn.py 2007-07-28 09:17:08 UTC (rev 141) +++ trunk/lib/ror/svn.py 2007-07-28 10:15:55 UTC (rev 142) @@ -97,8 +97,8 @@ try: client.unlock(path) except Exception, err: - log().error("Error while svn unlock:") - log().error(str(err)) + #log().error("Error while svn unlock:") + #log().error(str(err)) pass revision_before = getRevision(client, path) Modified: trunk/lib/ror/terrainparser.py =================================================================== --- trunk/lib/ror/terrainparser.py 2007-07-28 09:17:08 UTC (rev 141) +++ trunk/lib/ror/terrainparser.py 2007-07-28 10:15:55 UTC (rev 142) @@ -232,16 +232,25 @@ lines.append(self.SkyColorLine.strip()+"\n") ar = [] - ar.append(str(self.TruckStartPosition[0])) - ar.append(str(self.TruckStartPosition[1])) - ar.append(str(self.TruckStartPosition[2])) - ar.append(str(self.CameraStartPosition[0])) - ar.append(str(self.CameraStartPosition[1])) - ar.append(str(self.CameraStartPosition[2])) + try: + ar.append(str(self.TruckStartPosition[0])) + ar.append(str(self.TruckStartPosition[1])) + ar.append(str(self.TruckStartPosition[2])) + except Exception, err: + log().error(str(err)) + try: + ar.append(str(self.CameraStartPosition[0])) + ar.append(str(self.CameraStartPosition[1])) + ar.append(str(self.CameraStartPosition[2])) + except Exception, err: + log().error(str(err)) if not self.CharacterStartPosition is None: - ar.append(str(self.CharacterStartPosition[0])) - ar.append(str(self.CharacterStartPosition[1])) - ar.append(str(self.CharacterStartPosition[2])) + try: + ar.append(str(self.CharacterStartPosition[0])) + ar.append(str(self.CharacterStartPosition[1])) + ar.append(str(self.CharacterStartPosition[2])) + except Exception, err: + log().error(str(err)) startline = ", ".join(ar)+"\n" lines.append(startline) Modified: trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-07-28 09:17:08 UTC (rev 141) +++ trunk/lib/rorterraineditor/RoRTerrainOgreWindow.py 2007-07-28 10:15:55 UTC (rev 142) @@ -384,19 +384,35 @@ self.createWaterPlane() self.createArrows() - if not self.terrain.CharacterStartPosition is None: - self.camera.setPosition(self.terrain.CharacterStartPosition) - else: - self.camera.setPosition(self.terrain.CameraStartPosition) + try: + if not self.terrain.CharacterStartPosition is None: + self.camera.setPosition(self.terrain.CharacterStartPosition) + else: + self.camera.setPosition(self.terrain.CameraStartPosition) + except Exception, err: + log().error("Error while setting initial camera:") + log().error(str(err)) for truck in self.terrain.trucks: - self.addTruckToTerrain(data=truck) + try: + self.addTruckToTerrain(data=truck) + except Exception, err: + log().error("Error while adding a truck to the terrain:") + log().error(str(err)) for load in self.terrain.loads: - self.addTruckToTerrain(data=load) + try: + self.addTruckToTerrain(data=load) + except Exception, err: + log().error("Error while adding a load to the terrain:") + log().error(str(err)) for object in self.terrain.objects: - self.addObjectToTerrain(data=object) + try: + self.addObjectToTerrain(data=object) + except Exception, err: + log().error("Error while adding an object to the terrain:") + log().error(str(err)) self.currentStatusMsg = "Terrain loaded" Modified: trunk/tools/modtool.py =================================================================== --- trunk/tools/modtool.py 2007-07-28 09:17:08 UTC (rev 141) +++ trunk/tools/modtool.py 2007-07-28 10:15:55 UTC (rev 142) @@ -3,6 +3,9 @@ sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib")) +from ror.logger import log +from ror.settingsManager import getSettingsManager + def usage(): print "usage (general): %s <mode> <additionaloptions> [--verbose] [--dryrun]" % (os.path.basename(sys.argv[0])) print "list <filename>" @@ -31,7 +34,7 @@ sys.exit(0) def main(): - guiVersion = (os.path.basename(sys.executable).lower() == "pythonw.exe") + guiVersion = True #(os.path.basename(sys.executable).lower() == "pythonw.exe") if guiVersion: log().info("using GUI version") import wx @@ -91,7 +94,7 @@ if guiVersion: msg = "Installation failed! :( Please have a look at the file editorlog.log" if result: - msg = "Installation successfull! You can now use the Mod." + msg = "Installation successfull! You can now use the Mod.\n more details can be found in the log window!\n(The Log Window will close when you click OK)" dlg = wx.MessageDialog(None, msg, "Info", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-28 09:17:09
|
Revision: 141 http://roreditor.svn.sourceforge.net/roreditor/?rev=141&view=rev Author: rorthomas Date: 2007-07-28 02:17:08 -0700 (Sat, 28 Jul 2007) Log Message: ----------- * removed unneeded .pyo files Removed Paths: ------------- trunk/lib/psyco/__init__.pyo trunk/lib/psyco/classes.pyo trunk/lib/psyco/core.pyo trunk/lib/psyco/kdictproxy.pyo trunk/lib/psyco/logger.pyo trunk/lib/psyco/profiler.pyo trunk/lib/psyco/support.pyo Deleted: trunk/lib/psyco/__init__.pyo =================================================================== (Binary files differ) Deleted: trunk/lib/psyco/classes.pyo =================================================================== (Binary files differ) Deleted: trunk/lib/psyco/core.pyo =================================================================== (Binary files differ) Deleted: trunk/lib/psyco/kdictproxy.pyo =================================================================== (Binary files differ) Deleted: trunk/lib/psyco/logger.pyo =================================================================== (Binary files differ) Deleted: trunk/lib/psyco/profiler.pyo =================================================================== (Binary files differ) Deleted: trunk/lib/psyco/support.pyo =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-28 00:33:41
|
Revision: 140 http://roreditor.svn.sourceforge.net/roreditor/?rev=140&view=rev Author: rorthomas Date: 2007-07-27 17:33:39 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * updated installer * renamed all .pyw back to .py due to problems Modified Paths: -------------- trunk/devtools/setup/readme-installer.txt trunk/devtools/setup/setup.nsi trunk/lib/ror/svn.py trunk/tools/modtool.py trunk/tools/update.py Added Paths: ----------- trunk/rortoolkit.py trunk/terraineditor.py trunk/truckeditor.py Removed Paths: ------------- trunk/rortoolkit.pyw trunk/terraineditor.pyw trunk/truckeditor.pyw Modified: trunk/devtools/setup/readme-installer.txt =================================================================== --- trunk/devtools/setup/readme-installer.txt 2007-07-27 19:19:31 UTC (rev 139) +++ trunk/devtools/setup/readme-installer.txt 2007-07-28 00:33:39 UTC (rev 140) @@ -1,2 +1,8 @@ have fun and report bugs and feature requests! :) -http://forum.rigsofrods.com \ No newline at end of file +http://forum.rigsofrods.com + +RoR Toolkit Thread: +http://forum.rigsofrods.com/index.php/topic,682.msg5932.html#msg5932 + +RoR Toolkit at the Wiki: +http://wiki.rigsofrods.com/index.php?title=RoRToolkit \ No newline at end of file Modified: trunk/devtools/setup/setup.nsi =================================================================== --- trunk/devtools/setup/setup.nsi 2007-07-27 19:19:31 UTC (rev 139) +++ trunk/devtools/setup/setup.nsi 2007-07-28 00:33:39 UTC (rev 140) @@ -196,7 +196,7 @@ WriteRegStr HKCR "RoRRepo" "URL Protocol" "" WriteRegStr HKCR "RoRRepo\shell" "" "" WriteRegStr HKCR "RoRRepo\shell\open" "" "" - WriteRegStr HKCR 'RoRRepo\shell\open\command' '' '"c:\python25\pythonw.exe" "$INSTDIR\tools\modgui.py installrepo" "%1"' + WriteRegStr HKCR 'RoRRepo\shell\open\command' '' '"%systemdrive%\python25\pythonw.exe" "$INSTDIR\tools\modgui.py installrepo" "%1"' Banner::destroy FunctionEnd @@ -220,6 +220,7 @@ SectionEnd Section /o "Optional Tools" SEC03 + AddSize 20000 SectionIn 1 Call InstallPyWin32 Call InstallPyParsing @@ -230,7 +231,7 @@ SectionIn 1 2 RO SetOutPath "$INSTDIR" SetOverwrite try - File /r /x *.pyc /x ..\..\tools\3rdparty /x ..\..\downloaded /x ..\..\graphs /x .. ..\..\* + File /r /x *.pyc /x doc /x devtools /x 3rdparty /x downloaded /x graphs ..\..\* SectionEnd @@ -242,18 +243,19 @@ !insertmacro MUI_FUNCTION_DESCRIPTION_END Function "LaunchPostInstallation" - ExecWait '"$INSTDIR\update.bat"' - ExecWait '"$INSTDIR\rortoolkit.bat"' + ExecWait "$INSTDIR\tools\update.py" + ExecWait "%systemdrive%\python25\pythonw.exe $INSTDIR\rortoolkit.py" FunctionEnd Section -AdditionalIcons SetOutPath $INSTDIR WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateDirectory "$SMPROGRAMS\RoRToolkit" -# CreateShortCut "$SMPROGRAMS\RoRToolkit\RoR Truck Editor.lnk" "$INSTDIR\terraineditor.bat" "" "$INSTDIR\ror.ico" - CreateShortCut "$SMPROGRAMS\RoRToolkit\RoR Toolkit.lnk" "%systemdrive%\python25\pythonw.exe $INSTDIR\rortoolkit.pyw" "" "$INSTDIR\ror.ico" CreateShortCut "$SMPROGRAMS\RoRToolkit\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\RoRToolkit\Uninstall.lnk" "$INSTDIR\uninst.exe" + CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Terrain Editor.lnk' '"%systemdrive%\python25\pythonw.exe" "$INSTDIR\terraineditor.py"' '' '$INSTDIR\ror.ico' + CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Truck Editor.lnk' '"%systemdrive%\python25\pythonw.exe" "$INSTDIR\truckeditor.py"' '' '$INSTDIR\ror.ico' + CreateShortCut '$SMPROGRAMS\RoRToolkit\RoR Toolkit.lnk' '"%systemdrive%\python25\pythonw.exe" "$INSTDIR\rortoolkit.py"' '' '$INSTDIR\ror.ico' SectionEnd Section -Post Modified: trunk/lib/ror/svn.py =================================================================== --- trunk/lib/ror/svn.py 2007-07-27 19:19:31 UTC (rev 139) +++ trunk/lib/ror/svn.py 2007-07-28 00:33:39 UTC (rev 140) @@ -78,6 +78,7 @@ try: client = pysvn.Client() + log().info("svn update on this path: %s" % path) # try to restore previous broken updates try: client.cleanup(path) @@ -87,7 +88,7 @@ pass try: - client.resolved(path, reverse=True) + client.resolved(path) except Exception, err: log().error("Error while svn resolved:") log().error(str(err)) Copied: trunk/rortoolkit.py (from rev 135, trunk/rortoolkit.pyw) =================================================================== --- trunk/rortoolkit.py (rev 0) +++ trunk/rortoolkit.py 2007-07-28 00:33:39 UTC (rev 140) @@ -0,0 +1,25 @@ +#Thomas Fischer 31/05/2007, th...@th... +import sys, os, os.path + +def main(): + """ + main method + """ + + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) + + # Import Psyco if available + try: + import psyco + #psyco.full() + #psyco.log() + #psyco.profile() + except ImportError: + pass + + import ror.starter + ror.starter.startApp() + + +if __name__=="__main__": + main() \ No newline at end of file Deleted: trunk/rortoolkit.pyw =================================================================== --- trunk/rortoolkit.pyw 2007-07-27 19:19:31 UTC (rev 139) +++ trunk/rortoolkit.pyw 2007-07-28 00:33:39 UTC (rev 140) @@ -1,25 +0,0 @@ -#Thomas Fischer 31/05/2007, th...@th... -import sys, os, os.path - -def main(): - """ - main method - """ - - sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) - - # Import Psyco if available - try: - import psyco - #psyco.full() - #psyco.log() - #psyco.profile() - except ImportError: - pass - - import ror.starter - ror.starter.startApp() - - -if __name__=="__main__": - main() \ No newline at end of file Copied: trunk/terraineditor.py (from rev 135, trunk/terraineditor.pyw) =================================================================== --- trunk/terraineditor.py (rev 0) +++ trunk/terraineditor.py 2007-07-28 00:33:39 UTC (rev 140) @@ -0,0 +1,28 @@ +#Thomas Fischer 31/05/2007, th...@th... +import sys, os, os.path + +def main(): + """ + main method + """ + + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) + import ror.settingsManager + path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isfile(os.path.join(path,"RoR.exe")): + import ror.starter + ror.starter.startApp() + + # Import Psyco if available + try: + import psyco + psyco.full() + except ImportError: + pass + + import rorterraineditor.MainFrame + rorterraineditor.MainFrame.startApp() + + +if __name__=="__main__": + main() \ No newline at end of file Deleted: trunk/terraineditor.pyw =================================================================== --- trunk/terraineditor.pyw 2007-07-27 19:19:31 UTC (rev 139) +++ trunk/terraineditor.pyw 2007-07-28 00:33:39 UTC (rev 140) @@ -1,28 +0,0 @@ -#Thomas Fischer 31/05/2007, th...@th... -import sys, os, os.path - -def main(): - """ - main method - """ - - sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) - import ror.settingsManager - path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isfile(os.path.join(path,"RoR.exe")): - import ror.starter - ror.starter.startApp() - - # Import Psyco if available - try: - import psyco - psyco.full() - except ImportError: - pass - - import rorterraineditor.MainFrame - rorterraineditor.MainFrame.startApp() - - -if __name__=="__main__": - main() \ No newline at end of file Modified: trunk/tools/modtool.py =================================================================== --- trunk/tools/modtool.py 2007-07-27 19:19:31 UTC (rev 139) +++ trunk/tools/modtool.py 2007-07-28 00:33:39 UTC (rev 140) @@ -31,6 +31,13 @@ sys.exit(0) def main(): + guiVersion = (os.path.basename(sys.executable).lower() == "pythonw.exe") + if guiVersion: + log().info("using GUI version") + import wx + MainApp = wx.PySimpleApp(0) + wx.InitAllImageHandlers() #you may or may not need this + # check for valid RoR Directory! import ror.settingsManager rorpath = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") @@ -80,7 +87,14 @@ else: installtarget = None import ror.modtool - ror.modtool.ModTool().work(mode, targetfile, verbose, dryrun, installtarget) + result = ror.modtool.ModTool().work(mode, targetfile, verbose, dryrun, installtarget) + if guiVersion: + msg = "Installation failed! :( Please have a look at the file editorlog.log" + if result: + msg = "Installation successfull! You can now use the Mod." + dlg = wx.MessageDialog(None, msg, "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() if __name__=="__main__": main() Modified: trunk/tools/update.py =================================================================== --- trunk/tools/update.py 2007-07-27 19:19:31 UTC (rev 139) +++ trunk/tools/update.py 2007-07-28 00:33:39 UTC (rev 140) @@ -2,7 +2,7 @@ def main(): sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib")) - guiVersion = True + guiVersion = (os.path.basename(sys.executable).lower() == "pythonw.exe") if guiVersion: import wx Copied: trunk/truckeditor.py (from rev 135, trunk/truckeditor.pyw) =================================================================== --- trunk/truckeditor.py (rev 0) +++ trunk/truckeditor.py 2007-07-28 00:33:39 UTC (rev 140) @@ -0,0 +1,28 @@ +#Thomas Fischer 31/05/2007, th...@th... +import sys, os, os.path + +def main(): + """ + main method + """ + + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) + import ror.settingsManager + path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isfile(os.path.join(path,"RoR.exe")): + import ror.starter + ror.starter.startApp() + + # Import Psyco if available + try: + import psyco + psyco.full() + except ImportError: + pass + + import rortruckeditor.MainFrame + rortruckeditor.MainFrame.startApp() + + +if __name__=="__main__": + main() \ No newline at end of file Deleted: trunk/truckeditor.pyw =================================================================== --- trunk/truckeditor.pyw 2007-07-27 19:19:31 UTC (rev 139) +++ trunk/truckeditor.pyw 2007-07-28 00:33:39 UTC (rev 140) @@ -1,28 +0,0 @@ -#Thomas Fischer 31/05/2007, th...@th... -import sys, os, os.path - -def main(): - """ - main method - """ - - sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) - import ror.settingsManager - path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isfile(os.path.join(path,"RoR.exe")): - import ror.starter - ror.starter.startApp() - - # Import Psyco if available - try: - import psyco - psyco.full() - except ImportError: - pass - - import rortruckeditor.MainFrame - rortruckeditor.MainFrame.startApp() - - -if __name__=="__main__": - main() \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 19:19:35
|
Revision: 139 http://roreditor.svn.sourceforge.net/roreditor/?rev=139&view=rev Author: rorthomas Date: 2007-07-27 12:19:31 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * improved setup Modified Paths: -------------- trunk/devtools/setup/setup.nsi Modified: trunk/devtools/setup/setup.nsi =================================================================== --- trunk/devtools/setup/setup.nsi 2007-07-27 19:10:37 UTC (rev 138) +++ trunk/devtools/setup/setup.nsi 2007-07-27 19:19:31 UTC (rev 139) @@ -2,7 +2,7 @@ ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "RoRToolkit" -!define PRODUCT_VERSION "0.1.138" +!define PRODUCT_VERSION "0.1.139" !define PRODUCT_PUBLISHER "Thomas Fischer" !define PRODUCT_WEB_SITE "http://wiki.rigsofrods.com/index.php?title=RoRToolkit" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" @@ -196,7 +196,7 @@ WriteRegStr HKCR "RoRRepo" "URL Protocol" "" WriteRegStr HKCR "RoRRepo\shell" "" "" WriteRegStr HKCR "RoRRepo\shell\open" "" "" - WriteRegStr HKCR "RoRRepo\shell\open\command" "" "'$INSTDIR' 'installrepo' '%1'" + WriteRegStr HKCR 'RoRRepo\shell\open\command' '' '"c:\python25\pythonw.exe" "$INSTDIR\tools\modgui.py installrepo" "%1"' Banner::destroy FunctionEnd This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 19:10:40
|
Revision: 138 http://roreditor.svn.sourceforge.net/roreditor/?rev=138&view=rev Author: rorthomas Date: 2007-07-27 12:10:37 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * updated setup version Modified Paths: -------------- trunk/devtools/setup/setup.nsi Modified: trunk/devtools/setup/setup.nsi =================================================================== --- trunk/devtools/setup/setup.nsi 2007-07-27 19:10:06 UTC (rev 137) +++ trunk/devtools/setup/setup.nsi 2007-07-27 19:10:37 UTC (rev 138) @@ -2,7 +2,7 @@ ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "RoRToolkit" -!define PRODUCT_VERSION "r105" +!define PRODUCT_VERSION "0.1.138" !define PRODUCT_PUBLISHER "Thomas Fischer" !define PRODUCT_WEB_SITE "http://wiki.rigsofrods.com/index.php?title=RoRToolkit" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 19:10:12
|
Revision: 137 http://roreditor.svn.sourceforge.net/roreditor/?rev=137&view=rev Author: rorthomas Date: 2007-07-27 12:10:06 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * improved svn script Modified Paths: -------------- trunk/devtools/setup/setup.nsi trunk/lib/ror/svn.py Modified: trunk/devtools/setup/setup.nsi =================================================================== --- trunk/devtools/setup/setup.nsi 2007-07-27 18:27:37 UTC (rev 136) +++ trunk/devtools/setup/setup.nsi 2007-07-27 19:10:06 UTC (rev 137) @@ -55,7 +55,7 @@ !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_FINISHPAGE_RUN -!define MUI_FINISHPAGE_RUN_NOTCHECKED +;!define MUI_FINISHPAGE_RUN_NOTCHECKED !define MUI_FINISHPAGE_RUN_TEXT "Update and start (Can take some time)" !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchPostInstallation" !insertmacro MUI_PAGE_FINISH @@ -78,6 +78,9 @@ ; Reserve files !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS +InstType /NOCUSTOM +InstType "full" +InstType "minimal" ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" @@ -87,7 +90,6 @@ ShowInstDetails show ShowUnInstDetails show - Var /GLOBAL PYOK Var /GLOBAL PYPATH Var /GLOBAL PYINSTALLED @@ -188,13 +190,13 @@ Banner::destroy FunctionEnd -Function InstallRoRRepoReg +Function ChangeRoRRepoReg Banner::show /NOUNLOAD "Updating RoR Repository Protocol Extensions ..." WriteRegStr HKCR "RoRRepo" "" "URL:RoRRepo Protocol" WriteRegStr HKCR "RoRRepo" "URL Protocol" "" WriteRegStr HKCR "RoRRepo\shell" "" "" WriteRegStr HKCR "RoRRepo\shell\open" "" "" - WriteRegStr HKCR "RoRRepo\shell\open\command" "" "'$INSTPATH' 'installrepo' '%1'" + WriteRegStr HKCR "RoRRepo\shell\open\command" "" "'$INSTDIR' 'installrepo' '%1'" Banner::destroy FunctionEnd @@ -207,24 +209,38 @@ !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd -Section "Install Python" SEC01 +Section "-Install Python" SEC01 + SectionIn 1 2 RO Call CheckForPython SectionEnd -Section "Install Tools" SEC02 +Section "Required Tools" SEC02 + SectionIn 1 2 RO Call InstallDirectX +SectionEnd + +Section /o "Optional Tools" SEC03 + SectionIn 1 Call InstallPyWin32 Call InstallPyParsing Call InstallGraphViz - Call ChangeRoRRepoReg SectionEnd -Section "Full Installation" SEC03 +Section "!RoR Toolkit" SEC04 + SectionIn 1 2 RO SetOutPath "$INSTDIR" SetOverwrite try - File /r /x *.pyc /x .svn /x ..\..\tools\3rdparty /x ..\devtools ..\..\* + File /r /x *.pyc /x ..\..\tools\3rdparty /x ..\..\downloaded /x ..\..\graphs /x .. ..\..\* SectionEnd + +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN +!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "installs python 2.5" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "installs required Tools (directX)" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "installs optional Tools (PyWin32 for bugreporting, PyParsing and GraphViz for Dependency Graphs)" +!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "installs the RoR Toolkit. It includes the Truckeditor, Terraineditor and various tools" +!insertmacro MUI_FUNCTION_DESCRIPTION_END + Function "LaunchPostInstallation" ExecWait '"$INSTDIR\update.bat"' ExecWait '"$INSTDIR\rortoolkit.bat"' @@ -241,6 +257,7 @@ SectionEnd Section -Post + Call ChangeRoRRepoReg WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" @@ -273,147 +290,3 @@ DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" SetAutoClose false SectionEnd - -# tools following: -Function AdvReplaceInFile -Exch $0 ;file to replace in -Exch -Exch $1 ;number to replace after -Exch -Exch 2 -Exch $2 ;replace and onwards -Exch 2 -Exch 3 -Exch $3 ;replace with -Exch 3 -Exch 4 -Exch $4 ;to replace -Exch 4 -Push $5 ;minus count -Push $6 ;universal -Push $7 ;end string -Push $8 ;left string -Push $9 ;right string -Push $R0 ;file1 -Push $R1 ;file2 -Push $R2 ;read -Push $R3 ;universal -Push $R4 ;count (onwards) -Push $R5 ;count (after) -Push $R6 ;temp file name - - GetTempFileName $R6 - FileOpen $R1 $0 r ;file to search in - FileOpen $R0 $R6 w ;temp file - StrLen $R3 $4 - StrCpy $R4 -1 - StrCpy $R5 -1 - -loop_read: - ClearErrors - FileRead $R1 $R2 ;read line - IfErrors exit - - StrCpy $5 0 - StrCpy $7 $R2 - -loop_filter: - IntOp $5 $5 - 1 - StrCpy $6 $7 $R3 $5 ;search - StrCmp $6 "" file_write2 - StrCmp $6 $4 0 loop_filter - -StrCpy $8 $7 $5 ;left part -IntOp $6 $5 + $R3 -IntCmp $6 0 is0 not0 -is0: -StrCpy $9 "" -Goto done -not0: -StrCpy $9 $7 "" $6 ;right part -done: -StrCpy $7 $8$3$9 ;re-join - -IntOp $R4 $R4 + 1 -StrCmp $2 all file_write1 -StrCmp $R4 $2 0 file_write2 -IntOp $R4 $R4 - 1 - -IntOp $R5 $R5 + 1 -StrCmp $1 all file_write1 -StrCmp $R5 $1 0 file_write1 -IntOp $R5 $R5 - 1 -Goto file_write2 - -file_write1: - FileWrite $R0 $7 ;write modified line -Goto loop_read - -file_write2: - FileWrite $R0 $R2 ;write unmodified line -Goto loop_read - -exit: - FileClose $R0 - FileClose $R1 - - SetDetailsPrint none - Delete $0 - Rename $R6 $0 - Delete $R6 - SetDetailsPrint both - -Pop $R6 -Pop $R5 -Pop $R4 -Pop $R3 -Pop $R2 -Pop $R1 -Pop $R0 -Pop $9 -Pop $8 -Pop $7 -Pop $6 -Pop $5 -Pop $0 -Pop $1 -Pop $2 -Pop $3 -Pop $4 -FunctionEnd - - -Function StrRep - Exch $R4 ; $R4 = Replacement String - Exch - Exch $R3 ; $R3 = String to replace (needle) - Exch 2 - Exch $R1 ; $R1 = String to do replacement in (haystack) - Push $R2 ; Replaced haystack - Push $R5 ; Len (needle) - Push $R6 ; len (haystack) - Push $R7 ; Scratch reg - StrCpy $R2 "" - StrLen $R5 $R3 - StrLen $R6 $R1 -loop: - StrCpy $R7 $R1 $R5 - StrCmp $R7 $R3 found - StrCpy $R7 $R1 1 ; - optimization can be removed if U know len needle=1 - StrCpy $R2 "$R2$R7" - StrCpy $R1 $R1 $R6 1 - StrCmp $R1 "" done loop -found: - StrCpy $R2 "$R2$R4" - StrCpy $R1 $R1 $R6 $R5 - StrCmp $R1 "" done loop -done: - StrCpy $R3 $R2 - Pop $R7 - Pop $R6 - Pop $R5 - Pop $R2 - Pop $R1 - Pop $R4 - Exch $R3 -FunctionEnd \ No newline at end of file Modified: trunk/lib/ror/svn.py =================================================================== --- trunk/lib/ror/svn.py 2007-07-27 18:27:37 UTC (rev 136) +++ trunk/lib/ror/svn.py 2007-07-27 19:10:06 UTC (rev 137) @@ -80,10 +80,25 @@ # try to restore previous broken updates try: - client.unlock(path) client.cleanup(path) - except: + except Exception, err: + log().error("Error while svn cleanup:") + log().error(str(err)) pass + + try: + client.resolved(path, reverse=True) + except Exception, err: + log().error("Error while svn resolved:") + log().error(str(err)) + pass + + try: + client.unlock(path) + except Exception, err: + log().error("Error while svn unlock:") + log().error(str(err)) + pass revision_before = getRevision(client, path) log().info("updating from revision %d ..." % revision_before) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 18:27:44
|
Revision: 136 http://roreditor.svn.sourceforge.net/roreditor/?rev=136&view=rev Author: rorthomas Date: 2007-07-27 11:27:37 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * removed all .bat files (too much troubles with it...) * fixed some bugs * improved setup Modified Paths: -------------- trunk/devtools/rorrepo.reg trunk/devtools/setup/setup.nsi trunk/lib/ror/starter.py trunk/lib/ror/svngui.py Removed Paths: ------------- trunk/tools/checkmods.bat trunk/tools/depchecker.bat trunk/tools/modtool.bat trunk/tools/postinstall.bat trunk/tools/postinstall.py trunk/tools/update.bat trunk/tools/updaterestart.bat Modified: trunk/devtools/rorrepo.reg =================================================================== --- trunk/devtools/rorrepo.reg 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/devtools/rorrepo.reg 2007-07-27 18:27:37 UTC (rev 136) @@ -9,4 +9,4 @@ [HKEY_CLASSES_ROOT\RoRRepo\shell\open] [HKEY_CLASSES_ROOT\RoRRepo\shell\open\command] -@="\"D:\\projects\\sfproject\\svn\\trunk\\modtool.bat\" \"installrepo\" \"%1\"" \ No newline at end of file +@="\"c:\\roryoolkit\\tools\\modtool.py\" \"installrepo\" \"%1\"" \ No newline at end of file Modified: trunk/devtools/setup/setup.nsi =================================================================== --- trunk/devtools/setup/setup.nsi 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/devtools/setup/setup.nsi 2007-07-27 18:27:37 UTC (rev 136) @@ -42,6 +42,8 @@ !insertmacro MUI_PAGE_WELCOME ; License page !insertmacro MUI_PAGE_LICENSE "readme-installer.txt" +; Components page +!insertmacro MUI_PAGE_COMPONENTS ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page @@ -85,6 +87,7 @@ ShowInstDetails show ShowUnInstDetails show + Var /GLOBAL PYOK Var /GLOBAL PYPATH Var /GLOBAL PYINSTALLED @@ -186,18 +189,18 @@ FunctionEnd Function InstallRoRRepoReg - InitPluginsDir - File /oname=$PLUGINSDIR\graphviz-2.12.exe "..\rorrepo.reg" - Banner::show /NOUNLOAD "Installing RoR Repository Protocol Extensions ..." - ExecWait '"regedit /s $PLUGINSDIR\rorrepo.reg"' - Delete $PLUGINSDIR\rorrepo.reg - Banner::destroy + Banner::show /NOUNLOAD "Updating RoR Repository Protocol Extensions ..." + WriteRegStr HKCR "RoRRepo" "" "URL:RoRRepo Protocol" + WriteRegStr HKCR "RoRRepo" "URL Protocol" "" + WriteRegStr HKCR "RoRRepo\shell" "" "" + WriteRegStr HKCR "RoRRepo\shell\open" "" "" + WriteRegStr HKCR "RoRRepo\shell\open\command" "" "'$INSTPATH' 'installrepo' '%1'" + Banner::destroy FunctionEnd - Function .onInit InitPluginsDir - File /oname=$PLUGINSDIR\..bmp "splash.bmp" + File /oname=$PLUGINSDIR\splash.bmp "splash.bmp" advsplash::show 1000 1300 600 -1 $PLUGINSDIR\splash Pop $0 Delete $PLUGINSDIR\splash.bmp @@ -213,13 +216,13 @@ Call InstallPyWin32 Call InstallPyParsing Call InstallGraphViz - Call InstallRoRRepoReg + Call ChangeRoRRepoReg SectionEnd Section "Full Installation" SEC03 SetOutPath "$INSTDIR" SetOverwrite try - File "/r" "..\..\*" + File /r /x *.pyc /x .svn /x ..\..\tools\3rdparty /x ..\devtools ..\..\* SectionEnd Function "LaunchPostInstallation" @@ -269,4 +272,148 @@ DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" SetAutoClose false -SectionEnd \ No newline at end of file +SectionEnd + +# tools following: +Function AdvReplaceInFile +Exch $0 ;file to replace in +Exch +Exch $1 ;number to replace after +Exch +Exch 2 +Exch $2 ;replace and onwards +Exch 2 +Exch 3 +Exch $3 ;replace with +Exch 3 +Exch 4 +Exch $4 ;to replace +Exch 4 +Push $5 ;minus count +Push $6 ;universal +Push $7 ;end string +Push $8 ;left string +Push $9 ;right string +Push $R0 ;file1 +Push $R1 ;file2 +Push $R2 ;read +Push $R3 ;universal +Push $R4 ;count (onwards) +Push $R5 ;count (after) +Push $R6 ;temp file name + + GetTempFileName $R6 + FileOpen $R1 $0 r ;file to search in + FileOpen $R0 $R6 w ;temp file + StrLen $R3 $4 + StrCpy $R4 -1 + StrCpy $R5 -1 + +loop_read: + ClearErrors + FileRead $R1 $R2 ;read line + IfErrors exit + + StrCpy $5 0 + StrCpy $7 $R2 + +loop_filter: + IntOp $5 $5 - 1 + StrCpy $6 $7 $R3 $5 ;search + StrCmp $6 "" file_write2 + StrCmp $6 $4 0 loop_filter + +StrCpy $8 $7 $5 ;left part +IntOp $6 $5 + $R3 +IntCmp $6 0 is0 not0 +is0: +StrCpy $9 "" +Goto done +not0: +StrCpy $9 $7 "" $6 ;right part +done: +StrCpy $7 $8$3$9 ;re-join + +IntOp $R4 $R4 + 1 +StrCmp $2 all file_write1 +StrCmp $R4 $2 0 file_write2 +IntOp $R4 $R4 - 1 + +IntOp $R5 $R5 + 1 +StrCmp $1 all file_write1 +StrCmp $R5 $1 0 file_write1 +IntOp $R5 $R5 - 1 +Goto file_write2 + +file_write1: + FileWrite $R0 $7 ;write modified line +Goto loop_read + +file_write2: + FileWrite $R0 $R2 ;write unmodified line +Goto loop_read + +exit: + FileClose $R0 + FileClose $R1 + + SetDetailsPrint none + Delete $0 + Rename $R6 $0 + Delete $R6 + SetDetailsPrint both + +Pop $R6 +Pop $R5 +Pop $R4 +Pop $R3 +Pop $R2 +Pop $R1 +Pop $R0 +Pop $9 +Pop $8 +Pop $7 +Pop $6 +Pop $5 +Pop $0 +Pop $1 +Pop $2 +Pop $3 +Pop $4 +FunctionEnd + + +Function StrRep + Exch $R4 ; $R4 = Replacement String + Exch + Exch $R3 ; $R3 = String to replace (needle) + Exch 2 + Exch $R1 ; $R1 = String to do replacement in (haystack) + Push $R2 ; Replaced haystack + Push $R5 ; Len (needle) + Push $R6 ; len (haystack) + Push $R7 ; Scratch reg + StrCpy $R2 "" + StrLen $R5 $R3 + StrLen $R6 $R1 +loop: + StrCpy $R7 $R1 $R5 + StrCmp $R7 $R3 found + StrCpy $R7 $R1 1 ; - optimization can be removed if U know len needle=1 + StrCpy $R2 "$R2$R7" + StrCpy $R1 $R1 $R6 1 + StrCmp $R1 "" done loop +found: + StrCpy $R2 "$R2$R4" + StrCpy $R1 $R1 $R6 $R5 + StrCmp $R1 "" done loop +done: + StrCpy $R3 $R2 + Pop $R7 + Pop $R6 + Pop $R5 + Pop $R2 + Pop $R1 + Pop $R4 + Exch $R3 +FunctionEnd \ No newline at end of file Modified: trunk/lib/ror/starter.py =================================================================== --- trunk/lib/ror/starter.py 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/lib/ror/starter.py 2007-07-27 18:27:37 UTC (rev 136) @@ -127,7 +127,7 @@ def OnDepGraph(self, event=None): import ror.depchecker ror.depchecker.RoRDepChecker(self.rordir, "all", "") - file = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..\\..\\graphs\\alldependencies.png")) + file = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "graphs", "alldependencies.png")) #print file if os.path.isfile(file): dlg = wx.MessageDialog(self, "Graph successfully created:\n"+file, "Info", wx.OK | wx.ICON_INFORMATION) @@ -135,6 +135,10 @@ dlg.Destroy() cmd = file p = subprocess.Popen(cmd, shell = True, stderr = subprocess.PIPE, stdout = subprocess.PIPE) + else: + dlg = wx.MessageDialog(self, "Graph creation failed :(", "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() def OnUpdate(self, event=None): Modified: trunk/lib/ror/svngui.py =================================================================== --- trunk/lib/ror/svngui.py 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/lib/ror/svngui.py 2007-07-27 18:27:37 UTC (rev 136) @@ -23,8 +23,7 @@ del self.pr def restart(self): - path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"..\\..")) - path = os.path.join(path, "updaterestart.bat") + path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "tools", "updaterestart.py")) log().info("restarting ...") p = Popen(path, shell = True) sys.exit(0) Deleted: trunk/tools/checkmods.bat =================================================================== --- trunk/tools/checkmods.bat 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/tools/checkmods.bat 2007-07-27 18:27:37 UTC (rev 136) @@ -1,2 +0,0 @@ -...@po...t checkmods -@%systemdrive%\python25\python.exe checkmods.py %* \ No newline at end of file Deleted: trunk/tools/depchecker.bat =================================================================== --- trunk/tools/depchecker.bat 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/tools/depchecker.bat 2007-07-27 18:27:37 UTC (rev 136) @@ -1,2 +0,0 @@ -...@po...t depchecker -@%systemdrive%\python25\python.exe depchecker.py %* \ No newline at end of file Deleted: trunk/tools/modtool.bat =================================================================== --- trunk/tools/modtool.bat 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/tools/modtool.bat 2007-07-27 18:27:37 UTC (rev 136) @@ -1,2 +0,0 @@ -...@po...t modtool -@%systemdrive%\python25\python.exe modtool.py %* \ No newline at end of file Deleted: trunk/tools/postinstall.bat =================================================================== --- trunk/tools/postinstall.bat 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/tools/postinstall.bat 2007-07-27 18:27:37 UTC (rev 136) @@ -1 +0,0 @@ -@%systemdrive%\python25\python.exe postinstall.py %* \ No newline at end of file Deleted: trunk/tools/postinstall.py =================================================================== --- trunk/tools/postinstall.py 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/tools/postinstall.py 2007-07-27 18:27:37 UTC (rev 136) @@ -1,40 +0,0 @@ -import sys, os, os.path, subprocess - -def getBATFiles(): - batfiles = [] - dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)))) - for filename in os.listdir(dir): - filenameonly, extension = os.path.splitext(filename) - if extension.lower() == ".bat": - batfiles.append(os.path.join(dir, filename)) - return batfiles - -def saveFile(filename, lines): - f = open(filename, 'w') - f.writelines(lines) - f.close() - -def addPath(filename, installpath): - basename = os.path.basename(filename) - filenameonly, extension = os.path.splitext(basename) - - # with console - thispath = os.path.join(installpath, filenameonly+".py") - pythonpath = "%systemdrive%\python25\python.exe" - if not os.path.isfile(thispath): - # without console - thispath = os.path.join(installpath, filenameonly+".pyw") - pythonpath = "%systemdrive%\python25\pythonw.exe" - content = ["@%s %s %%*" % (pythonpath, thispath)] - saveFile(filename, content) - -def main(): - installpath = os.path.dirname(os.path.abspath(__file__)) - for batfile in getBATFiles(): - addPath(batfile, installpath) - print "Post-Installed all .bat files, please restart the program now!" - cmd = os.path.join(installpath, sys.argv[1]+".bat") - subprocess.Popen(cmd, shell = True) - -if __name__=="__main__": - main() Deleted: trunk/tools/update.bat =================================================================== --- trunk/tools/update.bat 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/tools/update.bat 2007-07-27 18:27:37 UTC (rev 136) @@ -1,2 +0,0 @@ -...@po...t update -@%systemdrive%\python25\python.exe update.py %* \ No newline at end of file Deleted: trunk/tools/updaterestart.bat =================================================================== --- trunk/tools/updaterestart.bat 2007-07-27 13:11:52 UTC (rev 135) +++ trunk/tools/updaterestart.bat 2007-07-27 18:27:37 UTC (rev 136) @@ -1,2 +0,0 @@ -...@po...t updaterestart -@%systemdrive%\python25\python.exe updaterestart.py %* \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 13:11:53
|
Revision: 135 http://roreditor.svn.sourceforge.net/roreditor/?rev=135&view=rev Author: rorthomas Date: 2007-07-27 06:11:52 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * corrected postinstall * setup changed, but not finished yet Modified Paths: -------------- trunk/devtools/setup/setup.nsi trunk/tools/postinstall.py Modified: trunk/devtools/setup/setup.nsi =================================================================== --- trunk/devtools/setup/setup.nsi 2007-07-27 13:01:34 UTC (rev 134) +++ trunk/devtools/setup/setup.nsi 2007-07-27 13:11:52 UTC (rev 135) @@ -185,7 +185,16 @@ Banner::destroy FunctionEnd +Function InstallRoRRepoReg + InitPluginsDir + File /oname=$PLUGINSDIR\graphviz-2.12.exe "..\rorrepo.reg" + Banner::show /NOUNLOAD "Installing RoR Repository Protocol Extensions ..." + ExecWait '"regedit /s $PLUGINSDIR\rorrepo.reg"' + Delete $PLUGINSDIR\rorrepo.reg + Banner::destroy +FunctionEnd + Function .onInit InitPluginsDir File /oname=$PLUGINSDIR\..bmp "splash.bmp" @@ -204,6 +213,7 @@ Call InstallPyWin32 Call InstallPyParsing Call InstallGraphViz + Call InstallRoRRepoReg SectionEnd Section "Full Installation" SEC03 Modified: trunk/tools/postinstall.py =================================================================== --- trunk/tools/postinstall.py 2007-07-27 13:01:34 UTC (rev 134) +++ trunk/tools/postinstall.py 2007-07-27 13:11:52 UTC (rev 135) @@ -2,7 +2,7 @@ def getBATFiles(): batfiles = [] - dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) + dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)))) for filename in os.listdir(dir): filenameonly, extension = os.path.splitext(filename) if extension.lower() == ".bat": This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-07-27 13:01:37
|
Revision: 134 http://roreditor.svn.sourceforge.net/roreditor/?rev=134&view=rev Author: rorthomas Date: 2007-07-27 06:01:34 -0700 (Fri, 27 Jul 2007) Log Message: ----------- * removed main.bat files * moved modtool to tools * moved terraineditor readme Modified Paths: -------------- trunk/lib/rorterraineditor/HelpFrame.py trunk/tools/postinstall.py Added Paths: ----------- trunk/lib/rorterraineditor/terrainreadme.txt trunk/tools/modtool.bat trunk/tools/modtool.py Removed Paths: ------------- trunk/modtool.bat trunk/modtool.py trunk/rortoolkit.bat trunk/terraineditor.bat trunk/terrainreadme.txt trunk/truckeditor.bat Modified: trunk/lib/rorterraineditor/HelpFrame.py =================================================================== --- trunk/lib/rorterraineditor/HelpFrame.py 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/lib/rorterraineditor/HelpFrame.py 2007-07-27 13:01:34 UTC (rev 134) @@ -8,7 +8,7 @@ self.btnExit = wx.Button(self, wx.ID_ANY, "OK") self.Bind(wx.EVT_BUTTON, self.onExit , self.btnExit) self.__do_layout() - self.filename = "terrainreadme.txt" + self.filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), "terrainreadme.txt") self.LoadHelp() def LoadHelp(self): Added: trunk/lib/rorterraineditor/terrainreadme.txt =================================================================== --- trunk/lib/rorterraineditor/terrainreadme.txt (rev 0) +++ trunk/lib/rorterraineditor/terrainreadme.txt 2007-07-27 13:01:34 UTC (rev 134) @@ -0,0 +1,41 @@ +============================================================ +Short Introduction / Help +============================================================ +A move left +D move right +W move foreward +S move backward +PAGEUP move up +PAGEDOWN move down +SHIFT + above keys = faster movement + + +Mousewheel in Main Viewport: zoom in/out (like forward/backward) +Mousewheel int objects view lower viewport: zoom in/out + + +drag: rightklick: look around +drag: control + rightclick move to the side and up and down +if selected an object: control + leftclick positions that object at the pointed terrain + + +P print position of the camera to the console +Q switch between object rotation and translation + (Please note, that trucks and loads cannot be rotated) +T switch between bilinear and trilinear filtering +R switch between solid, wireframe and point mode + +History Functions: +F undo last movement/rotation +G redo last undo + +============================================================ +How To Add Things +============================================================ +1. select a place on the terrain with leftclick, a red circle should appear. +2. add a truck or mesh using the "Add" menu. + +============================================================ +Tips and Tricks +============================================================ +* If you want to select an object behind another object, just left-click twice on the foreground object to select the background one. \ No newline at end of file Deleted: trunk/modtool.bat =================================================================== --- trunk/modtool.bat 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/modtool.bat 2007-07-27 13:01:34 UTC (rev 134) @@ -1,2 +0,0 @@ -...@po...t modtool -@%systemdrive%\python25\python.exe modtool.py %* \ No newline at end of file Deleted: trunk/modtool.py =================================================================== --- trunk/modtool.py 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/modtool.py 2007-07-27 13:01:34 UTC (rev 134) @@ -1,86 +0,0 @@ -#Thomas Fischer 31/05/2007, th...@th... -import sys, os, os.path, shutil - -sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) - -def usage(): - print "usage (general): %s <mode> <additionaloptions> [--verbose] [--dryrun]" % (os.path.basename(sys.argv[0])) - print "list <filename>" - print " list all found and valid modifications in filename" - print "" - print "listall <filename> --verbose" - print " list all found modifications in filename (valid and invalid)" - print "" - print "installall <filename> --verbose --dryrun" - print " install all found modifications in filename" - print "" - print "installrepo <filename> --verbose --dryrun" - print " install all found modifications in filename that is downloaded from the repository" - print "" - print "install <filename> <modification> --verbose --dryrun" - print " install a certain modifications in filename (valid and invalid)" - print "" - print "listinstalled" - print " lists all installed RoR Mods" - print "" - print "uninstall <modname> --verbose --dryrun" - print " uninstalls a mod" - print "" - print "notes: the --verbose option is optional to increase the output for debugging" - print " the --dryrun option is optional and prints out what would be done" - sys.exit(0) - -def main(): - # check for valid RoR Directory! - import ror.settingsManager - rorpath = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isfile(os.path.join(rorpath,"RoR.exe")): - import ror.starter - ror.starter.startApp() - - if len(sys.argv) < 2: - usage() - - mode = sys.argv[1] - if not mode in ['list', 'listall', 'install', 'installall', 'listinstalled','uninstall', 'installrepo']: - usage() - if len(sys.argv) < 4 and mode in ['install']: - usage() - - if mode in ['list', 'listall', 'install', 'installall']: - targetfile = sys.argv[2] - if not os.path.isfile(targetfile): - log().error("%s is not a valid target filename!" % targetfile) - usage() - elif mode in ['listinstalled']: - targetfile = rorpath - elif mode in ['installrepo']: - targetfile = sys.argv[2] - elif mode == 'uninstall': - targetfile = sys.argv[2] - - # get optional flags - verbose = False - dryrun = False - for option in sys.argv: - if option == "--verbose": - verbose = True - if option == "--dryrun": - dryrun = True - - # Import Psyco if available - try: - import psyco - psyco.full() - except ImportError: - pass - - if len(sys.argv) == 4: - installtarget = sys.argv[3] - else: - installtarget = None - import ror.modtool - ror.modtool.ModTool().work(mode, targetfile, verbose, dryrun, installtarget) - -if __name__=="__main__": - main() Deleted: trunk/rortoolkit.bat =================================================================== --- trunk/rortoolkit.bat 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/rortoolkit.bat 2007-07-27 13:01:34 UTC (rev 134) @@ -1,2 +0,0 @@ -@tools\postinstall.bat rortoolkit -@%systemdrive%\python25\pythonw.exe rortoolkit.pyw %* \ No newline at end of file Deleted: trunk/terraineditor.bat =================================================================== --- trunk/terraineditor.bat 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/terraineditor.bat 2007-07-27 13:01:34 UTC (rev 134) @@ -1,2 +0,0 @@ -...@po...t terraineditor -@%systemdrive%\python25\pythonw.exe terraineditor.pyw %* \ No newline at end of file Deleted: trunk/terrainreadme.txt =================================================================== --- trunk/terrainreadme.txt 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/terrainreadme.txt 2007-07-27 13:01:34 UTC (rev 134) @@ -1,41 +0,0 @@ -============================================================ -Short Introduction / Help -============================================================ -A move left -D move right -W move foreward -S move backward -PAGEUP move up -PAGEDOWN move down -SHIFT + above keys = faster movement - - -Mousewheel in Main Viewport: zoom in/out (like forward/backward) -Mousewheel int objects view lower viewport: zoom in/out - - -drag: rightklick: look around -drag: control + rightclick move to the side and up and down -if selected an object: control + leftclick positions that object at the pointed terrain - - -P print position of the camera to the console -Q switch between object rotation and translation - (Please note, that trucks and loads cannot be rotated) -T switch between bilinear and trilinear filtering -R switch between solid, wireframe and point mode - -History Functions: -F undo last movement/rotation -G redo last undo - -============================================================ -How To Add Things -============================================================ -1. select a place on the terrain with leftclick, a red circle should appear. -2. add a truck or mesh using the "Add" menu. - -============================================================ -Tips and Tricks -============================================================ -* If you want to select an object behind another object, just left-click twice on the foreground object to select the background one. \ No newline at end of file Added: trunk/tools/modtool.bat =================================================================== --- trunk/tools/modtool.bat (rev 0) +++ trunk/tools/modtool.bat 2007-07-27 13:01:34 UTC (rev 134) @@ -0,0 +1,2 @@ +...@po...t modtool +@%systemdrive%\python25\python.exe modtool.py %* \ No newline at end of file Added: trunk/tools/modtool.py =================================================================== --- trunk/tools/modtool.py (rev 0) +++ trunk/tools/modtool.py 2007-07-27 13:01:34 UTC (rev 134) @@ -0,0 +1,86 @@ +#Thomas Fischer 31/05/2007, th...@th... +import sys, os, os.path, shutil + +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib")) + +def usage(): + print "usage (general): %s <mode> <additionaloptions> [--verbose] [--dryrun]" % (os.path.basename(sys.argv[0])) + print "list <filename>" + print " list all found and valid modifications in filename" + print "" + print "listall <filename> --verbose" + print " list all found modifications in filename (valid and invalid)" + print "" + print "installall <filename> --verbose --dryrun" + print " install all found modifications in filename" + print "" + print "installrepo <filename> --verbose --dryrun" + print " install all found modifications in filename that is downloaded from the repository" + print "" + print "install <filename> <modification> --verbose --dryrun" + print " install a certain modifications in filename (valid and invalid)" + print "" + print "listinstalled" + print " lists all installed RoR Mods" + print "" + print "uninstall <modname> --verbose --dryrun" + print " uninstalls a mod" + print "" + print "notes: the --verbose option is optional to increase the output for debugging" + print " the --dryrun option is optional and prints out what would be done" + sys.exit(0) + +def main(): + # check for valid RoR Directory! + import ror.settingsManager + rorpath = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isfile(os.path.join(rorpath,"RoR.exe")): + import ror.starter + ror.starter.startApp() + + if len(sys.argv) < 2: + usage() + + mode = sys.argv[1] + if not mode in ['list', 'listall', 'install', 'installall', 'listinstalled','uninstall', 'installrepo']: + usage() + if len(sys.argv) < 4 and mode in ['install']: + usage() + + if mode in ['list', 'listall', 'install', 'installall']: + targetfile = sys.argv[2] + if not os.path.isfile(targetfile): + log().error("%s is not a valid target filename!" % targetfile) + usage() + elif mode in ['listinstalled']: + targetfile = rorpath + elif mode in ['installrepo']: + targetfile = sys.argv[2] + elif mode == 'uninstall': + targetfile = sys.argv[2] + + # get optional flags + verbose = False + dryrun = False + for option in sys.argv: + if option == "--verbose": + verbose = True + if option == "--dryrun": + dryrun = True + + # Import Psyco if available + try: + import psyco + psyco.full() + except ImportError: + pass + + if len(sys.argv) == 4: + installtarget = sys.argv[3] + else: + installtarget = None + import ror.modtool + ror.modtool.ModTool().work(mode, targetfile, verbose, dryrun, installtarget) + +if __name__=="__main__": + main() Modified: trunk/tools/postinstall.py =================================================================== --- trunk/tools/postinstall.py 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/tools/postinstall.py 2007-07-27 13:01:34 UTC (rev 134) @@ -17,10 +17,14 @@ def addPath(filename, installpath): basename = os.path.basename(filename) filenameonly, extension = os.path.splitext(basename) + + # with console thispath = os.path.join(installpath, filenameonly+".py") + pythonpath = "%systemdrive%\python25\python.exe" if not os.path.isfile(thispath): + # without console thispath = os.path.join(installpath, filenameonly+".pyw") - pythonpath = "%systemdrive%\python25\pythonw.exe" + pythonpath = "%systemdrive%\python25\pythonw.exe" content = ["@%s %s %%*" % (pythonpath, thispath)] saveFile(filename, content) Deleted: trunk/truckeditor.bat =================================================================== --- trunk/truckeditor.bat 2007-07-27 12:51:32 UTC (rev 133) +++ trunk/truckeditor.bat 2007-07-27 13:01:34 UTC (rev 134) @@ -1,2 +0,0 @@ -@tools\postinstall.bat truckeditor -@%systemdrive%\python25\pythonw.exe truckeditor.pyw %* \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |