77d04ceab8
Updated build script to create win32/linux/macos versions. Fixed the defaults to they work with PLA. Fixed the temperature plugin default "ON" problem. Removed all profiles except for PLA.
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()
|