chiark / gitweb /
Add back the ultimaker platform, and made the platform mesh simpler.
[cura.git] / Cura / slice / cura_sf / skeinforge_application / skeinforge_plugins / craft.py
1 """
2 This page is in the table of contents.
3 Craft is a script to access the plugins which craft a gcode file.
4
5 The plugin buttons which are commonly used are bolded and the ones which are rarely used have normal font weight.
6
7 """
8
9 from __future__ import absolute_import
10
11 from fabmetheus_utilities import archive
12 from fabmetheus_utilities import euclidean
13 from fabmetheus_utilities import gcodec
14 from fabmetheus_utilities import settings
15 from skeinforge_application.skeinforge_utilities import skeinforge_craft
16 from skeinforge_application.skeinforge_utilities import skeinforge_profile
17 import os
18 import sys
19
20
21 __author__ = 'Enrique Perez (perez_enrique@yahoo.com)'
22 __date__ = '$Date: 2008/21/04 $'
23 __license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
24
25
26 def addSubmenus( menu, pluginFileName, pluginFolderPath, pluginPath ):
27         "Add a tool plugin menu."
28         submenu = settings.Tkinter.Menu( menu, tearoff = 0 )
29         menu.add_cascade( label = pluginFileName.capitalize(), menu = submenu )
30         settings.ToolDialog().addPluginToMenu( submenu, pluginPath )
31         submenu.add_separator()
32         submenuFileNames = archive.getPluginFileNamesFromDirectoryPath( pluginFolderPath )
33         for submenuFileName in submenuFileNames:
34                 settings.ToolDialog().addPluginToMenu( submenu, os.path.join( pluginFolderPath, submenuFileName ) )
35
36 def addToCraftMenu( menu ):
37         "Add a craft plugin menu."
38         settings.ToolDialog().addPluginToMenu(menu, archive.getUntilDot(archive.getSkeinforgePluginsPath('craft.py')))
39         menu.add_separator()
40         directoryPath = skeinforge_craft.getPluginsDirectoryPath()
41         directoryFolders = settings.getFolders(directoryPath)
42         pluginFileNames = skeinforge_craft.getPluginFileNames()
43         for pluginFileName in pluginFileNames:
44                 pluginFolderName = pluginFileName + '_plugins'
45                 pluginPath = os.path.join( directoryPath, pluginFileName )
46                 if pluginFolderName in directoryFolders:
47                         addSubmenus( menu, pluginFileName, os.path.join( directoryPath, pluginFolderName ), pluginPath )
48                 else:
49                         settings.ToolDialog().addPluginToMenu( menu, pluginPath )
50
51 def addToMenu( master, menu, repository, window ):
52         "Add a tool plugin menu."
53         CraftMenuSaveListener( menu, window )
54
55 def getNewRepository():
56         'Get new repository.'
57         return skeinforge_craft.CraftRepository()
58
59 def writeOutput(fileName):
60         "Craft a gcode file."
61         return skeinforge_craft.writeOutput(fileName)
62
63
64 class CraftMenuSaveListener(object):
65         "A class to update a craft menu."
66         def __init__( self, menu, window ):
67                 "Set the menu."
68                 self.menu = menu
69                 addToCraftMenu( menu )
70                 euclidean.addElementToListDictionaryIfNotThere( self, window, settings.globalProfileSaveListenerListTable )
71
72         def save(self):
73                 "Profile has been saved and profile menu should be updated."
74                 settings.deleteMenuItems( self.menu )
75                 addToCraftMenu( self.menu )
76
77
78 class CraftRadioButtonsSaveListener(object):
79         "A class to update the craft radio buttons."
80         def addToDialog( self, gridPosition ):
81                 "Add this to the dialog."
82                 euclidean.addElementToListDictionaryIfNotThere( self, self.repository.repositoryDialog, settings.globalProfileSaveListenerListTable )
83                 self.gridPosition = gridPosition.getCopy()
84                 self.gridPosition.increment()
85                 self.gridPosition.row = gridPosition.rowStart
86                 self.setRadioButtons()
87
88         def getFromRadioPlugins( self, radioPlugins, repository ):
89                 "Initialize."
90                 self.name = 'CraftRadioButtonsSaveListener'
91                 self.radioPlugins = radioPlugins
92                 self.repository = repository
93                 repository.displayEntities.append(self)
94                 return self
95
96         def save(self):
97                 "Profile has been saved and craft radio plugins should be updated."
98                 self.setRadioButtons()
99
100         def setRadioButtons(self):
101                 "Profile has been saved and craft radio plugins should be updated."
102                 craftSequence = skeinforge_profile.getCraftTypePluginModule().getCraftSequence()
103                 gridPosition = self.gridPosition.getCopy()
104                 maximumValue = False
105                 activeRadioPlugins = []
106                 for radioPlugin in self.radioPlugins:
107                         if radioPlugin.name in craftSequence:
108                                 activeRadioPlugins.append( radioPlugin )
109                                 radioPlugin.incrementGridPosition(gridPosition)
110                                 maximumValue = max( radioPlugin.value, maximumValue )
111                         else:
112                                 radioPlugin.radiobutton.grid_remove()
113                 if not maximumValue:
114                         selectedRadioPlugin = settings.getSelectedRadioPlugin( self.repository.importantFileNames + [ activeRadioPlugins[0].name ], activeRadioPlugins ).setSelect()
115                 self.repository.pluginFrame.update()
116
117
118 def main():
119         "Display the craft dialog."
120         if len(sys.argv) > 1:
121                 settings.startMainLoopFromWindow(writeOutput(' '.join(sys.argv[1 :])))
122         else:
123                 settings.startMainLoopFromConstructor(getNewRepository())
124
125 if __name__ == "__main__":
126         main()