frameworkPath=objc.pathForFramework("/System/Library/Frameworks/IOKit.framework"),
globals=globals())
objc.loadBundleFunctions(bundle, globals(), [("IOPMAssertionCreateWithName", b"i@I@o^I")])
+ objc.loadBundleFunctions(bundle, globals(), [("IOPMAssertionRelease", b"iI")])
def preventComputerFromSleeping(frame, prevent):
if prevent:
success, preventComputerFromSleeping.assertionID = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, "Cura is printing", None)
if success != kIOReturnSuccess:
preventComputerFromSleeping.assertionID = None
else:
- if preventComputerFromSleeping.assertionID is not None:
- IOPMAssertionRelease(preventComputerFromSleeping.assertionID)
- preventComputerFromSleeping.assertionID = None
+ if hasattr(preventComputerFromSleeping, "assertionID"):
+ if preventComputerFromSleeping.assertionID is not None:
+ IOPMAssertionRelease(preventComputerFromSleeping.assertionID)
+ preventComputerFromSleeping.assertionID = None
else:
def preventComputerFromSleeping(frame, prevent):
if os.path.isfile("/usr/bin/xdg-screensaver"):
if self._infoText is not None:
self._infoText.SetLabel(info)
else:
- self.SetTitle(info.replace('\n', ', '))
+ self.SetTitle(info.replace('\n', ', ').strip().strip(','))
if isPrinting != self._isPrinting:
self._isPrinting = isPrinting
preventComputerFromSleeping(self, self._isPrinting)
self._lastUpdateTime = time.time()
self._isPrinting = False
- self.SetSizer(wx.BoxSizer())
+ self.SetSizer(wx.BoxSizer(wx.VERTICAL))
+ self.toppanel = wx.Panel(self)
+ self.topsizer = wx.GridBagSizer(2, 2)
+ self.toppanel.SetSizer(self.topsizer)
+ self.toppanel.SetBackgroundColour(wx.WHITE)
+ self.topsizer.SetEmptyCellSize((125, 1))
self.panel = wx.Panel(self)
- self.GetSizer().Add(self.panel, 1, flag=wx.EXPAND)
self.sizer = wx.GridBagSizer(2, 2)
+ self.sizer.SetEmptyCellSize((125, 1))
self.panel.SetSizer(self.sizer)
self.panel.SetBackgroundColour(wx.WHITE)
+ self.GetSizer().Add(self.toppanel, 0, flag=wx.EXPAND)
+ self.GetSizer().Add(self.panel, 1, flag=wx.EXPAND)
self._fullscreenTemperature = None
self._termHistory = []
self._addMovementCommand(220, 255, 0, self._homeXYZ, "Y")
self._addMovementCommand(200, 255, 0, self._homeXYZ, "Z")
- self.powerWarningText = wx.StaticText(parent=self.panel,
+ self.powerWarningText = wx.StaticText(parent=self.toppanel,
id=-1,
label=_("Your computer is running on battery power.\nConnect your computer to AC power or your print might not finish."),
style=wx.ALIGN_CENTER)
self.OnPowerWarningChange(None)
self.powerWarningTimer.Start(10000)
- self.connectButton = wx.Button(self.panel, -1, _("Connect"), size=(125, 30))
- self.printButton = wx.Button(self.panel, -1, _("Print"), size=(125, 30))
- self.cancelButton = wx.Button(self.panel, -1, _("Cancel"), size=(125, 30))
- self.errorLogButton = wx.Button(self.panel, -1, _("Error log"), size=(125, 30))
- self.motorsOffButton = wx.Button(self.panel, -1, _("Motors off"), size=(125, 30))
+ self.connectButton = wx.Button(self.toppanel, -1, _("Connect"), size=(125, 30))
+ self.printButton = wx.Button(self.toppanel, -1, _("Print"), size=(125, 30))
+ self.cancelButton = wx.Button(self.toppanel, -1, _("Cancel"), size=(125, 30))
+ self.errorLogButton = wx.Button(self.toppanel, -1, _("Error log"), size=(125, 30))
+ self.motorsOffButton = wx.Button(self.toppanel, -1, _("Motors off"), size=(125, 30))
self.movementBitmap = wx.StaticBitmap(self.panel, -1, wx.BitmapFromImage(wx.Image(
resources.getPathForImage('print-window.png'))), (0, 0))
self.temperatureBitmap = wx.StaticBitmap(self.panel, -1, wx.BitmapFromImage(wx.Image(
resources.getPathForImage('print-window-temperature-bed.png'))), (0, 0))
self.temperatureBedField = TemperatureField(self.panel, self._setBedTemperature)
self.temperatureGraph = TemperatureGraph(self.panel)
+ self.temperatureGraph.SetMinSize((250, 100))
self.progress = wx.Gauge(self.panel, -1, range=1000)
f = wx.Font(8, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False)
- self._termLog = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE | wx.TE_DONTWRAP)
+ self._termLog = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE)
self._termLog.SetFont(f)
self._termLog.SetEditable(0)
+ self._termLog.SetMinSize((385, -1))
self._termInput = wx.TextCtrl(self.panel, style=wx.TE_PROCESS_ENTER)
self._termInput.SetFont(f)
self.Bind(wx.EVT_TEXT_ENTER, self.OnTermEnterLine, self._termInput)
self._termInput.Bind(wx.EVT_CHAR, self.OnTermKey)
- self.sizer.Add(self.powerWarningText, pos=(0, 0), span=(1, 6), flag=wx.EXPAND|wx.BOTTOM, border=5)
- self.sizer.Add(self.connectButton, pos=(1, 0), flag=wx.LEFT, border=2)
- self.sizer.Add(self.printButton, pos=(1, 1), flag=wx.LEFT, border=2)
- self.sizer.Add(self.cancelButton, pos=(1, 2), flag=wx.LEFT, border=2)
- self.sizer.Add(self.errorLogButton, pos=(1, 4), flag=wx.LEFT, border=2)
- self.sizer.Add(self.motorsOffButton, pos=(1, 5), flag=wx.LEFT|wx.RIGHT, border=2)
- self.sizer.Add(self.movementBitmap, pos=(2, 0), span=(2, 3))
- self.sizer.Add(self.temperatureGraph, pos=(4, 0), span=(4, 2), flag=wx.EXPAND)
- self.sizer.Add(self.temperatureBitmap, pos=(4, 2))
- self.sizer.Add(self.temperatureField, pos=(5, 2))
- self.sizer.Add(self.temperatureBedBitmap, pos=(6, 2))
- self.sizer.Add(self.temperatureBedField, pos=(7, 2))
- self.sizer.Add(self._termLog, pos=(2, 3), span=(5, 3), flag=wx.EXPAND)
- self.sizer.Add(self._termInput, pos=(7, 3), span=(1, 3), flag=wx.EXPAND)
- self.sizer.Add(self.progress, pos=(8, 0), span=(1, 6), flag=wx.EXPAND|wx.BOTTOM)
+ self.topsizer.Add(self.powerWarningText, pos=(0, 0), span=(1, 6), flag=wx.EXPAND|wx.BOTTOM, border=5)
+ self.topsizer.Add(self.connectButton, pos=(1, 0), flag=wx.LEFT, border=2)
+ self.topsizer.Add(self.printButton, pos=(1, 1), flag=wx.LEFT, border=2)
+ self.topsizer.Add(self.cancelButton, pos=(1, 2), flag=wx.LEFT, border=2)
+ self.topsizer.Add(self.errorLogButton, pos=(1, 4), flag=wx.LEFT, border=2)
+ self.topsizer.Add(self.motorsOffButton, pos=(1, 5), flag=wx.LEFT|wx.RIGHT, border=2)
+ self.sizer.Add(self.movementBitmap, pos=(0, 0), span=(2, 3))
+ self.sizer.Add(self.temperatureGraph, pos=(2, 0), span=(4, 2), flag=wx.EXPAND)
+ self.sizer.Add(self.temperatureBitmap, pos=(2, 2))
+ self.sizer.Add(self.temperatureField, pos=(3, 2))
+ self.sizer.Add(self.temperatureBedBitmap, pos=(4, 2))
+ self.sizer.Add(self.temperatureBedField, pos=(5, 2))
+ self.sizer.Add(self._termLog, pos=(0, 3), span=(5, 3), flag=wx.EXPAND|wx.RIGHT, border=5)
+ self.sizer.Add(self._termInput, pos=(5, 3), span=(1, 3), flag=wx.EXPAND|wx.RIGHT, border=5)
+ self.sizer.Add(self.progress, pos=(6, 0), span=(1, 6), flag=wx.EXPAND|wx.BOTTOM)
self.Bind(wx.EVT_SIZE, self.OnSize)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.movementBitmap.Bind(wx.EVT_LEFT_DOWN, self.OnMovementClick)
- self.temperatureGraph.Bind(wx.EVT_LEFT_DOWN, self.OnTemperatureClick)
+ self.temperatureGraph.Bind(wx.EVT_LEFT_UP, self.OnTemperatureClick)
self.connectButton.Bind(wx.EVT_BUTTON, self.OnConnect)
self.printButton.Bind(wx.EVT_BUTTON, self.OnPrint)
self.cancelButton.Bind(wx.EVT_BUTTON, self.OnCancel)
# will be bigger than it should be until a power warning change
self.Layout()
self.Fit()
+ e.Skip()
def OnClose(self, e):
if self._printerConnection.hasActiveConnection():
type = self.powerManagement.get_providing_power_source_type()
if type == power.POWER_TYPE_AC and self.powerWarningText.IsShown():
self.powerWarningText.Hide()
- self.panel.Layout()
+ self.toppanel.Layout()
self.Layout()
self.Fit()
self.Refresh()
elif type != power.POWER_TYPE_AC and not self.powerWarningText.IsShown():
self.powerWarningText.Show()
- self.panel.Layout()
+ self.toppanel.Layout()
self.Layout()
self.Fit()
self.Refresh()
self._colorCommandMap[(r, g, b)] = (command, step)
def _moveXYZE(self, motor, step, feedrate):
+ # Prevent Z movement when paused and all moves when printing
if (not self._printerConnection.hasActiveConnection() or \
self._printerConnection.isActiveConnectionOpen()) and \
- (not self._printerConnection.isPaused() and \
+ (not (self._printerConnection.isPaused() and motor == 'Z') and \
not self._printerConnection.isPrinting()):
self._printerConnection.sendCommand("G91")
self._printerConnection.sendCommand("G1 %s%.1f F%d" % (motor, step, feedrate))
self.panel.Show(True)
else:
self._fullscreenTemperature = self.temperatureGraph.Clone(self)
- self._fullscreenTemperature.Bind(wx.EVT_LEFT_DOWN, self.OnTemperatureClick)
+ self._fullscreenTemperature.Bind(wx.EVT_LEFT_UP, self.OnTemperatureClick)
+ self._fullscreenTemperature.SetMinSize(self.panel.GetSize())
sizer.Add(self._fullscreenTemperature, 1, flag=wx.EXPAND)
self.panel.Show(False)
self.Layout()
self.cancelButton.Enable(False)
self.errorLogButton.Show(self._printerConnection.isInErrorState())
self._termInput.Enable(self._printerConnection.isAbleToSendDirectCommand())
+ self.Layout()
def _doPrinterConnectionUpdate(self, connection, extraInfo = None):
wx.CallAfter(self.__doPrinterConnectionUpdate, connection, extraInfo)
info += 'Temperature: %d' % (self._printerConnection.getTemperature(0))
if self._printerConnection.getBedTemperature() > 0:
info += ' Bed: %d' % (self._printerConnection.getBedTemperature())
- self.SetTitle(info.replace('\n', ', '))
+ self.SetTitle(info.replace('\n', ', ').strip().strip(','))
if isPrinting != self._isPrinting:
self._isPrinting = isPrinting
preventComputerFromSleeping(self, self._isPrinting)
self.text = IntCtrl(self, -1)
self.text.SetBounds(0, 300)
- self.text.SetSize((60, 25))
+ self.text.SetSize((60, 28))
self.unit = wx.StaticBitmap(self, -1, wx.BitmapFromImage(wx.Image(
resources.getPathForImage('print-window-temperature-unit.png'))), (0, 0))
self._lastDraw = now
dc = wx.MemoryDC()
dc.SelectObject(self._backBuffer)
+ dc.SetBackground(wx.Brush(wx.WHITE))
dc.Clear()
dc.SetFont(wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT))
w, h = self.GetSizeTuple()