128 lines
4.7 KiB
Python
128 lines
4.7 KiB
Python
"""
|
|
This page is in the table of contents.
|
|
Craft is a script to access the plugins which craft a gcode file.
|
|
|
|
The plugin buttons which are commonly used are bolded and the ones which are rarely used have normal font weight.
|
|
|
|
"""
|
|
|
|
from __future__ import absolute_import
|
|
#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.
|
|
import __init__
|
|
|
|
from fabmetheus_utilities import archive
|
|
from fabmetheus_utilities import euclidean
|
|
from fabmetheus_utilities import gcodec
|
|
from fabmetheus_utilities import settings
|
|
from skeinforge_application.skeinforge_utilities import skeinforge_craft
|
|
from skeinforge_application.skeinforge_utilities import skeinforge_profile
|
|
import os
|
|
import sys
|
|
|
|
|
|
__author__ = 'Enrique Perez (perez_enrique@yahoo.com)'
|
|
__date__ = '$Date: 2008/21/04 $'
|
|
__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
|
|
|
|
|
|
def addSubmenus( menu, pluginFileName, pluginFolderPath, pluginPath ):
|
|
"Add a tool plugin menu."
|
|
submenu = settings.Tkinter.Menu( menu, tearoff = 0 )
|
|
menu.add_cascade( label = pluginFileName.capitalize(), menu = submenu )
|
|
settings.ToolDialog().addPluginToMenu( submenu, pluginPath )
|
|
submenu.add_separator()
|
|
submenuFileNames = archive.getPluginFileNamesFromDirectoryPath( pluginFolderPath )
|
|
for submenuFileName in submenuFileNames:
|
|
settings.ToolDialog().addPluginToMenu( submenu, os.path.join( pluginFolderPath, submenuFileName ) )
|
|
|
|
def addToCraftMenu( menu ):
|
|
"Add a craft plugin menu."
|
|
settings.ToolDialog().addPluginToMenu(menu, archive.getUntilDot(archive.getSkeinforgePluginsPath('craft.py')))
|
|
menu.add_separator()
|
|
directoryPath = skeinforge_craft.getPluginsDirectoryPath()
|
|
directoryFolders = settings.getFolders(directoryPath)
|
|
pluginFileNames = skeinforge_craft.getPluginFileNames()
|
|
for pluginFileName in pluginFileNames:
|
|
pluginFolderName = pluginFileName + '_plugins'
|
|
pluginPath = os.path.join( directoryPath, pluginFileName )
|
|
if pluginFolderName in directoryFolders:
|
|
addSubmenus( menu, pluginFileName, os.path.join( directoryPath, pluginFolderName ), pluginPath )
|
|
else:
|
|
settings.ToolDialog().addPluginToMenu( menu, pluginPath )
|
|
|
|
def addToMenu( master, menu, repository, window ):
|
|
"Add a tool plugin menu."
|
|
CraftMenuSaveListener( menu, window )
|
|
|
|
def getNewRepository():
|
|
'Get new repository.'
|
|
return skeinforge_craft.CraftRepository()
|
|
|
|
def writeOutput(fileName):
|
|
"Craft a gcode file."
|
|
return skeinforge_craft.writeOutput(fileName)
|
|
|
|
|
|
class CraftMenuSaveListener:
|
|
"A class to update a craft menu."
|
|
def __init__( self, menu, window ):
|
|
"Set the menu."
|
|
self.menu = menu
|
|
addToCraftMenu( menu )
|
|
euclidean.addElementToListDictionaryIfNotThere( self, window, settings.globalProfileSaveListenerListTable )
|
|
|
|
def save(self):
|
|
"Profile has been saved and profile menu should be updated."
|
|
settings.deleteMenuItems( self.menu )
|
|
addToCraftMenu( self.menu )
|
|
|
|
|
|
class CraftRadioButtonsSaveListener:
|
|
"A class to update the craft radio buttons."
|
|
def addToDialog( self, gridPosition ):
|
|
"Add this to the dialog."
|
|
euclidean.addElementToListDictionaryIfNotThere( self, self.repository.repositoryDialog, settings.globalProfileSaveListenerListTable )
|
|
self.gridPosition = gridPosition.getCopy()
|
|
self.gridPosition.increment()
|
|
self.gridPosition.row = gridPosition.rowStart
|
|
self.setRadioButtons()
|
|
|
|
def getFromRadioPlugins( self, radioPlugins, repository ):
|
|
"Initialize."
|
|
self.name = 'CraftRadioButtonsSaveListener'
|
|
self.radioPlugins = radioPlugins
|
|
self.repository = repository
|
|
repository.displayEntities.append(self)
|
|
return self
|
|
|
|
def save(self):
|
|
"Profile has been saved and craft radio plugins should be updated."
|
|
self.setRadioButtons()
|
|
|
|
def setRadioButtons(self):
|
|
"Profile has been saved and craft radio plugins should be updated."
|
|
craftSequence = skeinforge_profile.getCraftTypePluginModule().getCraftSequence()
|
|
gridPosition = self.gridPosition.getCopy()
|
|
maximumValue = False
|
|
activeRadioPlugins = []
|
|
for radioPlugin in self.radioPlugins:
|
|
if radioPlugin.name in craftSequence:
|
|
activeRadioPlugins.append( radioPlugin )
|
|
radioPlugin.incrementGridPosition(gridPosition)
|
|
maximumValue = max( radioPlugin.value, maximumValue )
|
|
else:
|
|
radioPlugin.radiobutton.grid_remove()
|
|
if not maximumValue:
|
|
selectedRadioPlugin = settings.getSelectedRadioPlugin( self.repository.importantFileNames + [ activeRadioPlugins[0].name ], activeRadioPlugins ).setSelect()
|
|
self.repository.pluginFrame.update()
|
|
|
|
|
|
def main():
|
|
"Display the craft dialog."
|
|
if len(sys.argv) > 1:
|
|
settings.startMainLoopFromWindow(writeOutput(' '.join(sys.argv[1 :])))
|
|
else:
|
|
settings.startMainLoopFromConstructor(getNewRepository())
|
|
|
|
if __name__ == "__main__":
|
|
main()
|