Exemple #1
0
def cmdLoad(arg):
  xx, ext = os.path.splitext(arg)
  fn = os.path.basename(arg)

  if ext == ".ini":
    settings = getSettings(arg)
    if not settings.loaded:
      print("Failed to load settings file: %s." % arg)
      sys.exit(2)
    return

  if ext == ".h":
    if fn.startswith("board."):
      global board
      board = Board(getSettings())
      ok, fn = board.loadConfigFile(arg)
      if not ok:
        print("Failed trying to load board file: %s." % fn)
        sys.exit(2)
      return
    elif fn.startswith("printer."):
      global printer
      printer = Printer(getSettings())
      ok, fn = printer.loadConfigFile(arg)
      if not ok:
        print("Failed trying to load printer file: %s" % fn)
        sys.exit(2)
      return

  print("Unrecognized file: %s." % arg)
  print("Expected one of *.ini, board.*.h or printer.*.h.")
  sys.exit(2)
    def __init__(self, parent, nb, settings):
        wx.Panel.__init__(self, nb, wx.ID_ANY)
        self.parent = parent

        self.deco = Decoration()
        self.protFileLoaded = False

        self.settings = settings

        self.printer = Printer(self.settings)

        self.dir = os.path.join(self.settings.folder, "config")

        self.SetBackgroundColour(self.deco.getBackgroundColour())
        self.Bind(wx.EVT_PAINT, self.deco.onPaintBackground)
        sz = wx.BoxSizer(wx.HORIZONTAL)

        self.nb = wx.Notebook(self,
                              wx.ID_ANY,
                              size=(21, 21),
                              style=wx.BK_DEFAULT)
        self.nb.SetBackgroundColour(self.deco.getBackgroundColour())
        self.nb.SetFont(self.settings.font)

        self.pages = []
        self.titles = []
        self.pageModified = []
        self.pageValid = []

        self.pgMech = self.registerPage(MechanicalPage, "Mechanical")
        self.pgAcc = self.registerPage(AccelerationPage, "Acceleration")
        self.pgMiscellaneous = self.registerPage(MiscellaneousPage,
                                                 "Miscellaneous")

        sz.Add(self.nb, 1, wx.EXPAND + wx.ALL, 5)

        self.SetSizer(sz)
        self.Fit()
  def __init__(self, parent, nb, settings):
    wx.Panel.__init__(self, nb, wx.ID_ANY)
    self.parent = parent

    self.deco = Decoration()
    self.protFileLoaded = False

    self.settings = settings

    self.printer = Printer(self.settings)

    self.dir = os.path.join(self.settings.folder, "config")

    self.SetBackgroundColour(self.deco.getBackgroundColour())
    self.Bind(wx.EVT_PAINT, self.deco.onPaintBackground)
    sz = wx.BoxSizer(wx.HORIZONTAL)

    self.nb = wx.Notebook(self, wx.ID_ANY, size = (21, 21),
                          style = wx.BK_DEFAULT)
    self.nb.SetBackgroundColour(self.deco.getBackgroundColour())
    self.nb.SetFont(self.settings.font)

    self.pages = []
    self.titles = []
    self.pageModified = []
    self.pageValid = []

    self.pgMech = self.registerPage(MechanicalPage, "Mechanical")
    self.pgAcc = self.registerPage(AccelerationPage, "Acceleration")
    self.pgMiscellaneous = self.registerPage(MiscellaneousPage,
                                             "Miscellaneous")

    sz.Add(self.nb, 1, wx.EXPAND + wx.ALL, 5)

    self.SetSizer(sz)
    self.Fit()
class PrinterPanel(wx.Panel):
    def __init__(self, parent, nb, settings):
        wx.Panel.__init__(self, nb, wx.ID_ANY)
        self.parent = parent

        self.deco = Decoration()
        self.protFileLoaded = False

        self.settings = settings

        self.printer = Printer(self.settings)

        self.dir = os.path.join(self.settings.folder, "config")

        self.SetBackgroundColour(self.deco.getBackgroundColour())
        self.Bind(wx.EVT_PAINT, self.deco.onPaintBackground)
        sz = wx.BoxSizer(wx.HORIZONTAL)

        self.nb = wx.Notebook(self,
                              wx.ID_ANY,
                              size=(21, 21),
                              style=wx.BK_DEFAULT)
        self.nb.SetBackgroundColour(self.deco.getBackgroundColour())
        self.nb.SetFont(self.settings.font)

        self.pages = []
        self.titles = []
        self.pageModified = []
        self.pageValid = []

        self.pgMech = self.registerPage(MechanicalPage, "Mechanical")
        self.pgAcc = self.registerPage(AccelerationPage, "Acceleration")
        self.pgMiscellaneous = self.registerPage(MiscellaneousPage,
                                                 "Miscellaneous")

        sz.Add(self.nb, 1, wx.EXPAND + wx.ALL, 5)

        self.SetSizer(sz)
        self.Fit()

    def registerPage(self, klass, label, *args, **kwargs):
        page = klass(self,
                     self.nb,
                     len(self.pages),
                     *args,
                     font=self.settings.font,
                     **kwargs)
        self.nb.AddPage(page, label)
        self.pages.append(page)
        self.titles.append(label)
        self.pageModified.append(False)
        self.pageValid.append(True)
        return page

    def assertModified(self, pg, flag=True):
        self.pageModified[pg] = flag
        self.modifyTab(pg)

    def isModified(self):
        return (True in self.pageModified)

    def isValid(self):
        return not (False in self.pageValid)

    def hasData(self):
        return self.printer.hasData()

    def getFileName(self):
        return self.printer.configFile

    def assertValid(self, pg, flag=True):
        self.pageValid[pg] = flag
        self.modifyTab(pg)

        if False in self.pageValid:
            self.parent.enableSavePrinter(False, False)
        else:
            self.parent.enableSavePrinter(not self.protFileLoaded, True)

    def modifyTab(self, pg):
        if self.pageModified[pg] and not self.pageValid[pg]:
            pfx = "?* "
        elif self.pageModified[pg]:
            pfx = "* "
        elif not self.pageValid[pg]:
            pfx = "? "
        else:
            pfx = ""

        self.nb.SetPageText(pg, pfx + self.titles[pg])
        if True in self.pageModified and False in self.pageValid:
            pfx = "?* "
        elif True in self.pageModified:
            pfx = "* "
        elif False in self.pageValid:
            pfx = "? "
        else:
            pfx = ""
        self.parent.setPrinterTabDecor(pfx)

    def setHeaters(self, ht):
        return self.pgMiscellaneous.setHeaters(ht)

    def onClose(self, evt):
        if not self.confirmLoseChanges("exit"):
            return

        self.Destroy()

    def confirmLoseChanges(self, msg):
        if True not in self.pageModified:
            return True

        dlg = wx.MessageDialog(
            self, "Are you sure you want to " + msg + "?\n"
            "There are changes to your printer "
            "configuration that will be lost.", "Changes pending",
            wx.YES_NO | wx.NO_DEFAULT | wx.ICON_INFORMATION)
        rc = dlg.ShowModal()
        dlg.Destroy()

        if rc != wx.ID_YES:
            return False

        return True

    def onLoadConfig(self, evt):
        if not self.confirmLoseChanges("load a new printer configuration"):
            return

        if platform.startswith("darwin"):
            # Mac OS X appears to be a bit limited on wildcards.
            wildcard = "Printer configuration (printer.*.h)|*.h"
        else:
            wildcard = "Printer configuration (printer.*.h)|printer.*.h"

        dlg = wx.FileDialog(self,
                            message="Choose a printer config file",
                            defaultDir=self.dir,
                            defaultFile="",
                            wildcard=wildcard,
                            style=wx.OPEN | wx.CHANGE_DIR)

        path = None
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()

        dlg.Destroy()
        if path is None:
            return

        self.dir = os.path.dirname(path)
        rc, efn = self.loadConfigFile(path)

        if not rc:
            dlg = wx.MessageDialog(self, "Unable to process file %s." % efn,
                                   "File error", wx.OK + wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            return

    def loadConfigFile(self, fn):
        ok, file = self.printer.loadConfigFile(fn)
        if not ok:
            return ok, file

        if os.path.basename(fn) in protectedFiles:
            self.parent.enableSavePrinter(False, True)
            self.protFileLoaded = True
        else:
            self.protFileLoaded = False
            self.parent.enableSavePrinter(True, True)
        self.parent.setPrinterTabFile(os.path.basename(fn))

        for pg in self.pages:
            pg.insertValues(self.printer.cfgValues)
            pg.setHelpText(self.printer.helpText)

        k = 'DC_EXTRUDER'
        if k in self.printer.cfgValues.keys(
        ) and self.printer.cfgValues[k][1] == True:
            self.pgMiscellaneous.setOriginalHeater(self.cfgValues[k][0])
        else:
            self.pgMiscellaneous.setOriginalHeater(None)

        return True, None

    def onSaveConfig(self, evt):
        path = self.getFileName()
        return self.saveConfigFile(path)

    def onSaveConfigAs(self, evt):
        if platform.startswith("darwin"):
            # Mac OS X appears to be a bit limited on wildcards.
            wildcard = "Printer configuration (printer.*.h)|*.h"
        else:
            wildcard = "Printer configuration (printer.*.h)|printer.*.h"

        dlg = wx.FileDialog(self,
                            message="Save as ...",
                            defaultDir=self.dir,
                            defaultFile="",
                            wildcard=wildcard,
                            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)

        val = dlg.ShowModal()

        if val != wx.ID_OK:
            dlg.Destroy()
            return

        path = dlg.GetPath()
        dlg.Destroy()

        rc = self.saveConfigFile(path)
        if rc:
            self.parent.setPrinterTabFile(os.path.basename(path))
            self.protFileLoaded = False
            self.parent.enableSavePrinter(True, True)
        return rc

    def saveConfigFile(self, path):
        if os.path.basename(path) in protectedFiles:
            dlg = wx.MessageDialog(
                self, "It's not allowed to overwrite files "
                "distributed by Teacup. Choose another name.",
                "Protected file error", wx.OK + wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        if not os.path.basename(path).startswith("printer."):
            dlg = wx.MessageDialog(
                self, "Illegal file name: %s.\n"
                "File name must begin with \"printer.\"" % path,
                "Illegal file name", wx.OK + wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        values = {}
        for pg in self.pages:
            v1 = pg.getValues()
            for k in v1.keys():
                values[k] = v1[k]

        ext = os.path.splitext(os.path.basename(path))[1]
        self.dir = os.path.dirname(path)

        if ext == "":
            path += ".h"

        try:
            self.printer.saveConfigFile(path, values)
        except:
            dlg = wx.MessageDialog(self, "Unable to write to file %s." % path,
                                   "File error", wx.OK + wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        return True
class PrinterPanel(wx.Panel):
  def __init__(self, parent, nb, settings):
    wx.Panel.__init__(self, nb, wx.ID_ANY)
    self.parent = parent

    self.deco = Decoration()
    self.protFileLoaded = False

    self.settings = settings

    self.printer = Printer(self.settings)

    self.dir = os.path.join(self.settings.folder, "config")

    self.SetBackgroundColour(self.deco.getBackgroundColour())
    self.Bind(wx.EVT_PAINT, self.deco.onPaintBackground)
    sz = wx.BoxSizer(wx.HORIZONTAL)

    self.nb = wx.Notebook(self, wx.ID_ANY, size = (21, 21),
                          style = wx.BK_DEFAULT)
    self.nb.SetBackgroundColour(self.deco.getBackgroundColour())
    self.nb.SetFont(self.settings.font)

    self.pages = []
    self.titles = []
    self.pageModified = []
    self.pageValid = []

    self.pgMech = self.registerPage(MechanicalPage, "Mechanical")
    self.pgAcc = self.registerPage(AccelerationPage, "Acceleration")
    self.pgMiscellaneous = self.registerPage(MiscellaneousPage,
                                             "Miscellaneous")

    sz.Add(self.nb, 1, wx.EXPAND + wx.ALL, 5)

    self.SetSizer(sz)
    self.Fit()

  def registerPage(self, klass, label, *args, **kwargs):
    page = klass(self, self.nb, len(self.pages), *args,
                 font = self.settings.font, **kwargs)
    self.nb.AddPage(page, label)
    self.pages.append(page)
    self.titles.append(label)
    self.pageModified.append(False)
    self.pageValid.append(True)
    return page

  def assertModified(self, pg, flag = True):
    self.pageModified[pg] = flag
    self.modifyTab(pg)

  def isModified(self):
    return (True in self.pageModified)

  def isValid(self):
    return not (False in self.pageValid)

  def hasData(self):
    return self.printer.hasData()

  def getFileName(self):
    return self.printer.configFile

  def assertValid(self, pg, flag = True):
    self.pageValid[pg] = flag
    self.modifyTab(pg)

    if False in self.pageValid:
      self.parent.enableSavePrinter(False, False)
    else:
      self.parent.enableSavePrinter(not self.protFileLoaded, True)

  def modifyTab(self, pg):
    if self.pageModified[pg] and not self.pageValid[pg]:
      pfx = "?* "
    elif self.pageModified[pg]:
      pfx = "* "
    elif not self.pageValid[pg]:
      pfx = "? "
    else:
      pfx = ""

    self.nb.SetPageText(pg, pfx + self.titles[pg])
    if True in self.pageModified and False in self.pageValid:
      pfx = "?* "
    elif True in self.pageModified:
      pfx = "* "
    elif False in self.pageValid:
      pfx = "? "
    else:
      pfx = ""
    self.parent.setPrinterTabDecor(pfx)

  def setHeaters(self, ht):
    return self.pgMiscellaneous.setHeaters(ht)

  def onClose(self, evt):
    if not self.confirmLoseChanges("exit"):
      return

    self.Destroy()

  def confirmLoseChanges(self, msg):
    if True not in self.pageModified:
      return True

    dlg = wx.MessageDialog(self, "Are you sure you want to " + msg + "?\n"
                                 "There are changes to your printer "
                                 "configuration that will be lost.",
                           "Changes pending",
                           wx.YES_NO | wx.NO_DEFAULT | wx.ICON_INFORMATION)
    rc = dlg.ShowModal()
    dlg.Destroy()

    if rc != wx.ID_YES:
      return False

    return True

  def onLoadConfig(self, evt):
    if not self.confirmLoseChanges("load a new printer configuration"):
      return

    if platform.startswith("darwin"):
      # Mac OS X appears to be a bit limited on wildcards.
      wildcard = "Printer configuration (printer.*.h)|*.h"
    else:
      wildcard = "Printer configuration (printer.*.h)|printer.*.h"

    dlg = wx.FileDialog(self, message = "Choose a printer config file",
                        defaultDir = self.dir, defaultFile = "",
                        wildcard = wildcard, style = wx.OPEN | wx.CHANGE_DIR)

    path = None
    if dlg.ShowModal() == wx.ID_OK:
      path = dlg.GetPath()

    dlg.Destroy()
    if path is None:
      return

    self.dir = os.path.dirname(path)
    rc, efn = self.loadConfigFile(path)

    if not rc:
      dlg = wx.MessageDialog(self, "Unable to process file %s." % efn,
                             "File error", wx.OK + wx.ICON_ERROR)
      dlg.ShowModal()
      dlg.Destroy()
      return

  def loadConfigFile(self, fn):
    ok, file = self.printer.loadConfigFile(fn)
    if not ok:
      return ok, file

    if os.path.basename(fn) in protectedFiles:
      self.parent.enableSavePrinter(False, True)
      self.protFileLoaded = True
    else:
      self.protFileLoaded = False
      self.parent.enableSavePrinter(True, True)
    self.parent.setPrinterTabFile(os.path.basename(fn))

    for pg in self.pages:
      pg.insertValues(self.printer.cfgValues)
      pg.setHelpText(self.printer.helpText)

    k = 'DC_EXTRUDER'
    if k in self.printer.cfgValues.keys() and self.printer.cfgValues[k][1] == True:
      self.pgMiscellaneous.setOriginalHeater(self.cfgValues[k][0])
    else:
      self.pgMiscellaneous.setOriginalHeater(None)

    return True, None

  def onSaveConfig(self, evt):
    path = self.getFileName()
    return self.saveConfigFile(path)

  def onSaveConfigAs(self, evt):
    if platform.startswith("darwin"):
      # Mac OS X appears to be a bit limited on wildcards.
      wildcard = "Printer configuration (printer.*.h)|*.h"
    else:
      wildcard = "Printer configuration (printer.*.h)|printer.*.h"

    dlg = wx.FileDialog(self, message = "Save as ...", defaultDir = self.dir,
                        defaultFile = "", wildcard = wildcard,
                        style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)

    val = dlg.ShowModal()

    if val != wx.ID_OK:
      dlg.Destroy()
      return

    path = dlg.GetPath()
    dlg.Destroy()

    rc = self.saveConfigFile(path)
    if rc:
      self.parent.setPrinterTabFile(os.path.basename(path))
      self.protFileLoaded = False
      self.parent.enableSavePrinter(True, True)
    return rc

  def saveConfigFile(self, path):
    if os.path.basename(path) in protectedFiles:
      dlg = wx.MessageDialog(self, "It's not allowed to overwrite files "
                             "distributed by Teacup. Choose another name.",
                             "Protected file error", wx.OK + wx.ICON_ERROR)
      dlg.ShowModal()
      dlg.Destroy()
      return False

    if not os.path.basename(path).startswith("printer."):
      dlg = wx.MessageDialog(self, "Illegal file name: %s.\n"
                             "File name must begin with \"printer.\"" % path,
                             "Illegal file name", wx.OK + wx.ICON_ERROR)
      dlg.ShowModal()
      dlg.Destroy()
      return False

    values = {}
    for pg in self.pages:
      v1 = pg.getValues()
      for k in v1.keys():
        values[k] = v1[k]

    ext = os.path.splitext(os.path.basename(path))[1]
    self.dir = os.path.dirname(path)

    if ext == "":
      path += ".h"

    try:
      self.printer.saveConfigFile(path, values)
    except:
      dlg = wx.MessageDialog(self, "Unable to write to file %s." % path,
                             "File error", wx.OK + wx.ICON_ERROR)
      dlg.ShowModal()
      dlg.Destroy()
      return False

    return True