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
10 #Init has to be imported first because it has code to workaround the python bug where relative imports don't work if the module is imported as a main module.
13 from fabmetheus_utilities import archive
14 from fabmetheus_utilities import euclidean
15 from fabmetheus_utilities import gcodec
16 from fabmetheus_utilities import settings
17 from skeinforge_application.skeinforge_utilities import skeinforge_craft
18 from skeinforge_application.skeinforge_utilities import skeinforge_profile
23 __author__ = 'Enrique Perez (perez_enrique@yahoo.com)'
24 __date__ = '$Date: 2008/21/04 $'
25 __license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
28 def addSubmenus( menu, pluginFileName, pluginFolderPath, pluginPath ):
29 "Add a tool plugin menu."
30 submenu = settings.Tkinter.Menu( menu, tearoff = 0 )
31 menu.add_cascade( label = pluginFileName.capitalize(), menu = submenu )
32 settings.ToolDialog().addPluginToMenu( submenu, pluginPath )
33 submenu.add_separator()
34 submenuFileNames = archive.getPluginFileNamesFromDirectoryPath( pluginFolderPath )
35 for submenuFileName in submenuFileNames:
36 settings.ToolDialog().addPluginToMenu( submenu, os.path.join( pluginFolderPath, submenuFileName ) )
38 def addToCraftMenu( menu ):
39 "Add a craft plugin menu."
40 settings.ToolDialog().addPluginToMenu(menu, archive.getUntilDot(archive.getSkeinforgePluginsPath('craft.py')))
42 directoryPath = skeinforge_craft.getPluginsDirectoryPath()
43 directoryFolders = settings.getFolders(directoryPath)
44 pluginFileNames = skeinforge_craft.getPluginFileNames()
45 for pluginFileName in pluginFileNames:
46 pluginFolderName = pluginFileName + '_plugins'
47 pluginPath = os.path.join( directoryPath, pluginFileName )
48 if pluginFolderName in directoryFolders:
49 addSubmenus( menu, pluginFileName, os.path.join( directoryPath, pluginFolderName ), pluginPath )
51 settings.ToolDialog().addPluginToMenu( menu, pluginPath )
53 def addToMenu( master, menu, repository, window ):
54 "Add a tool plugin menu."
55 CraftMenuSaveListener( menu, window )
57 def getNewRepository():
59 return skeinforge_craft.CraftRepository()
61 def writeOutput(fileName):
63 return skeinforge_craft.writeOutput(fileName)
66 class CraftMenuSaveListener:
67 "A class to update a craft menu."
68 def __init__( self, menu, window ):
71 addToCraftMenu( menu )
72 euclidean.addElementToListDictionaryIfNotThere( self, window, settings.globalProfileSaveListenerListTable )
75 "Profile has been saved and profile menu should be updated."
76 settings.deleteMenuItems( self.menu )
77 addToCraftMenu( self.menu )
80 class CraftRadioButtonsSaveListener:
81 "A class to update the craft radio buttons."
82 def addToDialog( self, gridPosition ):
83 "Add this to the dialog."
84 euclidean.addElementToListDictionaryIfNotThere( self, self.repository.repositoryDialog, settings.globalProfileSaveListenerListTable )
85 self.gridPosition = gridPosition.getCopy()
86 self.gridPosition.increment()
87 self.gridPosition.row = gridPosition.rowStart
88 self.setRadioButtons()
90 def getFromRadioPlugins( self, radioPlugins, repository ):
92 self.name = 'CraftRadioButtonsSaveListener'
93 self.radioPlugins = radioPlugins
94 self.repository = repository
95 repository.displayEntities.append(self)
99 "Profile has been saved and craft radio plugins should be updated."
100 self.setRadioButtons()
102 def setRadioButtons(self):
103 "Profile has been saved and craft radio plugins should be updated."
104 craftSequence = skeinforge_profile.getCraftTypePluginModule().getCraftSequence()
105 gridPosition = self.gridPosition.getCopy()
107 activeRadioPlugins = []
108 for radioPlugin in self.radioPlugins:
109 if radioPlugin.name in craftSequence:
110 activeRadioPlugins.append( radioPlugin )
111 radioPlugin.incrementGridPosition(gridPosition)
112 maximumValue = max( radioPlugin.value, maximumValue )
114 radioPlugin.radiobutton.grid_remove()
116 selectedRadioPlugin = settings.getSelectedRadioPlugin( self.repository.importantFileNames + [ activeRadioPlugins[0].name ], activeRadioPlugins ).setSelect()
117 self.repository.pluginFrame.update()
121 "Display the craft dialog."
122 if len(sys.argv) > 1:
123 settings.startMainLoopFromWindow(writeOutput(' '.join(sys.argv[1 :])))
125 settings.startMainLoopFromConstructor(getNewRepository())
127 if __name__ == "__main__":