chiark / gitweb /
Added support for drag&drop files into Cura.
authordaid <daid303@gmail.com>
Tue, 3 Jul 2012 12:46:56 +0000 (14:46 +0200)
committerdaid <daid303@gmail.com>
Tue, 3 Jul 2012 12:46:56 +0000 (14:46 +0200)
Cura/gui/batchRun.py
Cura/gui/dropTarget.py [new file with mode: 0644]
Cura/gui/mainWindow.py
Cura/gui/projectPlanner.py

index f8c7f2f3a7c9fc0d92bb590afc2b4f026dcd0862..db80d315466cb0f72bc57ceddaf0cb8db8b660f3 100644 (file)
@@ -5,6 +5,7 @@ import wx, os, platform, types, webbrowser, math, subprocess, multiprocessing, t
 
 from util import profile
 from util import sliceRun
+from gui import dropTarget
 
 class batchRunWindow(wx.Frame):
        def __init__(self, parent):
@@ -12,6 +13,8 @@ class batchRunWindow(wx.Frame):
                
                self.list = []
                
+               self.SetDropTarget(dropTarget.FileDropTarget(self.OnDropFiles, '.stl'))
+               
                wx.EVT_CLOSE(self, self.OnClose)
                self.panel = wx.Panel(self, -1)
                self.SetSizer(wx.BoxSizer(wx.VERTICAL))
@@ -50,6 +53,13 @@ class batchRunWindow(wx.Frame):
                                self._updateListbox()
                dlg.Destroy()
        
+       def OnDropFiles(self, filenames):
+               for filename in filenames:
+                       profile.putPreference('lastFile', filename)
+                       self.list.append(filename)
+                       self.selection = filename
+                       self._updateListbox()
+
        def OnRemModel(self, e):
                if self.selection == None:
                        return
diff --git a/Cura/gui/dropTarget.py b/Cura/gui/dropTarget.py
new file mode 100644 (file)
index 0000000..0c89fd0
--- /dev/null
@@ -0,0 +1,18 @@
+from __future__ import absolute_import
+import __init__
+
+import wx
+
+# Define File Drop Target class
+class FileDropTarget(wx.FileDropTarget):
+       def __init__(self, callback, filenameFilter = None):
+               super(FileDropTarget, self).__init__()
+               self.callback = callback
+               self.filenameFilter = filenameFilter
+
+       def OnDropFiles(self, x, y, filenames):
+               if self.filenameFilter != None:
+                       filenames = filter(lambda f: f.endswith(self.filenameFilter) or f.endswith(self.filenameFilter.upper()), filenames)
+               if len(filenames) > 0:
+                       self.callback(filenames)
+
index d9749242412b14ffd75d6d8f49446479e8c6999d..77c16a9e5270c920ff30892f5fea0b0a51493dd0 100644 (file)
@@ -18,6 +18,7 @@ from gui import projectPlanner
 from gui import batchRun
 from gui import flatSlicerWindow
 from gui import icon
+from gui import dropTarget
 from util import profile
 from util import version
 from util import sliceRun
@@ -41,6 +42,8 @@ class mainWindow(configBase.configWindowBase):
                wx.EVT_CLOSE(self, self.OnClose)
                #self.SetIcon(icon.getMainIcon())
                
+               self.SetDropTarget(dropTarget.FileDropTarget(self.OnDropFiles, '.stl'))
+               
                menubar = wx.MenuBar()
                fileMenu = wx.Menu()
                i = fileMenu.Append(-1, 'Load model file...')
@@ -314,7 +317,6 @@ class mainWindow(configBase.configWindowBase):
                        dlg.Destroy()
                        if not(os.path.exists(filename)):
                                return False
-                       profile.putPreference('lastFile', filename)
                        return filename
                dlg.Destroy()
                return False
@@ -325,12 +327,18 @@ class mainWindow(configBase.configWindowBase):
                        filelist.append(self._showOpenDialog("Open file to print"))
                        if filelist[-1] == False:
                                return
-                       self.SetTitle(filelist[-1] + ' - Cura - ' + version.getVersion())
+               self._loadModels(filelist)
+       
+       def _loadModels(self, filelist):
                self.filelist = filelist
+               self.SetTitle(filelist[-1] + ' - Cura - ' + version.getVersion())
                profile.putPreference('lastFile', ';'.join(self.filelist))
                self.preview3d.loadModelFiles(self.filelist)
                self.preview3d.setViewMode("Normal")
 
+       def OnDropFiles(self, filenames):
+               self._loadModels(filenames)
+
        def OnLoadModel(self, e):
                self._showModelLoadDialog(1)
        
index 5a996be327f90f97067bf7d9099f9cb4929db08a..4588cc99fd6deddddcdfcc5a0fe3af0b2ad350b7 100644 (file)
@@ -22,6 +22,7 @@ from gui import icon
 from gui import configBase\r
 from gui import validators\r
 from gui import printWindow\r
+from gui import dropTarget\r
 from util import profile\r
 from util import util3d\r
 from util import stl\r
@@ -144,6 +145,8 @@ class projectPlanner(wx.Frame):
                self.GetSizer().Add(self.panel, 1, flag=wx.EXPAND)\r
                #self.SetIcon(icon.getMainIcon())\r
                \r
+               self.SetDropTarget(dropTarget.FileDropTarget(self.OnDropFiles, '.stl'))\r
+               \r
                self.list = []\r
                self.selection = None\r
                self.printMode = 0\r
@@ -286,6 +289,16 @@ class projectPlanner(wx.Frame):
                self.preview.Refresh()\r
                dlg.Destroy()\r
        \r
+       def OnDropFiles(self, filenames):\r
+               for filename in filenames:\r
+                       item = ProjectObject(self, filename)\r
+                       profile.putPreference('lastFile', item.filename)\r
+                       self.list.append(item)\r
+                       self.selection = item\r
+                       self._updateListbox()\r
+               self.OnListSelect(None)\r
+               self.preview.Refresh()\r
+\r
        def OnPrintTypeChange(self):\r
                self.printMode = 0\r
                if self.printAllAtOnce.GetValue():\r
@@ -391,6 +404,7 @@ class projectPlanner(wx.Frame):
                self.scaleCtrl.SetValue(str(self.selection.scale))\r
                self.rotateCtrl.SetValue(int(self.selection.rotate))\r
                if int(profile.getPreference('extruder_amount')) > 1:\r
+\r
                        self.extruderCtrl.SetValue(str(self.selection.extruder+1))\r
 \r
                self.mirrorX.SetValue(self.selection.flipX)\r