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)
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()
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)
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()
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()
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()
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()
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()
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())
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)
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())
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())
def OnCancel(self, e): self.pauseButton.SetLabel(language.getText('Pause')) self.machineCom.cancelPrint() self.machineCom.sendCommand("M84") self.machineCom.sendCommand("M104 S0") self.UpdateButtonStates()
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)
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()
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()
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()
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())
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()
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()