Commit 5e76ce2e authored by Guillaume Seguin's avatar Guillaume Seguin

Merge branch 'master' of github.com:iXce/Printrun into experimental

parents 41986971 f2d6f2de
...@@ -25,6 +25,10 @@ now there is only one, for German. New ones can be created: ...@@ -25,6 +25,10 @@ now there is only one, for German. New ones can be created:
# Edit the .po file to add messages for newlang # Edit the .po file to add messages for newlang
msgfmt -o ${newlang}.mo ${newlang}.po msgfmt -o ${newlang}.mo ${newlang}.po
To update a previously created message catalog from the template, use :
msgmerge -U locale/fr/LC_MESSAGES/${lang}.po locale/pronterface.pot
As currently coded, the default location for these message catalogs is As currently coded, the default location for these message catalogs is
/usr/share/pronterface/locale/ /usr/share/pronterface/locale/
......
...@@ -65,7 +65,6 @@ This alternative approach is confirmed to work on Mac OS X 10.6.8. ...@@ -65,7 +65,6 @@ This alternative approach is confirmed to work on Mac OS X 10.6.8.
`sudo python setup.py install` `sudo python setup.py install`
Then repeat the same with http://launchpad.net/pyreadline/trunk/1.7/+download/pyreadline-1.7.zip
Then repeat the same with http://http://pyglet.googlecode.com/files/pyglet-1.1.4.zip Then repeat the same with http://http://pyglet.googlecode.com/files/pyglet-1.1.4.zip
# USING PRONTERFACE # USING PRONTERFACE
......
...@@ -275,7 +275,7 @@ class gviz(wx.Panel): ...@@ -275,7 +275,7 @@ class gviz(wx.Panel):
start_pos = self.hilightpos[:] if hilight else self.lastpos[:] start_pos = self.hilightpos[:] if hilight else self.lastpos[:]
if gcode[0] == "g1": if gcode[0] in [ "g0", "g1" ]:
target = _readgcode() target = _readgcode()
line = [ _x(start_pos[0]), _y(start_pos[1]), _x(target[0]), _y(target[1]) ] line = [ _x(start_pos[0]), _y(start_pos[1]), _x(target[0]), _y(target[1]) ]
if not hilight: if not hilight:
......
This diff is collapsed.
# French Plater Message Catalog
# Copyright (C) 2012 Guillaume Seguin
# Guillaume Seguin <guillaume@segu.in>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: Plater\n"
"POT-Creation-Date: 2012-02-26 02:40+CET\n"
"PO-Revision-Date: 2012-02-26 02:41+0100\n"
"Last-Translator: Guillaume Seguin <guillaume@segu.in>\n"
"Language-Team: FR <guillaume@segu.in>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: plater.py:247
msgid "Plate building tool"
msgstr "Outil d'assemblage de plateau"
#: plater.py:253
msgid "Clear"
msgstr "Vider"
#: plater.py:254
msgid "Load"
msgstr "Charger"
#: plater.py:256
msgid "Export"
msgstr "Exporter"
#: plater.py:259
msgid "Done"
msgstr "Terminé"
#: plater.py:261
msgid "Cancel"
msgstr "Annuler"
#: plater.py:263
msgid "Snap to Z = 0"
msgstr "Poser en Z = 0"
#: plater.py:264
msgid "Put at 100, 100"
msgstr "Placer en 100, 100"
#: plater.py:265
msgid "Delete"
msgstr "Supprimer"
#: plater.py:266
msgid "Auto"
msgstr "Auto"
#: plater.py:290
msgid "Autoplating"
msgstr "Placement auto"
#: plater.py:318
msgid "Bed full, sorry sir :("
msgstr "Le lit est plein, désolé :("
#: plater.py:328
msgid ""
"Are you sure you want to clear the grid? All unsaved changes will be lost."
msgstr ""
"Êtes vous sur de vouloir vider la grille ? Toutes les modifications non "
"enregistrées seront perdues."
#: plater.py:328
msgid "Clear the grid?"
msgstr "Vider la grille ?"
#: plater.py:370
msgid "Pick file to save to"
msgstr "Choisir le fichier dans lequel enregistrer"
#: plater.py:371
msgid "STL files (;*.stl;*.STL;)"
msgstr "Fichiers STL (;*.stl;*.STL;)"
#: plater.py:391
msgid "wrote %s"
msgstr "%s écrit"
#: plater.py:394
msgid "Pick file to load"
msgstr "Choisir le fichier à charger"
#: plater.py:395
msgid "STL files (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scad"
msgstr "Fichiers STL (;*.stl;*.STL;)|*.stl|Fichiers OpenSCAD (;*.scad;)|*.scad"
This diff is collapsed.
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2012-01-09 15:07+CET\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Italian RepRap Community <reprap-italia@googlegroups.com>\n"
"Language-Team: Italian RepRap Community <reprap-italia@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: plater.py:223
msgid "Plate building tool"
msgstr "Strumento di posizionamento sul piatto"
#: plater.py:229
msgid "Clear"
msgstr "Pulisci"
#: plater.py:230
msgid "Load"
msgstr "Carica"
#: plater.py:232
msgid "Export"
msgstr "Esporta"
#: plater.py:235
msgid "Done"
msgstr "Fatto"
#: plater.py:237
msgid "Cancel"
msgstr "Cancella"
#: plater.py:239
msgid "Snap to Z = 0"
msgstr "Vai a Z = 0"
#: plater.py:240
msgid "Put at 100, 100"
msgstr "Metti a 100,100"
#: plater.py:241
msgid "Delete"
msgstr "Elimina"
#: plater.py:242
msgid "Auto"
msgstr "Automatico"
#: plater.py:266
msgid "Autoplating"
msgstr "Posizionamento automatico sul piatto"
#: plater.py:294
msgid "Bed full, sorry sir :("
msgstr "Il letto è pieno, mi dispiace :("
#: plater.py:304
msgid "Are you sure you want to clear the grid? All unsaved changes will be lost."
msgstr "Sei sicuro di voler pulire la griglia? Tutte le modifiche non salvate saranno perse."
#: plater.py:304
msgid "Clear the grid?"
msgstr "Pulire la griglia?"
#: plater.py:346
msgid "Pick file to save to"
msgstr "Scegli un file in cui salvare"
#: plater.py:347
msgid "STL files (;*.stl;)"
msgstr "files STL (;*.stl;)"
#: plater.py:367
msgid "wrote "
msgstr "scritti "
#: plater.py:370
msgid "Pick file to load"
msgstr "Scegli un file da caricare"
#: plater.py:371
msgid "STL files (;*.stl;)|*.stl|OpenSCAD files (;*.scad;)|*.scad"
msgstr "files STL (;*.stl;)|*.stl|files OpenSCAD (;*.scad;)|*.scad"
This diff is collapsed.
This diff is collapsed.
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2012-01-09 15:07+CET\n" "POT-Creation-Date: 2012-02-26 02:40+CET\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -15,79 +15,79 @@ msgstr "" ...@@ -15,79 +15,79 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
#: plater.py:223 #: plater.py:247
msgid "Plate building tool" msgid "Plate building tool"
msgstr "" msgstr ""
#: plater.py:229 #: plater.py:253
msgid "Clear" msgid "Clear"
msgstr "" msgstr ""
#: plater.py:230 #: plater.py:254
msgid "Load" msgid "Load"
msgstr "" msgstr ""
#: plater.py:232 #: plater.py:256
msgid "Export" msgid "Export"
msgstr "" msgstr ""
#: plater.py:235 #: plater.py:259
msgid "Done" msgid "Done"
msgstr "" msgstr ""
#: plater.py:237 #: plater.py:261
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: plater.py:239 #: plater.py:263
msgid "Snap to Z = 0" msgid "Snap to Z = 0"
msgstr "" msgstr ""
#: plater.py:240 #: plater.py:264
msgid "Put at 100, 100" msgid "Put at 100, 100"
msgstr "" msgstr ""
#: plater.py:241 #: plater.py:265
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: plater.py:242 #: plater.py:266
msgid "Auto" msgid "Auto"
msgstr "" msgstr ""
#: plater.py:266 #: plater.py:290
msgid "Autoplating" msgid "Autoplating"
msgstr "" msgstr ""
#: plater.py:294 #: plater.py:318
msgid "Bed full, sorry sir :(" msgid "Bed full, sorry sir :("
msgstr "" msgstr ""
#: plater.py:304 #: plater.py:328
msgid "Are you sure you want to clear the grid? All unsaved changes will be lost." msgid "Are you sure you want to clear the grid? All unsaved changes will be lost."
msgstr "" msgstr ""
#: plater.py:304 #: plater.py:328
msgid "Clear the grid?" msgid "Clear the grid?"
msgstr "" msgstr ""
#: plater.py:346 #: plater.py:370
msgid "Pick file to save to" msgid "Pick file to save to"
msgstr "" msgstr ""
#: plater.py:347 #: plater.py:371
msgid "STL files (;*.stl;)" msgid "STL files (;*.stl;*.STL;)"
msgstr "" msgstr ""
#: plater.py:367 #: plater.py:391
msgid "wrote " msgid "wrote %s"
msgstr "" msgstr ""
#: plater.py:370 #: plater.py:394
msgid "Pick file to load" msgid "Pick file to load"
msgstr "" msgstr ""
#: plater.py:371 #: plater.py:395
msgid "STL files (;*.stl;)|*.stl|OpenSCAD files (;*.scad;)|*.scad" msgid "STL files (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scad"
msgstr "" msgstr ""
This diff is collapsed.
...@@ -388,7 +388,7 @@ class stlwin(wx.Frame): ...@@ -388,7 +388,7 @@ class stlwin(wx.Frame):
facets += i.facets facets += i.facets
sf.close() sf.close()
stltool.emitstl(name, facets, "plater_export") stltool.emitstl(name, facets, "plater_export")
print _("wrote "), name print _("wrote %s") % name
def right(self, event): def right(self, event):
dlg = wx.FileDialog(self, _("Pick file to load"), self.basedir, style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg = wx.FileDialog(self, _("Pick file to load"), self.basedir, style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Printrun. If not, see <http://www.gnu.org/licenses/>. # along with Printrun. If not, see <http://www.gnu.org/licenses/>.
from serial import Serial from serial import Serial, SerialException
from threading import Thread from threading import Thread
from select import error as SelectError from select import error as SelectError
import time, getopt, sys import time, getopt, sys
...@@ -100,6 +100,9 @@ class printcore(): ...@@ -100,6 +100,9 @@ class printcore():
break break
else: else:
raise raise
except SerialException, e:
print "Can't read from printer (disconnected?)."
break
if(len(line)>1): if(len(line)>1):
self.log+=[line] self.log+=[line]
...@@ -279,7 +282,10 @@ class printcore(): ...@@ -279,7 +282,10 @@ class printcore():
self.sendcb(command) self.sendcb(command)
except: except:
pass pass
try:
self.printer.write(str(command+"\n")) self.printer.write(str(command+"\n"))
except SerialException, e:
print "Can't write to printer (disconnected?)."
if __name__ == '__main__': if __name__ == '__main__':
baud = 115200 baud = 115200
......
...@@ -166,7 +166,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -166,7 +166,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
def online(self): def online(self):
print _("Printer is now online.") print _("Printer is now online.")
self.connectbtn.SetLabel("Disconnect") self.connectbtn.SetLabel(_("Disconnect"))
self.connectbtn.Bind(wx.EVT_BUTTON,self.disconnect) self.connectbtn.Bind(wx.EVT_BUTTON,self.disconnect)
for i in self.printerControls: for i in self.printerControls:
...@@ -225,7 +225,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -225,7 +225,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if f>=0: if f>=0:
if self.p.online: if self.p.online:
self.p.send_now("M104 S"+l) self.p.send_now("M104 S"+l)
print _("Setting hotend temperature to "),f,_(" degrees Celsius.") print _("Setting hotend temperature to %f degrees Celsius.") % f
self.hsetpoint=f self.hsetpoint=f
self.hottgauge.SetTarget(int(f)) self.hottgauge.SetTarget(int(f))
if f>0: if f>0:
...@@ -248,7 +248,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -248,7 +248,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
else: else:
print _("You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0.") print _("You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0.")
except Exception,x: except Exception,x:
print _("You must enter a temperature. (%s)" % (repr(x),)) print _("You must enter a temperature. (%s)") % (repr(x),)
def do_bedtemp(self,l=""): def do_bedtemp(self,l=""):
try: try:
...@@ -261,7 +261,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -261,7 +261,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if f>=0: if f>=0:
if self.p.online: if self.p.online:
self.p.send_now("M140 S"+l) self.p.send_now("M140 S"+l)
print _("Setting bed temperature to "),f,_(" degrees Celsius.") print _("Setting bed temperature to %f degrees Celsius.") % f
self.bsetpoint=f self.bsetpoint=f
self.bedtgauge.SetTarget(int(f)) self.bedtgauge.SetTarget(int(f))
if f>0: if f>0:
...@@ -413,7 +413,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -413,7 +413,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if self.macros.has_key(macro): if self.macros.has_key(macro):
old_def = self.macros[macro] old_def = self.macros[macro]
elif hasattr(self.__class__,"do_"+macro): elif hasattr(self.__class__,"do_"+macro):
print _("Name '")+macro+_("' is being used by built-in command") print _("Name '%s' is being used by built-in command") % macro
return return
elif len([c for c in macro if not c.isalnum() and c != "_"]): elif len([c for c in macro if not c.isalnum() and c != "_"]):
print _("Macro name may contain only alphanumeric symbols and underscores") print _("Macro name may contain only alphanumeric symbols and underscores")
...@@ -1175,14 +1175,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1175,14 +1175,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if self.p.printing: if self.p.printing:
fractioncomplete = float(self.p.queueindex)/len(self.p.mainqueue) fractioncomplete = float(self.p.queueindex)/len(self.p.mainqueue)
string+= _(" Printing:%04.2f %% |") % (100*float(self.p.queueindex)/len(self.p.mainqueue),) string+= _(" Printing:%04.2f %% |") % (100*float(self.p.queueindex)/len(self.p.mainqueue),)
string+= _(" Line# ") + str(self.p.queueindex) + _("of ") + str(len(self.p.mainqueue)) + _(" lines |" ) string+= _(" Line# %d of %d lines |" ) % (self.p.queueindex, len(self.p.mainqueue))
if fractioncomplete > 0.0: if fractioncomplete > 0.0:
secondselapsed = int(time.time()-self.starttime) secondselapsed = int(time.time()-self.starttime)
secondsestimate = secondselapsed/fractioncomplete secondsestimate = secondselapsed/fractioncomplete
secondsremain = secondsestimate - secondselapsed secondsremain = secondsestimate - secondselapsed
string+= _(" Est: ") + time.strftime('%H:%M:%S', time.gmtime(secondsremain)) string+= _(" Est: %s of %s remaining | ") % (time.strftime('%H:%M:%S', time.gmtime(secondsremain)),
string+= _(" of: ") + time.strftime('%H:%M:%S', time.gmtime(secondsestimate)) time.strftime('%H:%M:%S', time.gmtime(secondsestimate)))
string+= _(" Remaining | ")
string+= _(" Z: %0.2f mm") % self.curlayer string+= _(" Z: %0.2f mm") % self.curlayer
wx.CallAfter(self.status.SetStatusText,string) wx.CallAfter(self.status.SetStatusText,string)
wx.CallAfter(self.gviz.Refresh) wx.CallAfter(self.gviz.Refresh)
...@@ -1390,7 +1389,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1390,7 +1389,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
of=open(self.filename) of=open(self.filename)
self.f=[i.replace("\n","").replace("\r","") for i in of] self.f=[i.replace("\n","").replace("\r","") for i in of]
of.close of.close
self.status.SetStatusText(_("Loaded ") + name + _(", %d lines") % (len(self.f),)) self.status.SetStatusText(_("Loaded %s, %d lines") % (name, len(self.f)))
wx.CallAfter(self.printbtn.SetLabel, _("Print")) wx.CallAfter(self.printbtn.SetLabel, _("Print"))
wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) wx.CallAfter(self.pausebtn.SetLabel, _("Pause"))
wx.CallAfter(self.pausebtn.Disable) wx.CallAfter(self.pausebtn.Disable)
...@@ -1401,9 +1400,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1401,9 +1400,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
def loadviz(self): def loadviz(self):
Xtot,Ytot,Ztot,Xmin,Xmax,Ymin,Ymax,Zmin,Zmax = pronsole.measurements(self.f) Xtot,Ytot,Ztot,Xmin,Xmax,Ymin,Ymax,Zmin,Zmax = pronsole.measurements(self.f)
print pronsole.totalelength(self.f), _("mm of filament used in this print\n") print pronsole.totalelength(self.f), _("mm of filament used in this print\n")
print _("the print goes from"),Xmin,_("mm to"),Xmax,_("mm in X\nand is"),Xtot,_("mm wide\n") print _("the print goes from %f mm to %f mm in X\nand is %f mm wide\n") % (Xmin, Xmax, Xtot)
print _("the print goes from"),Ymin,_("mm to"),Ymax,_("mm in Y\nand is"),Ytot,_("mm wide\n") print _("the print goes from %f mm to %f mm in Y\nand is %f mm wide\n") % (Ymin, Ymax, Ytot)
print _("the print goes from"),Zmin,_("mm to"),Zmax,_("mm in Z\nand is"),Ztot,_("mm high\n") print _("the print goes from %f mm to %f mm in Z\nand is %f mm high\n") % (Zmin, Zmax, Ztot)
print _("Estimated duration (pessimistic): "), pronsole.estimate_duration(self.f) print _("Estimated duration (pessimistic): "), pronsole.estimate_duration(self.f)
#import time #import time
#t0=time.time() #t0=time.time()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment