chiark / gitweb /
Some more new UI updates. Not functional yet.
authordaid <daid303@gmail.com>
Mon, 20 Feb 2012 15:44:43 +0000 (16:44 +0100)
committerdaid <daid303@gmail.com>
Mon, 20 Feb 2012 15:44:43 +0000 (16:44 +0100)
UI no longer crashes if you don't have PyOpenGL.
Start of UI using skeinforge settings.

SkeinPyPy_NewUI/fabmetheus_utilities/settings.py
SkeinPyPy_NewUI/newui/mainWindow.py
SkeinPyPy_NewUI/newui/preview3d.py
SkeinPyPy_NewUI/skeinforge_application/skeinforge_utilities/skeinforge_profile.py

index 802994b138f3e63bb0b5ab84d2c8071b8fbd4e7e..ab7fb5bfb6dd8464bfc06186736f77b4e1f82fcc 100644 (file)
@@ -14,7 +14,7 @@ def loadGlobalConfig(filename):
        "Read a configuration file as global config"
        global globalConfigParser
        globalConfigParser = ConfigParser.ConfigParser()
-       print globalConfigParser.read(filename)
+       globalConfigParser.read(filename)
 
 def getDefaultConfigPath():
        return os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../current_config.ini"))
@@ -29,7 +29,7 @@ def getReadRepository(repository):
        if not globals().has_key('globalConfigParser'):
                loadGlobalConfig(getDefaultConfigPath())
        
-       print('getReadRepository:', repository.name)
+       #print('getReadRepository:', repository.name)
        for p in repository.preferences:
                try:
                        p.setValueToString(globalConfigParser.get(repository.name, safeConfigName(p.name)))
@@ -102,7 +102,7 @@ class RadioCapitalizedButton( Radio ):
        "Only used for the extra export options, which we are not using, so ignore the path for now"
        def getFromPath( self, latentStringVar, name, path, repository, value ):
                "Initialize."
-               print('RadioCapitalizedButton->getFromPath:', latentStringVar, name, path, repository, value )
+               #print('RadioCapitalizedButton->getFromPath:', latentStringVar, name, path, repository, value )
                self.name = name
                self.value = value
                repository.preferences.append(self)
@@ -112,7 +112,6 @@ class FileNameInput(StringSetting ):
        "A class to display, read & write a fileName."
        def getFromFileName( self, fileTypes, name, repository, value ):
                #print('FileNameInput:getFromFileName:', self, fileTypes, name, repository, value )
-               repository.preferences.append(self)
                self.name = name
                self.value = value
                return self
@@ -151,7 +150,7 @@ class MenuRadio( BooleanSetting ):
        "A class to display, read & write a boolean with associated combo box selection."
        def getFromMenuButtonDisplay( self, menuButtonDisplay, name, repository, value ):
                "Initialize."
-               print('MenuRadio->getFromMenuButtonDisplay:', menuButtonDisplay, name, repository, value )
+               #print('MenuRadio->getFromMenuButtonDisplay:', menuButtonDisplay, name, repository, value )
                self.name = name
                self.value = value
                menuButtonDisplay.addRadio(self, value)
index fa47d244fc6ef997d14e6047cfd0f5d16fefaa1d..a74d7fe5c660d8fce2535d4396416b6ae7cd84c1 100644 (file)
@@ -4,6 +4,9 @@ import __init__
 import wx
 
 from newui import preview3d
+from fabmetheus_utilities import archive
+from fabmetheus_utilities import settings
+from skeinforge_application.skeinforge_utilities import skeinforge_profile
 
 def main():
        app = wx.App(False)
@@ -21,13 +24,38 @@ class mainWindow(wx.Frame):
                menubar.Append(wx.Menu(), 'Expert')
                self.SetMenuBar(menubar)
                
+               plugins = {}
+               for m in skeinforge_profile.getCraftTypePluginModule().getCraftSequence():
+                       plugins[m] = archive.getModuleWithDirectoryPath(archive.getCraftPluginsDirectoryPath(), m).getNewRepository()
+                       settings.getReadRepository(plugins[m])
+               
                p = wx.Panel(self)
-               nb = wx.Notebook(p, size=(400,10))
+               nb = wx.Notebook(p, size=(500,10))
                
                printConfig = wx.Panel(nb);
-               wx.StaticText(printConfig, -1, "Test", (20,20))
+
+               sizer = wx.GridBagSizer(2, 2)
+               printConfig.SetSizer(sizer)
+
+               for pluginName in plugins.keys():
+                       box, configPanel = self.CreateGroup(printConfig, pluginName)
+                       sizer.Add(box, (sizer.GetRows(),0))
+                       sizer.SetRows(sizer.GetRows()+1)
+                       
+                       for pref in plugins[pluginName].preferences:
+                               self.AddSetting(configPanel, pref.name, wx.TextCtrl(configPanel, -1, str(pref)))
+               
+               #self.AddSetting(generalConfig, "Speed (mm/s)", wx.TextCtrl(generalConfig, -1, "50.0"))
+
+               machineConfig = wx.Panel(nb);
+               sizer = wx.GridBagSizer(2, 2)
+               machineConfig.SetSizer(sizer)
+               box, dimensionsConfig = self.CreateGroup(machineConfig, "Dimensions")
+               self.AddSetting(dimensionsConfig, "Printer size (mm)", wx.TextCtrl(dimensionsConfig, -1, "205,205,200"))
+               sizer.Add(box, (0,0))
+               
                nb.AddPage(printConfig, "Print")
-               nb.AddPage(wx.Panel(nb), "Machine")
+               nb.AddPage(machineConfig, "Machine")
                nb.AddPage(wx.Panel(nb), "Start/End-GCode")
 
                p3d = preview3d.myGLCanvas(p)
@@ -36,7 +64,7 @@ class mainWindow(wx.Frame):
                
                sizer = wx.GridBagSizer()
                sizer.Add(nb, (0,0), span=(2,1), flag=wx.EXPAND)
-               sizer.Add(p3d, (0,1), flag=wx.EXPAND)
+               sizer.Add(p3d, (0,1), span=(1,1), flag=wx.EXPAND)
                sizer.Add(loadButton, (1,1))
                sizer.AddGrowableCol(1)
                sizer.AddGrowableRow(0)
@@ -48,6 +76,23 @@ class mainWindow(wx.Frame):
                self.Centre()
                self.Show(True)
        
+       def CreateGroup(self, panel, name):
+               retPanel = wx.Panel(panel)
+               sizer = wx.GridBagSizer(2, 2)
+               retPanel.SetSizer(sizer)
+
+               box = wx.StaticBox(panel, -1, name)
+               sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
+               sizer.Add(retPanel)
+               
+               return (sizer, retPanel)
+       
+       def AddSetting(self, panel, name, ctrl):
+               sizer = panel.GetSizer()
+               sizer.Add(wx.StaticText(panel, -1, name), (sizer.GetRows(),0), flag=wx.ALIGN_BOTTOM)
+               sizer.Add(ctrl, (sizer.GetRows(),1), flag=wx.ALIGN_BOTTOM|wx.EXPAND)
+               sizer.SetRows(sizer.GetRows()+1)
+       
        def OnQuit(self, e):
                self.Close()
 
index c8f50aa1cbd881ced08b59e429d9e2daf5933309..33ebb649179fe1feb846f4def2f6f26059cd47b5 100644 (file)
@@ -1,35 +1,45 @@
-from wxPython.glcanvas import wxGLCanvas\r
-from wxPython.wx import *\r
-from OpenGL.GLUT import *\r
-from OpenGL.GLU import *\r
-from OpenGL.GL import *\r
+#from wxPython.glcanvas import wxGLCanvas\r
+import wx\r
 import sys,math\r
 \r
+from wx.glcanvas import GLCanvas\r
+try:\r
+       from OpenGL.GLUT import *\r
+       from OpenGL.GLU import *\r
+       from OpenGL.GL import *\r
+       hasOpenGLlibs = True\r
+except:\r
+       print "Failed to find PyOpenGL: http://pyopengl.sourceforge.net/"\r
+       hasOpenGLlibs = False\r
+\r
 from fabmetheus_utilities.fabmetheus_tools import fabmetheus_interpret\r
 from fabmetheus_utilities.vector3 import Vector3\r
 \r
-class myGLCanvas(wxGLCanvas):\r
+class myGLCanvas(GLCanvas):\r
        def __init__(self, parent):\r
-               wxGLCanvas.__init__(self, parent,-1)\r
-               EVT_PAINT(self, self.OnPaint)\r
-               EVT_SIZE(self, self.OnSize)\r
-               EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)\r
-               EVT_MOTION(self, self.OnMouseMotion)\r
+               GLCanvas.__init__(self, parent,-1)\r
+               wx.EVT_PAINT(self, self.OnPaint)\r
+               wx.EVT_SIZE(self, self.OnSize)\r
+               wx.EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)\r
+               wx.EVT_MOTION(self, self.OnMouseMotion)\r
                self.init = 0\r
                self.triangleMesh = None\r
-               self.yaw = 0\r
-               self.pitch = 80\r
+               self.yaw = 30\r
+               self.pitch = 60\r
                self.zoom = 150\r
                self.machineSize = Vector3(210, 210, 200)\r
                self.machineCenter = Vector3(100, 100, 0)\r
-               return\r
        \r
        def loadFile(self, filename):\r
                self.triangleMesh = fabmetheus_interpret.getCarving(filename)\r
                minZ = self.triangleMesh.getMinimumZ()\r
                min = self.triangleMesh.getCarveCornerMinimum()\r
                max = self.triangleMesh.getCarveCornerMaximum()\r
+               self.moveModel()\r
                \r
+       def moveModel():\r
+               if self.triangleMesh == None:\r
+                       return\r
                for v in self.triangleMesh.vertexes:\r
                        v.z -= minZ\r
                        v.x -= min.x + (max.x - min.x) / 2\r
@@ -40,7 +50,7 @@ class myGLCanvas(wxGLCanvas):
        def OnMouseMotion(self,e):\r
                if e.Dragging() and e.LeftIsDown():\r
                        self.yaw += e.GetX() - self.oldX\r
-                       self.pitch += e.GetY() - self.oldY\r
+                       self.pitch -= e.GetY() - self.oldY\r
                        if self.pitch > 170:\r
                                self.pitch = 170\r
                        if self.pitch < 10:\r
@@ -59,7 +69,11 @@ class myGLCanvas(wxGLCanvas):
                return\r
 \r
        def OnPaint(self,event):\r
-               dc = wxPaintDC(self)\r
+               dc = wx.PaintDC(self)\r
+               if not hasOpenGLlibs:\r
+                       dc.Clear()\r
+                       dc.DrawText("No PyOpenGL installation found.\nNo preview window available.", 10, 10)\r
+                       return\r
                self.SetCurrent()\r
                self.InitGL()\r
                self.OnDraw()\r
index b26a2087128af56d8b7ef5fcc2524dbcd6759eee..fbdc972ddb783903526f3075443815ed61dfb46e 100644 (file)
@@ -18,7 +18,7 @@ def getProfileName(craftTypeName):
        return 'SkeinPyPy profile:' + craftTypeName
 
 def addListsToCraftTypeRepository(fileNameHelp, repository):
-    print('addListsToCraftTypeRepository:', fileNameHelp, repository)
+    #print('addListsToCraftTypeRepository:', fileNameHelp, repository)
     repository.name = fileNameHelp.split('.')[-2]
     repository.preferences = []