Example #1
0
	def OnCheckForUpdate(self, e):
		newVersion = version.checkForNewerVersion()
		if newVersion is not None:
			if wx.MessageBox(language.getText('A new version of Cura is available, would you like to download?'), language.getText('New version available'), wx.YES_NO | wx.ICON_INFORMATION) == wx.YES:
				webbrowser.open(newVersion)
		else:
			wx.MessageBox(language.getText('You are running the latest version of Cura!'), language.getText('Awesome!'), wx.ICON_INFORMATION)
Example #2
0
    def __init__(self, parent, callback):
        wx.Panel.__init__(self, parent, -1)
        # Plugin page
        self.pluginList = profile.getPluginList()
        self.callback = callback

        sizer = wx.GridBagSizer(2, 2)
        self.SetSizer(sizer)

        effectStringList = []
        for effect in self.pluginList:
            effectStringList.append(effect["name"])

        self.listbox = wx.ListBox(self, -1, choices=effectStringList)
        title = wx.StaticText(self, -1, language.getText("Plugins:"))
        title.SetFont(
            wx.Font(
                wx.SystemSettings.GetFont(wx.SYS_ANSI_VAR_FONT).GetPointSize(),
                wx.FONTFAMILY_DEFAULT,
                wx.NORMAL,
                wx.FONTWEIGHT_BOLD,
            )
        )
        helpButton = wx.Button(self, -1, "?", style=wx.BU_EXACTFIT)
        addButton = wx.Button(self, -1, "V", style=wx.BU_EXACTFIT)
        openPluginLocationButton = wx.Button(self, -1, language.getText("Open plugin location"))
        sb = wx.StaticBox(self, label=language.getText("Enabled plugins"))
        boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
        self.pluginEnabledPanel = scrolledpanel.ScrolledPanel(self)
        self.pluginEnabledPanel.SetupScrolling(False, True)

        sizer.Add(title, (0, 0), border=10, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.TOP)
        sizer.Add(helpButton, (0, 1), border=10, flag=wx.ALIGN_RIGHT | wx.RIGHT | wx.TOP)
        sizer.Add(self.listbox, (1, 0), span=(2, 2), border=10, flag=wx.EXPAND | wx.LEFT | wx.RIGHT)
        sizer.Add(addButton, (3, 0), span=(1, 2), border=5, flag=wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_BOTTOM)
        sizer.Add(boxsizer, (4, 0), span=(4, 2), border=10, flag=wx.EXPAND | wx.LEFT | wx.RIGHT)
        sizer.Add(openPluginLocationButton, (8, 0), border=10, flag=wx.LEFT | wx.BOTTOM)
        boxsizer.Add(self.pluginEnabledPanel, 1, flag=wx.EXPAND)

        sizer.AddGrowableCol(0)
        sizer.AddGrowableRow(1)  # Plugins list box
        sizer.AddGrowableRow(4)  # Enabled plugins
        sizer.AddGrowableRow(5)  # Enabled plugins
        sizer.AddGrowableRow(6)  # Enabled plugins

        sizer = wx.BoxSizer(wx.VERTICAL)
        self.pluginEnabledPanel.SetSizer(sizer)

        self.Bind(wx.EVT_BUTTON, self.OnAdd, addButton)
        self.Bind(wx.EVT_BUTTON, self.OnGeneralHelp, helpButton)
        self.Bind(wx.EVT_BUTTON, self.OnOpenPluginLocation, openPluginLocationButton)
        self.listbox.Bind(wx.EVT_LEFT_DCLICK, self.OnAdd)
        self.panelList = []
        self.updateProfileToControls()
Example #3
0
	def OnCustomFirmware(self, e):
		if profile.getPreference('machine_type') == 'ultimaker':
			wx.MessageBox(language.getText('Warning: Installing a custom firmware does not guarantee that you machine will function correctly, and could damage your machine.'), language.getText('Firmware update'), wx.OK | wx.ICON_EXCLAMATION)
		dlg=wx.FileDialog(self, language.getText("Open firmware to upload"), os.path.split(profile.getPreference('lastFile'))[0], style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST)
		dlg.SetWildcard("HEX file (*.hex)|*.hex;*.HEX")
		if dlg.ShowModal() == wx.ID_OK:
			filename = dlg.GetPath()
			if not(os.path.exists(filename)):
				return
			#For some reason my Ubuntu 10.10 crashes here.
			firmwareInstall.InstallFirmware(filename)
Example #4
0
	def __init__(self, callback):
		super(expertConfigWindow, self).__init__(None, title=language.getText('Expert config'), style=wx.DEFAULT_DIALOG_STYLE)

		wx.EVT_CLOSE(self, self.OnClose)
		self.panel = configBase.configPanelBase(self, callback)

		left, right, main = self.panel.CreateConfigPanel(self)
		self._addSettingsToPanels('expert', left, right)

		self.okButton = wx.Button(right, -1, language.getText('Ok'))
		right.GetSizer().Add(self.okButton, (right.GetSizer().GetRows(), 0))
		self.Bind(wx.EVT_BUTTON, lambda e: self.Close(), self.okButton)
		
		main.Fit()
		self.Fit()
Example #5
0
	def OnSaveProfile(self, e):
		dlg=wx.FileDialog(self, language.getText("Select profile file to save"), os.path.split(profile.getPreference('lastFile'))[0], style=wx.FD_SAVE)
		dlg.SetWildcard("ini files (*.ini)|*.ini")
		if dlg.ShowModal() == wx.ID_OK:
			profileFile = dlg.GetPath()
			profile.saveProfile(profileFile)
		dlg.Destroy()
Example #6
0
	def OnResetProfile(self, e):
		dlg = wx.MessageDialog(self, language.getText('This will reset all profile settings to defaults.\nUnless you have saved your current profile, all settings will be lost!\nDo you really want to reset?'), language.getText('Profile reset'), wx.YES_NO | wx.ICON_QUESTION)
		result = dlg.ShowModal() == wx.ID_YES
		dlg.Destroy()
		if result:
			profile.resetProfile()
			self.updateProfileToControls()
Example #7
0
	def OnLoadProfileFromGcode(self, e):
		dlg=wx.FileDialog(self, language.getText("Select gcode file to load profile from"), os.path.split(profile.getPreference('lastFile'))[0], style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST)
		dlg.SetWildcard("gcode files (*.gcode)|*.gcode;*.g")
		if dlg.ShowModal() == wx.ID_OK:
			gcodeFile = dlg.GetPath()
			f = open(gcodeFile, 'r')
			hasProfile = False
			for line in f:
				if line.startswith(';CURA_PROFILE_STRING:'):
					profile.loadProfileFromString(line[line.find(':')+1:].strip())
					hasProfile = True
			if hasProfile:
				self.updateProfileToControls()
			else:
				wx.MessageBox(language.getText('No profile found in GCode file.\nThis feature only works with GCode files made by Cura 12.07 or newer.'), language.getText('Profile load error'), wx.OK | wx.ICON_INFORMATION)
		dlg.Destroy()
Example #8
0
    def __init__(self, callback):
        super(expertConfigWindow,
              self).__init__(None,
                             title=language.getText('Expert config'),
                             style=wx.DEFAULT_DIALOG_STYLE)

        wx.EVT_CLOSE(self, self.OnClose)
        self.panel = configBase.configPanelBase(self, callback)

        left, right, main = self.panel.CreateConfigPanel(self)
        self._addSettingsToPanels('expert', left, right)

        self.okButton = wx.Button(right, -1, language.getText('Ok'))
        right.GetSizer().Add(self.okButton, (right.GetSizer().GetRows(), 0))
        self.Bind(wx.EVT_BUTTON, lambda e: self.Close(), self.okButton)

        main.Fit()
        self.Fit()
Example #9
0
	def OnLoadProfile(self, e):
		dlg=wx.FileDialog(self, language.getText("Select profile file to load"), os.path.split(profile.getPreference('lastFile'))[0], style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST)
		dlg.SetWildcard("ini files (*.ini)|*.ini")
		if dlg.ShowModal() == wx.ID_OK:
			profileFile = dlg.GetPath()
			profile.loadProfile(profileFile)
			self.updateProfileToControls()

			# Update the Profile MRU
			self.addToProfileMRU(profileFile)
		dlg.Destroy()
Example #10
0
	def UpdateProgress(self):
		status = ""
		if self.gcode is None:
			status += language.getText("Loading gcode...\n")
		else:
			status += language.getText("Filament: %.2fm %.2fg\n") % (
			self.gcode.extrusionAmount / 1000, self.gcode.calculateWeight() * 1000)
			cost = self.gcode.calculateCost()
			if cost is not None:
				status += "Filament cost: %s\n" % (cost)
			#status += "Estimated print time: %02d:%02d\n" % (int(self.gcode.totalMoveTimeMinute / 60), int(self.gcode.totalMoveTimeMinute % 60))
		if self.machineCom is None or not self.machineCom.isPrinting():
			self.progress.SetValue(0)
			if self.gcodeList is not None:
				status += language.getText('Line: -/%d\n') % (len(self.gcodeList))
		else:
			printTime = self.machineCom.getPrintTime() / 60
			printTimeLeft = self.machineCom.getPrintTimeRemainingEstimate()
			status += language.getText('Line: %d/%d %d%%\n') % (self.machineCom.getPrintPos(), len(self.gcodeList),
			                                  self.machineCom.getPrintPos() * 100 / len(self.gcodeList))
			if self.currentZ > 0:
				status += language.getText('Height: %0.1f\n') % (self.currentZ)
			status += language.getText('Print time: %02d:%02d\n') % (int(printTime / 60), int(printTime % 60))
			if printTimeLeft is None:
				status += language.getText('Print time left: Unknown\n')
			else:
				status += language.getText('Print time left: %02d:%02d\n') % (int(printTimeLeft / 60), int(printTimeLeft % 60))
			self.progress.SetValue(self.machineCom.getPrintPos())
			taskbar.setProgress(self, self.machineCom.getPrintPos(), len(self.gcodeList))
		if self.machineCom is not None:
			if self.machineCom.getTemp() > 0:
				status += 'Temp: %s\n' % (' ,'.join(map(str, self.machineCom.getTemp())))
			if self.machineCom.getBedTemp() > 0:
				status += language.getText('Bed Temp: %d\n') % (self.machineCom.getBedTemp())
				self.bedTemperatureLabel.Show(True)
				self.bedTemperatureSelect.Show(True)
				self.temperaturePanel.Layout()
			status += language.getText('Machine state:%s\n') % (self.machineCom.getStateString())

		self.statsText.SetLabel(status.strip())
Example #11
0
	def __init__(self, parent, callback = None):
		super(normalSettingsPanel, self).__init__(parent, callback)

		#Main tabs
		self.nb = wx.Notebook(self)
		self.SetSizer(wx.BoxSizer(wx.HORIZONTAL))
		self.GetSizer().Add(self.nb, 1, wx.EXPAND)

		(left, right, self.printPanel) = self.CreateDynamicConfigTab(self.nb, language.getText('Basic'))
		self._addSettingsToPanels(language.getText('basic'), left, right)
		self.SizeLabelWidths(left, right)
		
		(left, right, self.advancedPanel) = self.CreateDynamicConfigTab(self.nb, language.getText('Advanced'))
		self._addSettingsToPanels(language.getText('advanced'), left, right)
		self.SizeLabelWidths(left, right)

		#Plugin page
		self.pluginPanel = pluginPanel.pluginPanel(self.nb, callback)
		if len(self.pluginPanel.pluginList) > 0:
			self.nb.AddPage(self.pluginPanel, language.getText("Plugins"))
		else:
			self.pluginPanel.Show(False)

		#Alteration page
		self.alterationPanel = alterationPanel.alterationPanel(self.nb, callback)
		self.nb.AddPage(self.alterationPanel, language.getText("Start/End-GCode"))

		self.Bind(wx.EVT_SIZE, self.OnSize)

		self.nb.SetSize(self.GetSize())
		self.UpdateSize(self.printPanel)
		self.UpdateSize(self.advancedPanel)
Example #12
0
	def UpdateButtonStates(self):
		self.connectButton.Enable(self.machineCom is None or self.machineCom.isClosedOrError())
		#self.loadButton.Enable(self.machineCom == None or not (self.machineCom.isPrinting() or self.machineCom.isPaused()))
		self.printButton.Enable(self.machineCom is not None and self.machineCom.isOperational() and not (
		self.machineCom.isPrinting() or self.machineCom.isPaused()))
		self.temperatureHeatUpPLA.Enable(self.machineCom is not None and self.machineCom.isOperational() and not (
		self.machineCom.isPrinting() or self.machineCom.isPaused()))
		self.pauseButton.Enable(
			self.machineCom is not None and (self.machineCom.isPrinting() or self.machineCom.isPaused()))
		if self.machineCom is not None and self.machineCom.isPaused():
			self.pauseButton.SetLabel(language.getText('Resume'))
		else:
			self.pauseButton.SetLabel(language.getText('Pause'))
		self.cancelButton.Enable(
			self.machineCom is not None and (self.machineCom.isPrinting() or self.machineCom.isPaused()))
		self.temperatureSelect.Enable(self.machineCom is not None and self.machineCom.isOperational())
		self.bedTemperatureSelect.Enable(self.machineCom is not None and self.machineCom.isOperational())
		self.directControlPanel.Enable(
			self.machineCom is not None and self.machineCom.isOperational() and not self.machineCom.isPrinting())
		self.machineLogButton.Show(self.machineCom is not None and self.machineCom.isClosedOrError())
		if self.cam != None:
			for button in self.cam.buttons:
				button.Enable(self.machineCom is None or not self.machineCom.isPrinting())
Example #13
0
    def __init__(self, parent, callback):
        super(simpleModePanel, self).__init__(parent)
        self._callback = callback

        #toolsMenu = wx.Menu()
        #i = toolsMenu.Append(-1, 'Switch to Normal mode...')
        #self.Bind(wx.EVT_MENU, self.OnNormalSwitch, i)
        #self.menubar.Insert(1, toolsMenu, 'Normal mode')

        printTypePanel = wx.Panel(self)
        self.printTypeHigh = wx.RadioButton(
            printTypePanel,
            -1,
            language.getText('High quality print'),
            style=wx.RB_GROUP)
        self.printTypeNormal = wx.RadioButton(
            printTypePanel, -1, language.getText('Normal quality print'))
        self.printTypeLow = wx.RadioButton(
            printTypePanel, -1, language.getText('Fast low quality print'))
        self.printTypeJoris = wx.RadioButton(
            printTypePanel, -1, language.getText('Thin walled cup or vase'))
        self.printTypeJoris.Hide()

        printMaterialPanel = wx.Panel(self)
        self.printMaterialPLA = wx.RadioButton(printMaterialPanel,
                                               -1,
                                               'PLA',
                                               style=wx.RB_GROUP)
        self.printMaterialABS = wx.RadioButton(printMaterialPanel, -1, 'ABS')
        self.printMaterialDiameter = wx.TextCtrl(
            printMaterialPanel, -1,
            profile.getProfileSetting('filament_diameter'))

        self.printSupport = wx.CheckBox(
            self, -1, language.getText('Print support structure'))

        sizer = wx.GridBagSizer()
        self.SetSizer(sizer)

        sb = wx.StaticBox(printTypePanel,
                          label=language.getText("Select a print type:"))
        boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
        boxsizer.Add(self.printTypeHigh)
        boxsizer.Add(self.printTypeNormal)
        boxsizer.Add(self.printTypeLow)
        boxsizer.Add(self.printTypeJoris, border=5, flag=wx.TOP)
        printTypePanel.SetSizer(wx.BoxSizer(wx.VERTICAL))
        printTypePanel.GetSizer().Add(boxsizer, flag=wx.EXPAND)
        sizer.Add(printTypePanel, (0, 0), flag=wx.EXPAND)

        sb = wx.StaticBox(printMaterialPanel,
                          label=language.getText("Material:"))
        boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
        boxsizer.Add(self.printMaterialPLA)
        boxsizer.Add(self.printMaterialABS)
        boxsizer.Add(
            wx.StaticText(printMaterialPanel, -1,
                          language.getText('Diameter:')))
        boxsizer.Add(self.printMaterialDiameter)
        printMaterialPanel.SetSizer(wx.BoxSizer(wx.VERTICAL))
        printMaterialPanel.GetSizer().Add(boxsizer, flag=wx.EXPAND)
        sizer.Add(printMaterialPanel, (1, 0), flag=wx.EXPAND)

        sb = wx.StaticBox(self, label=language.getText("Other:"))
        boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
        boxsizer.Add(self.printSupport)
        sizer.Add(boxsizer, (2, 0), flag=wx.EXPAND)

        self.printTypeNormal.SetValue(True)
        self.printMaterialPLA.SetValue(True)

        self.printTypeHigh.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
        self.printTypeNormal.Bind(wx.EVT_RADIOBUTTON,
                                  lambda e: self._callback())
        self.printTypeLow.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
        #self.printTypeJoris.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())

        self.printMaterialPLA.Bind(wx.EVT_RADIOBUTTON,
                                   lambda e: self._callback())
        self.printMaterialABS.Bind(wx.EVT_RADIOBUTTON,
                                   lambda e: self._callback())
        self.printMaterialDiameter.Bind(wx.EVT_TEXT,
                                        lambda e: self._callback())

        self.printSupport.Bind(wx.EVT_CHECKBOX, lambda e: self._callback())
Example #14
0
	def OnCancel(self, e):
		self.pauseButton.SetLabel(language.getText('Pause'))
		self.machineCom.cancelPrint()
		self.machineCom.sendCommand("M84")
		self.machineCom.sendCommand("M104 S0")
		self.UpdateButtonStates()
Example #15
0
	def __init__(self, logText):
		super(LogWindow, self).__init__(None, title=language.getText("Machine log"))
		self.textBox = wx.TextCtrl(self, -1, logText, style=wx.TE_MULTILINE | wx.TE_DONTWRAP | wx.TE_READONLY)
		self.SetSize((500, 400))
		self.Centre()
		self.Show(True)
Example #16
0
	def __init__(self):
		super(mainWindow, self).__init__(None, title='migbot ' )

		self.extruderCount = int(profile.getPreference('extruder_amount'))
		
		if profile.getPreference('language') is not None:
			language.switchTo(profile.getPreference('language'))

		wx.EVT_CLOSE(self, self.OnClose)

		self.SetDropTarget(dropTarget.FileDropTarget(self.OnDropFiles, meshLoader.loadSupportedExtensions()))

		self.normalModeOnlyItems = []

		mruFile = os.path.join(profile.getBasePath(), 'mru_filelist.ini')
		self.config = wx.FileConfig(appName="migbot", 
						localFilename=mruFile,
						style=wx.CONFIG_USE_LOCAL_FILE)
						
		self.ID_MRU_MODEL1, self.ID_MRU_MODEL2, self.ID_MRU_MODEL3, self.ID_MRU_MODEL4, self.ID_MRU_MODEL5, self.ID_MRU_MODEL6, self.ID_MRU_MODEL7, self.ID_MRU_MODEL8, self.ID_MRU_MODEL9, self.ID_MRU_MODEL10 = [wx.NewId() for line in xrange(10)]
		self.modelFileHistory = wx.FileHistory(10, self.ID_MRU_MODEL1)
		self.config.SetPath("/ModelMRU")
		self.modelFileHistory.Load(self.config)

		self.ID_MRU_PROFILE1, self.ID_MRU_PROFILE2, self.ID_MRU_PROFILE3, self.ID_MRU_PROFILE4, self.ID_MRU_PROFILE5, self.ID_MRU_PROFILE6, self.ID_MRU_PROFILE7, self.ID_MRU_PROFILE8, self.ID_MRU_PROFILE9, self.ID_MRU_PROFILE10 = [wx.NewId() for line in xrange(10)]
		self.profileFileHistory = wx.FileHistory(10, self.ID_MRU_PROFILE1)
		self.config.SetPath("/ProfileMRU")
		self.profileFileHistory.Load(self.config)

		self.menubar = wx.MenuBar()
		self.fileMenu = wx.Menu()
		i = self.fileMenu.Append(-1, language.getText('Load model file...\tCTRL+L'))
		self.Bind(wx.EVT_MENU, lambda e: self.scene.showLoadModel(), i)
		i = self.fileMenu.Append(-1, language.getText('Save model...\tCTRL+S'))
		self.Bind(wx.EVT_MENU, lambda e: self.scene.showSaveModel(), i)
		i = self.fileMenu.Append(-1, language.getText('Clear platform'))
		self.Bind(wx.EVT_MENU, lambda e: self.scene.OnDeleteAll(e), i)

		self.fileMenu.AppendSeparator()
		i = self.fileMenu.Append(-1, language.getText('Print...\tCTRL+P'))
		self.Bind(wx.EVT_MENU, lambda e: self.scene.showPrintWindow(), i)
		i = self.fileMenu.Append(-1, language.getText('Save GCode...'))
		self.Bind(wx.EVT_MENU, lambda e: self.scene.showSaveGCode(), i)
		i = self.fileMenu.Append(-1, language.getText('Show slice engine log...'))
		self.Bind(wx.EVT_MENU, lambda e: self.scene._showSliceLog(), i)

		self.fileMenu.AppendSeparator()
		i = self.fileMenu.Append(-1, language.getText('Open Profile...'))
		self.normalModeOnlyItems.append(i)
		self.Bind(wx.EVT_MENU, self.OnLoadProfile, i)
		i = self.fileMenu.Append(-1, language.getText('Save Profile...'))
		self.normalModeOnlyItems.append(i)
		self.Bind(wx.EVT_MENU, self.OnSaveProfile, i)
		i = self.fileMenu.Append(-1, language.getText('Load Profile from GCode...'))
		self.normalModeOnlyItems.append(i)
		self.Bind(wx.EVT_MENU, self.OnLoadProfileFromGcode, i)
		self.fileMenu.AppendSeparator()
		i = self.fileMenu.Append(-1, language.getText('Reset Profile to default'))
		self.normalModeOnlyItems.append(i)
		self.Bind(wx.EVT_MENU, self.OnResetProfile, i)

		self.fileMenu.AppendSeparator()
		i = self.fileMenu.Append(-1, language.getText('Preferences...\tCTRL+,'))
		self.Bind(wx.EVT_MENU, self.OnPreferences, i)
		i = self.fileMenu.Append(-1, language.getText('Language...'))
		self.Bind(wx.EVT_MENU, self.OnLanguage, i)
		self.fileMenu.AppendSeparator()

		# Model MRU list
		modelHistoryMenu = wx.Menu()
		self.fileMenu.AppendMenu(wx.NewId(), language.getText("&Recent Model Files"), modelHistoryMenu)
		self.modelFileHistory.UseMenu(modelHistoryMenu)
		self.modelFileHistory.AddFilesToMenu()
		self.Bind(wx.EVT_MENU_RANGE, self.OnModelMRU, id=self.ID_MRU_MODEL1, id2=self.ID_MRU_MODEL10)

		# Profle MRU list
		profileHistoryMenu = wx.Menu()
		self.fileMenu.AppendMenu(wx.NewId(), language.getText("&Recent Profile Files"), profileHistoryMenu)
		self.profileFileHistory.UseMenu(profileHistoryMenu)
		self.profileFileHistory.AddFilesToMenu()
		self.Bind(wx.EVT_MENU_RANGE, self.OnProfileMRU, id=self.ID_MRU_PROFILE1, id2=self.ID_MRU_PROFILE10)
		
		self.fileMenu.AppendSeparator()
		i = self.fileMenu.Append(wx.ID_EXIT, language.getText('Quit'))
		self.Bind(wx.EVT_MENU, self.OnQuit, i)
		self.menubar.Append(self.fileMenu, language.getText('&File'))

		toolsMenu = wx.Menu()
		i = toolsMenu.Append(-1, language.getText('Switch to quickprint...'))
		self.switchToQuickprintMenuItem = i
		self.Bind(wx.EVT_MENU, self.OnSimpleSwitch, i)
		i = toolsMenu.Append(-1, language.getText('Switch to full settings...'))
		self.switchToNormalMenuItem = i
		self.Bind(wx.EVT_MENU, self.OnNormalSwitch, i)
		toolsMenu.AppendSeparator()
		#i = toolsMenu.Append(-1, 'Batch run...')
		#self.Bind(wx.EVT_MENU, self.OnBatchRun, i)
		#self.normalModeOnlyItems.append(i)
		if minecraftImport.hasMinecraft():
			i = toolsMenu.Append(-1, language.getText('Minecraft import...'))
			self.Bind(wx.EVT_MENU, self.OnMinecraftImport, i)
		self.menubar.Append(toolsMenu, language.getText('Tools'))

		expertMenu = wx.Menu()
		i = expertMenu.Append(-1, language.getText('Open expert settings...'))
		self.normalModeOnlyItems.append(i)
		self.Bind(wx.EVT_MENU, self.OnExpertOpen, i)
		expertMenu.AppendSeparator()
		if firmwareInstall.getDefaultFirmware() is not None:
			i = expertMenu.Append(-1, language.getText('Install default Marlin firmware'))
			self.Bind(wx.EVT_MENU, self.OnDefaultMarlinFirmware, i)
		i = expertMenu.Append(-1, language.getText('Install custom firmware'))
		self.Bind(wx.EVT_MENU, self.OnCustomFirmware, i)
		expertMenu.AppendSeparator()
		i = expertMenu.Append(-1, language.getText('Run first run wizard...'))
		self.Bind(wx.EVT_MENU, self.OnFirstRunWizard, i)
		i = expertMenu.Append(-1, language.getText('Run bed leveling wizard...'))
		self.Bind(wx.EVT_MENU, self.OnBedLevelWizard, i)
		if self.extruderCount > 1:
			i = expertMenu.Append(-1, language.getText('Run head offset wizard...'))
			self.Bind(wx.EVT_MENU, self.OnHeadOffsetWizard, i)
		self.menubar.Append(expertMenu, language.getText('Expert'))

		helpMenu = wx.Menu()
		i = helpMenu.Append(-1, language.getText('Online documentation...'))
		self.Bind(wx.EVT_MENU, lambda e: webbrowser.open('http://daid.github.com/Cura'), i)
		i = helpMenu.Append(-1, language.getText('Report a problem...'))
		self.Bind(wx.EVT_MENU, lambda e: webbrowser.open('https://github.com/daid/Cura/issues'), i)
		i = helpMenu.Append(-1, language.getText('migbot Documentation...'))
		self.Bind(wx.EVT_MENU, lambda e: webbrowser.open('www.migbot.com'), i)
		i = helpMenu.Append(-1, language.getText('Check for update...'))
		self.Bind(wx.EVT_MENU, self.OnCheckForUpdate, i)
		i = helpMenu.Append(-1, language.getText('About migbot...'))
		self.Bind(wx.EVT_MENU, self.OnAbout, i)
		self.menubar.Append(helpMenu, language.getText('Help'))
		self.SetMenuBar(self.menubar)

		self.splitter = wx.SplitterWindow(self, style = wx.SP_3D | wx.SP_LIVE_UPDATE)
		self.leftPane = wx.Panel(self.splitter, style=wx.BORDER_NONE)
		self.rightPane = wx.Panel(self.splitter, style=wx.BORDER_NONE)
		self.splitter.Bind(wx.EVT_SPLITTER_DCLICK, lambda evt: evt.Veto())

		##Gui components##
		self.simpleSettingsPanel = simpleMode.simpleModePanel(self.leftPane, lambda : self.scene.sceneUpdated())
		self.normalSettingsPanel = normalSettingsPanel(self.leftPane, lambda : self.scene.sceneUpdated())

		self.leftSizer = wx.BoxSizer(wx.VERTICAL)
		self.leftSizer.Add(self.simpleSettingsPanel)
		self.leftSizer.Add(self.normalSettingsPanel, 1, wx.EXPAND)
		self.leftPane.SetSizer(self.leftSizer)
		
		#Preview window
		self.scene = sceneView.SceneView(self.rightPane)

		#Main sizer, to position the preview window, buttons and tab control
		sizer = wx.BoxSizer()
		self.rightPane.SetSizer(sizer)
		sizer.Add(self.scene, 1, flag=wx.EXPAND)

		# Main window sizer
		sizer = wx.BoxSizer(wx.VERTICAL)
		self.SetSizer(sizer)
		sizer.Add(self.splitter, 1, wx.EXPAND)
		sizer.Layout()
		self.sizer = sizer

		self.updateProfileToControls()

		self.SetBackgroundColour(self.normalSettingsPanel.GetBackgroundColour())

		self.simpleSettingsPanel.Show(False)
		self.normalSettingsPanel.Show(False)

		# Set default window size & position
		self.SetSize((wx.Display().GetClientArea().GetWidth()/2,wx.Display().GetClientArea().GetHeight()/2))
		self.Centre()

		# Restore the window position, size & state from the preferences file
		try:
			if profile.getPreference('window_maximized') == 'True':
				self.Maximize(True)
			else:
				posx = int(profile.getPreference('window_pos_x'))
				posy = int(profile.getPreference('window_pos_y'))
				width = int(profile.getPreference('window_width'))
				height = int(profile.getPreference('window_height'))
				if posx > 0 or posy > 0:
					self.SetPosition((posx,posy))
				if width > 0 and height > 0:
					self.SetSize((width,height))
				
			self.normalSashPos = int(profile.getPreference('window_normal_sash'))
		except:
			self.normalSashPos = 0
			self.Maximize(True)
		if self.normalSashPos < self.normalSettingsPanel.printPanel.GetBestSize()[0] + 5:
			self.normalSashPos = self.normalSettingsPanel.printPanel.GetBestSize()[0] + 5

		self.splitter.SplitVertically(self.leftPane, self.rightPane, self.normalSashPos)

		if wx.Display.GetFromPoint(self.GetPosition()) < 0:
			self.Centre()
		if wx.Display.GetFromPoint((self.GetPositionTuple()[0] + self.GetSizeTuple()[1], self.GetPositionTuple()[1] + self.GetSizeTuple()[1])) < 0:
			self.Centre()
		if wx.Display.GetFromPoint(self.GetPosition()) < 0:
			self.SetSize((800,600))
			self.Centre()

		self.updateSliceMode()
Example #17
0
	def OnClose(self, e):
		if self.oldExtruderAmount != int(profile.getPreference('extruder_amount')):
			wx.MessageBox(language.getText('After changing the amount of extruders you need to restart Cura for full effect.'), language.getText('Extruder amount warning.'), wx.OK | wx.ICON_INFORMATION)
		self.parent.updateProfileToControls()
		self.Destroy()
Example #18
0
	def __init__(self):
		super(printWindow, self).__init__(None, -1, title=language.getText('Printing'))
		self.machineCom = None
		self.gcode = None
		self.gcodeList = None
		self.sendList = []
		self.temp = None
		self.bedTemp = None
		self.bufferLineCount = 4
		self.sendCnt = 0
		self.feedrateRatioOuterWall = 1.0
		self.feedrateRatioInnerWall = 1.0
		self.feedrateRatioFill = 1.0
		self.feedrateRatioSupport = 1.0
		self.pause = False
		self.termHistory = []
		self.termHistoryIdx = 0

		self.cam = None
		if webcam.hasWebcamSupport():
			self.cam = webcam.webcam()
			if not self.cam.hasCamera():
				self.cam = None

		self.SetSizer(wx.BoxSizer())
		self.panel = wx.Panel(self)
		self.GetSizer().Add(self.panel, 1, flag=wx.EXPAND)
		self.sizer = wx.GridBagSizer(2, 2)
		self.panel.SetSizer(self.sizer)

		sb = wx.StaticBox(self.panel, label=language.getText("Statistics"))
		boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)

		self.powerWarningText = wx.StaticText(parent=self.panel,
			id=-1,
			label=language.getText("Your computer is running on battery power.\nConnect your computer to AC power or your print might not finish."),
			style=wx.ALIGN_CENTER)
		self.powerWarningText.SetBackgroundColour('red')
		self.powerWarningText.SetForegroundColour('white')
		boxsizer.AddF(self.powerWarningText, flags=wx.SizerFlags().Expand().Border(wx.BOTTOM, 10))
		self.powerManagement = power.PowerManagement()
		self.powerWarningTimer = wx.Timer(self)
		self.Bind(wx.EVT_TIMER, self.OnPowerWarningChange, self.powerWarningTimer)
		self.OnPowerWarningChange(None)
		self.powerWarningTimer.Start(10000)

		self.statsText = wx.StaticText(self.panel, -1, "Filament: ####.##m #.##g\nEstimated print time: #####:##\nMachine state:\nDetecting baudrateXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
		boxsizer.Add(self.statsText, flag=wx.LEFT, border=5)

		self.sizer.Add(boxsizer, pos=(0, 0), span=(7, 1), flag=wx.EXPAND)

		self.connectButton = wx.Button(self.panel, -1, language.getText('Connect'))
		#self.loadButton = wx.Button(self.panel, -1, 'Load')
		self.printButton = wx.Button(self.panel, -1, language.getText('Print'))
		self.pauseButton = wx.Button(self.panel, -1, language.getText('Pause'))
		self.cancelButton = wx.Button(self.panel, -1, language.getText('Cancel print'))
		self.machineLogButton = wx.Button(self.panel, -1, language.getText('Error log'))
		self.progress = wx.Gauge(self.panel, -1)

		self.sizer.Add(self.connectButton, pos=(1, 1), flag=wx.EXPAND)
		#self.sizer.Add(self.loadButton, pos=(1,1), flag=wx.EXPAND)
		self.sizer.Add(self.printButton, pos=(2, 1), flag=wx.EXPAND)
		self.sizer.Add(self.pauseButton, pos=(3, 1), flag=wx.EXPAND)
		self.sizer.Add(self.cancelButton, pos=(4, 1), flag=wx.EXPAND)
		self.sizer.Add(self.machineLogButton, pos=(5, 1), flag=wx.EXPAND)
		self.sizer.Add(self.progress, pos=(7, 0), span=(1, 7), flag=wx.EXPAND)

		nb = wx.Notebook(self.panel)
		self.sizer.Add(nb, pos=(0, 2), span=(7, 4), flag=wx.EXPAND)

		self.temperaturePanel = wx.Panel(nb)
		sizer = wx.GridBagSizer(2, 2)
		self.temperaturePanel.SetSizer(sizer)

		self.temperatureSelect = wx.SpinCtrl(self.temperaturePanel, -1, '0', size=(21 * 3, 21), style=wx.SP_ARROW_KEYS)
		self.temperatureSelect.SetRange(0, 400)
		self.temperatureHeatUpPLA = wx.Button(self.temperaturePanel, -1, '210C')
		self.bedTemperatureLabel = wx.StaticText(self.temperaturePanel, -1, language.getText("BedTemp:"))
		self.bedTemperatureSelect = wx.SpinCtrl(self.temperaturePanel, -1, '0', size=(21 * 3, 21), style=wx.SP_ARROW_KEYS)
		self.bedTemperatureSelect.SetRange(0, 400)
		self.bedTemperatureLabel.Show(False)
		self.bedTemperatureSelect.Show(False)

		self.temperatureGraph = temperatureGraph(self.temperaturePanel)

		sizer.Add(wx.StaticText(self.temperaturePanel, -1, language.getText("Temp:")), pos=(0, 0))
		sizer.Add(self.temperatureSelect, pos=(0, 1))
		sizer.Add(self.temperatureHeatUpPLA, pos=(0, 2))
		sizer.Add(self.bedTemperatureLabel, pos=(1, 0))
		sizer.Add(self.bedTemperatureSelect, pos=(1, 1))
		sizer.Add(self.temperatureGraph, pos=(2, 0), span=(1, 3), flag=wx.EXPAND)
		sizer.AddGrowableRow(2)
		sizer.AddGrowableCol(2)

		nb.AddPage(self.temperaturePanel, language.getText('Temp'))

		self.directControlPanel = wx.Panel(nb)

		sizer = wx.GridBagSizer(2, 2)
		self.directControlPanel.SetSizer(sizer)
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Y100 F6000', 'G90'], 'print-move-y100.png'), pos=(0, 3))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Y10 F6000', 'G90'], 'print-move-y10.png'), pos=(1, 3))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Y1 F6000', 'G90'], 'print-move-y1.png'), pos=(2, 3))

		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Y-1 F6000', 'G90'], 'print-move-y-1.png'), pos=(4, 3))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Y-10 F6000', 'G90'], 'print-move-y-10.png'), pos=(5, 3))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Y-100 F6000', 'G90'], 'print-move-y-100.png'), pos=(6, 3))

		sizer.Add(PrintCommandButton(self, ['G91', 'G1 X-100 F6000', 'G90'], 'print-move-x-100.png'), pos=(3, 0))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 X-10 F6000', 'G90'], 'print-move-x-10.png'), pos=(3, 1))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 X-1 F6000', 'G90'], 'print-move-x-1.png'), pos=(3, 2))

		sizer.Add(PrintCommandButton(self, ['G28 X0 Y0'], 'print-move-home.png'), pos=(3, 3))

		sizer.Add(PrintCommandButton(self, ['G91', 'G1 X1 F6000', 'G90'], 'print-move-x1.png'), pos=(3, 4))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 X10 F6000', 'G90'], 'print-move-x10.png'), pos=(3, 5))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 X100 F6000', 'G90'], 'print-move-x100.png'), pos=(3, 6))

		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Z10 F200', 'G90'], 'print-move-z10.png'), pos=(0, 8))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Z1 F200', 'G90'], 'print-move-z1.png'), pos=(1, 8))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Z0.1 F200', 'G90'], 'print-move-z0.1.png'), pos=(2, 8))

		sizer.Add(PrintCommandButton(self, ['G28 Z0'], 'print-move-home.png'), pos=(3, 8))

		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Z-0.1 F200', 'G90'], 'print-move-z-0.1.png'), pos=(4, 8))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Z-1 F200', 'G90'], 'print-move-z-1.png'), pos=(5, 8))
		sizer.Add(PrintCommandButton(self, ['G91', 'G1 Z-10 F200', 'G90'], 'print-move-z-10.png'), pos=(6, 8))

		sizer.Add(PrintCommandButton(self, ['G92 E0', 'G1 E2 F120'], 'extrude.png', size=(60, 20)), pos=(1, 10),
			span=(1, 3), flag=wx.EXPAND)
		sizer.Add(PrintCommandButton(self, ['G92 E0', 'G1 E-2 F120'], 'retract.png', size=(60, 20)), pos=(2, 10),
			span=(1, 3), flag=wx.EXPAND)

		nb.AddPage(self.directControlPanel, language.getText('Jog'))

		self.speedPanel = wx.Panel(nb)
		sizer = wx.GridBagSizer(2, 2)
		self.speedPanel.SetSizer(sizer)

		self.outerWallSpeedSelect = wx.SpinCtrl(self.speedPanel, -1, '100', size=(21 * 3, 21), style=wx.SP_ARROW_KEYS)
		self.outerWallSpeedSelect.SetRange(5, 1000)
		self.innerWallSpeedSelect = wx.SpinCtrl(self.speedPanel, -1, '100', size=(21 * 3, 21), style=wx.SP_ARROW_KEYS)
		self.innerWallSpeedSelect.SetRange(5, 1000)
		self.fillSpeedSelect = wx.SpinCtrl(self.speedPanel, -1, '100', size=(21 * 3, 21), style=wx.SP_ARROW_KEYS)
		self.fillSpeedSelect.SetRange(5, 1000)
		self.supportSpeedSelect = wx.SpinCtrl(self.speedPanel, -1, '100', size=(21 * 3, 21), style=wx.SP_ARROW_KEYS)
		self.supportSpeedSelect.SetRange(5, 1000)

		sizer.Add(wx.StaticText(self.speedPanel, -1, language.getText("Outer wall:")), pos=(0, 0))
		sizer.Add(self.outerWallSpeedSelect, pos=(0, 1))
		sizer.Add(wx.StaticText(self.speedPanel, -1, "%"), pos=(0, 2))
		sizer.Add(wx.StaticText(self.speedPanel, -1, language.getText("Inner wall:")), pos=(1, 0))
		sizer.Add(self.innerWallSpeedSelect, pos=(1, 1))
		sizer.Add(wx.StaticText(self.speedPanel, -1, "%"), pos=(1, 2))
		sizer.Add(wx.StaticText(self.speedPanel, -1, language.getText("Fill:")), pos=(2, 0))
		sizer.Add(self.fillSpeedSelect, pos=(2, 1))
		sizer.Add(wx.StaticText(self.speedPanel, -1, "%"), pos=(2, 2))
		sizer.Add(wx.StaticText(self.speedPanel, -1, language.getText("Support:")), pos=(3, 0))
		sizer.Add(self.supportSpeedSelect, pos=(3, 1))
		sizer.Add(wx.StaticText(self.speedPanel, -1, "%"), pos=(3, 2))

		nb.AddPage(self.speedPanel, language.getText('Speed'))

		self.termPanel = wx.Panel(nb)
		sizer = wx.GridBagSizer(2, 2)
		self.termPanel.SetSizer(sizer)

		f = wx.Font(8, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False)
		self.termLog = wx.TextCtrl(self.termPanel, style=wx.TE_MULTILINE | wx.TE_DONTWRAP)
		self.termLog.SetFont(f)
		self.termLog.SetEditable(0)
		self.termInput = wx.TextCtrl(self.termPanel, style=wx.TE_PROCESS_ENTER)
		self.termInput.SetFont(f)

		sizer.Add(self.termLog, pos=(0, 0), flag=wx.EXPAND)
		sizer.Add(self.termInput, pos=(1, 0), flag=wx.EXPAND)
		sizer.AddGrowableCol(0)
		sizer.AddGrowableRow(0)

		nb.AddPage(self.termPanel, language.getText('Term'))

		if self.cam is not None:
			self.camPage = wx.Panel(nb)
			sizer = wx.GridBagSizer(2, 2)
			self.camPage.SetSizer(sizer)

			self.timelapsEnable = wx.CheckBox(self.camPage, -1, language.getText('Enable timelapse movie recording'))
			self.timelapsSavePath = wx.TextCtrl(self.camPage, -1, os.path.expanduser('~/timelaps_' + datetime.datetime.now().strftime('%Y-%m-%d_%H:%M') + '.mpg'))
			sizer.Add(self.timelapsEnable, pos=(0, 0), span=(1, 2), flag=wx.EXPAND)
			sizer.Add(self.timelapsSavePath, pos=(1, 0), span=(1, 2), flag=wx.EXPAND)

			pages = self.cam.propertyPages()
			self.cam.buttons = [self.timelapsEnable, self.timelapsSavePath]
			for page in pages:
				button = wx.Button(self.camPage, -1, page)
				button.index = pages.index(page)
				sizer.Add(button, pos=(2, pages.index(page)))
				button.Bind(wx.EVT_BUTTON, self.OnPropertyPageButton)
				self.cam.buttons.append(button)

			self.campreviewEnable = wx.CheckBox(self.camPage, -1, language.getText('Show preview'))
			sizer.Add(self.campreviewEnable, pos=(3, 0), span=(1, 2), flag=wx.EXPAND)

			self.camPreview = wx.Panel(self.camPage)
			sizer.Add(self.camPreview, pos=(4, 0), span=(1, 2), flag=wx.EXPAND)

			nb.AddPage(self.camPage, language.getText('Camera'))
			self.camPreview.timer = wx.Timer(self)
			self.Bind(wx.EVT_TIMER, self.OnCameraTimer, self.camPreview.timer)
			self.camPreview.timer.Start(500)
			self.camPreview.Bind(wx.EVT_ERASE_BACKGROUND, self.OnCameraEraseBackground)

		self.sizer.AddGrowableRow(6)
		self.sizer.AddGrowableCol(3)

		self.Bind(wx.EVT_CLOSE, self.OnClose)
		self.connectButton.Bind(wx.EVT_BUTTON, self.OnConnect)
		#self.loadButton.Bind(wx.EVT_BUTTON, self.OnLoad)
		self.printButton.Bind(wx.EVT_BUTTON, self.OnPrint)
		self.pauseButton.Bind(wx.EVT_BUTTON, self.OnPause)
		self.cancelButton.Bind(wx.EVT_BUTTON, self.OnCancel)
		self.machineLogButton.Bind(wx.EVT_BUTTON, self.OnMachineLog)

		self.Bind(wx.EVT_BUTTON, lambda e: (self.temperatureSelect.SetValue(210), self.machineCom.sendCommand("M104 S210")), self.temperatureHeatUpPLA)
		self.Bind(wx.EVT_SPINCTRL, self.OnTempChange, self.temperatureSelect)
		self.Bind(wx.EVT_SPINCTRL, self.OnBedTempChange, self.bedTemperatureSelect)

		self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.outerWallSpeedSelect)
		self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.innerWallSpeedSelect)
		self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.fillSpeedSelect)
		self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.supportSpeedSelect)
		self.Bind(wx.EVT_TEXT_ENTER, self.OnTermEnterLine, self.termInput)
		self.termInput.Bind(wx.EVT_CHAR, self.OnTermKey)

		self.Layout()
		self.Fit()
		self.Centre()

		self.statsText.SetMinSize(self.statsText.GetSize())

		self.UpdateButtonStates()

		#self.UpdateProgress()
		self._thread = threading.Thread(target=self._stdinMonitor)
		self._thread.daemon = True
		self._thread.start()
Example #19
0
	def __init__(self, parent, callback):
		super(simpleModePanel, self).__init__(parent)
		self._callback = callback

		#toolsMenu = wx.Menu()
		#i = toolsMenu.Append(-1, 'Switch to Normal mode...')
		#self.Bind(wx.EVT_MENU, self.OnNormalSwitch, i)
		#self.menubar.Insert(1, toolsMenu, 'Normal mode')

		printTypePanel = wx.Panel(self)
		self.printTypeHigh = wx.RadioButton(printTypePanel, -1, language.getText('High quality print'), style=wx.RB_GROUP)
		self.printTypeNormal = wx.RadioButton(printTypePanel, -1, language.getText('Normal quality print'))
		self.printTypeLow = wx.RadioButton(printTypePanel, -1, language.getText('Fast low quality print'))
		self.printTypeJoris = wx.RadioButton(printTypePanel, -1, language.getText('Thin walled cup or vase'))
		self.printTypeJoris.Hide()

		printMaterialPanel = wx.Panel(self)
		self.printMaterialPLA = wx.RadioButton(printMaterialPanel, -1, 'PLA', style=wx.RB_GROUP)
		self.printMaterialABS = wx.RadioButton(printMaterialPanel, -1, 'ABS')
		self.printMaterialDiameter = wx.TextCtrl(printMaterialPanel, -1, profile.getProfileSetting('filament_diameter'))
		
		self.printSupport = wx.CheckBox(self, -1, language.getText('Print support structure'))

		sizer = wx.GridBagSizer()
		self.SetSizer(sizer)

		sb = wx.StaticBox(printTypePanel, label=language.getText("Select a print type:"))
		boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
		boxsizer.Add(self.printTypeHigh)
		boxsizer.Add(self.printTypeNormal)
		boxsizer.Add(self.printTypeLow)
		boxsizer.Add(self.printTypeJoris, border=5, flag=wx.TOP)
		printTypePanel.SetSizer(wx.BoxSizer(wx.VERTICAL))
		printTypePanel.GetSizer().Add(boxsizer, flag=wx.EXPAND)
		sizer.Add(printTypePanel, (0,0), flag=wx.EXPAND)

		sb = wx.StaticBox(printMaterialPanel, label=language.getText("Material:"))
		boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
		boxsizer.Add(self.printMaterialPLA)
		boxsizer.Add(self.printMaterialABS)
		boxsizer.Add(wx.StaticText(printMaterialPanel, -1, language.getText('Diameter:')))
		boxsizer.Add(self.printMaterialDiameter)
		printMaterialPanel.SetSizer(wx.BoxSizer(wx.VERTICAL))
		printMaterialPanel.GetSizer().Add(boxsizer, flag=wx.EXPAND)
		sizer.Add(printMaterialPanel, (1,0), flag=wx.EXPAND)

		sb = wx.StaticBox(self, label=language.getText("Other:"))
		boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
		boxsizer.Add(self.printSupport)
		sizer.Add(boxsizer, (2,0), flag=wx.EXPAND)

		self.printTypeNormal.SetValue(True)
		self.printMaterialPLA.SetValue(True)

		self.printTypeHigh.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
		self.printTypeNormal.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
		self.printTypeLow.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
		#self.printTypeJoris.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())

		self.printMaterialPLA.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
		self.printMaterialABS.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
		self.printMaterialDiameter.Bind(wx.EVT_TEXT, lambda e: self._callback())

		self.printSupport.Bind(wx.EVT_CHECKBOX, lambda e: self._callback())
Example #20
0
    def __init__(self, parent, callback):
        wx.Panel.__init__(self, parent, -1)
        #Plugin page
        self.pluginList = profile.getPluginList()
        self.callback = callback

        sizer = wx.GridBagSizer(2, 2)
        self.SetSizer(sizer)

        effectStringList = []
        for effect in self.pluginList:
            effectStringList.append(effect['name'])

        self.listbox = wx.ListBox(self, -1, choices=effectStringList)
        title = wx.StaticText(self, -1, language.getText("Plugins:"))
        title.SetFont(
            wx.Font(
                wx.SystemSettings.GetFont(wx.SYS_ANSI_VAR_FONT).GetPointSize(),
                wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))
        helpButton = wx.Button(self, -1, '?', style=wx.BU_EXACTFIT)
        addButton = wx.Button(self, -1, 'V', style=wx.BU_EXACTFIT)
        openPluginLocationButton = wx.Button(
            self, -1, language.getText('Open plugin location'))
        sb = wx.StaticBox(self, label=language.getText("Enabled plugins"))
        boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
        self.pluginEnabledPanel = scrolledpanel.ScrolledPanel(self)
        self.pluginEnabledPanel.SetupScrolling(False, True)

        sizer.Add(title, (0, 0),
                  border=10,
                  flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.TOP)
        sizer.Add(helpButton, (0, 1),
                  border=10,
                  flag=wx.ALIGN_RIGHT | wx.RIGHT | wx.TOP)
        sizer.Add(self.listbox, (1, 0),
                  span=(2, 2),
                  border=10,
                  flag=wx.EXPAND | wx.LEFT | wx.RIGHT)
        sizer.Add(addButton, (3, 0),
                  span=(1, 2),
                  border=5,
                  flag=wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_BOTTOM)
        sizer.Add(boxsizer, (4, 0),
                  span=(4, 2),
                  border=10,
                  flag=wx.EXPAND | wx.LEFT | wx.RIGHT)
        sizer.Add(openPluginLocationButton, (8, 0),
                  border=10,
                  flag=wx.LEFT | wx.BOTTOM)
        boxsizer.Add(self.pluginEnabledPanel, 1, flag=wx.EXPAND)

        sizer.AddGrowableCol(0)
        sizer.AddGrowableRow(1)  # Plugins list box
        sizer.AddGrowableRow(4)  # Enabled plugins
        sizer.AddGrowableRow(5)  # Enabled plugins
        sizer.AddGrowableRow(6)  # Enabled plugins

        sizer = wx.BoxSizer(wx.VERTICAL)
        self.pluginEnabledPanel.SetSizer(sizer)

        self.Bind(wx.EVT_BUTTON, self.OnAdd, addButton)
        self.Bind(wx.EVT_BUTTON, self.OnGeneralHelp, helpButton)
        self.Bind(wx.EVT_BUTTON, self.OnOpenPluginLocation,
                  openPluginLocationButton)
        self.listbox.Bind(wx.EVT_LEFT_DCLICK, self.OnAdd)
        self.panelList = []
        self.updateProfileToControls()
Example #21
0
	def __init__(self, parent):
		super(preferencesDialog, self).__init__(None, title=language.getText("Preferences"))
		
		wx.EVT_CLOSE(self, self.OnClose)
		
		self.parent = parent
		self.oldExtruderAmount = int(profile.getPreference('extruder_amount'))

		self.panel = configBase.configPanelBase(self)
		
		left, right, main = self.panel.CreateConfigPanel(self)
		configBase.TitleRow(left, language.getText('Machine settings'))
		configBase.SettingRow(left, 'steps_per_e')
		configBase.SettingRow(left, 'machine_width')
		configBase.SettingRow(left, 'machine_depth')
		configBase.SettingRow(left, 'machine_height')
		configBase.SettingRow(left, 'extruder_amount')
		configBase.SettingRow(left, 'has_heated_bed')

		configBase.TitleRow(left, language.getText('Printer head size'))
		configBase.SettingRow(left, 'extruder_head_size_min_x')
		configBase.SettingRow(left, 'extruder_head_size_min_y')
		configBase.SettingRow(left, 'extruder_head_size_max_x')
		configBase.SettingRow(left, 'extruder_head_size_max_y')
		configBase.SettingRow(left, 'extruder_head_size_height')

		for i in xrange(1, self.oldExtruderAmount):
			configBase.TitleRow(left, 'Extruder %d' % (i+1))
			configBase.SettingRow(left, 'extruder_offset_x%d' % (i))
			configBase.SettingRow(left, 'extruder_offset_y%d' % (i))

		configBase.TitleRow(right, language.getText('Colours'))
		configBase.SettingRow(right, 'model_colour', wx.Colour)
		for i in xrange(1, self.oldExtruderAmount):
			configBase.SettingRow(right, 'model_colour%d' % (i+1), wx.Colour)

		configBase.TitleRow(right, language.getText('Filament settings'))
		configBase.SettingRow(right, 'filament_physical_density')
		configBase.SettingRow(right, 'filament_cost_kg')
		configBase.SettingRow(right, 'filament_cost_meter')

		configBase.TitleRow(right, language.getText('Communication settings'))
		configBase.SettingRow(right, 'serial_port', ['AUTO'] + machineCom.serialList())
		configBase.SettingRow(right, 'serial_baud', ['AUTO'] + map(str, machineCom.baudrateList()))

		#configBase.TitleRow(right, 'Slicer settings')
		#configBase.SettingRow(right, 'save_profile')

		#configBase.TitleRow(right, 'SD Card settings')

		configBase.TitleRow(right, language.getText('Cura settings'))
		configBase.SettingRow(right, 'auto_detect_sd')
		configBase.SettingRow(right, 'check_for_updates')
		configBase.SettingRow(right, 'submit_slice_information')

		self.okButton = wx.Button(right, -1, language.getText('Ok'))
		right.GetSizer().Add(self.okButton, (right.GetSizer().GetRows(), 0), flag=wx.BOTTOM, border=5)
		self.okButton.Bind(wx.EVT_BUTTON, lambda e: self.Close())
		
		main.Fit()
		self.Fit()