2 This page is in the table of contents.
3 Craft is a script to access the plugins which craft a gcode file.
5 The plugin buttons which are commonly used are bolded and the ones which are rarely used have normal font weight.
9 from __future__ import absolute_import
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
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'
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 ) )
36 def addToCraftMenu( menu ):
37 "Add a craft plugin menu."
38 settings.ToolDialog().addPluginToMenu(menu, archive.getUntilDot(archive.getSkeinforgePluginsPath('craft.py')))
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 )
49 settings.ToolDialog().addPluginToMenu( menu, pluginPath )
51 def addToMenu( master, menu, repository, window ):
52 "Add a tool plugin menu."
53 CraftMenuSaveListener( menu, window )
55 def getNewRepository():
57 return skeinforge_craft.CraftRepository()
59 def writeOutput(fileName):
61 return skeinforge_craft.writeOutput(fileName)
64 class CraftMenuSaveListener(object):
65 "A class to update a craft menu."
66 def __init__( self, menu, window ):
69 addToCraftMenu( menu )
70 euclidean.addElementToListDictionaryIfNotThere( self, window, settings.globalProfileSaveListenerListTable )
73 "Profile has been saved and profile menu should be updated."
74 settings.deleteMenuItems( self.menu )
75 addToCraftMenu( self.menu )
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()
88 def getFromRadioPlugins( self, radioPlugins, repository ):
90 self.name = 'CraftRadioButtonsSaveListener'
91 self.radioPlugins = radioPlugins
92 self.repository = repository
93 repository.displayEntities.append(self)
97 "Profile has been saved and craft radio plugins should be updated."
98 self.setRadioButtons()
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()
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 )
112 radioPlugin.radiobutton.grid_remove()
114 selectedRadioPlugin = settings.getSelectedRadioPlugin( self.repository.importantFileNames + [ activeRadioPlugins[0].name ], activeRadioPlugins ).setSelect()
115 self.repository.pluginFrame.update()
119 "Display the craft dialog."
120 if len(sys.argv) > 1:
121 settings.startMainLoopFromWindow(writeOutput(' '.join(sys.argv[1 :])))
123 settings.startMainLoopFromConstructor(getNewRepository())
125 if __name__ == "__main__":