diff --git a/main.py b/main.py index e5866f4..93cf568 100644 --- a/main.py +++ b/main.py @@ -24,6 +24,8 @@ from PIL import ImageTk class WOWFileViewer: + _Types = ("Thickness", "Speed up", "Exposure level", "Speed down", "Exposure time", "Up movement distance") + def __init__(self, master, wowfile): self.currentLayer = 0 self.master = master @@ -69,6 +71,9 @@ class WOWFileViewer: self.thick_lbl.grid(row=3, column=1, sticky=tk.E) self.thick_ent = tk.Entry(master, textvariable=self.thick_var, width=10) self.thick_ent.grid(row=3, column=2, sticky=tk.E + tk.W) + self.thick_btn = tk.Button(master, text="A", + command=lambda: self.applyValueToAllLayer(1, self.thick_var.get())) + self.thick_btn.grid(row=3, column=3, sticky=tk.E + tk.W + tk.N + tk.S) self.spdu_var = tk.StringVar() self.spdu_var.set(str(self.layer.speed_up)) @@ -76,6 +81,9 @@ class WOWFileViewer: self.spdu_lbl.grid(row=3, column=4, sticky=tk.E) self.spdu_ent = tk.Entry(master, textvariable=self.spdu_var, width=10) self.spdu_ent.grid(row=3, column=5, sticky=tk.E + tk.W) + self.spdu_btn = tk.Button(master, text="A", + command=lambda: self.applyValueToAllLayer(2, self.spdu_var.get())) + self.spdu_btn.grid(row=3, column=6, sticky=tk.E + tk.W + tk.N + tk.S) # Row 4 self.exp_var = tk.StringVar() @@ -84,6 +92,9 @@ class WOWFileViewer: self.exp_lbl.grid(row=4, column=1, sticky=tk.E) self.exp_ent = tk.Entry(master, textvariable=self.exp_var, width=10) self.exp_ent.grid(row=4, column=2, sticky=tk.E+tk.W) + self.exp_btn = tk.Button(master, text="A", + command=lambda: self.applyValueToAllLayer(3, self.exp_var.get())) + self.exp_btn.grid(row=4, column=3, sticky=tk.E + tk.W + tk.N + tk.S) self.spdd_var = tk.StringVar() self.spdd_var.set(str(self.layer.speed_down)) @@ -91,6 +102,9 @@ class WOWFileViewer: self.spdd_lbl.grid(row=4, column=4, sticky=tk.E) self.spdd_ent = tk.Entry(master, textvariable=self.spdd_var, width=10) self.spdd_ent.grid(row=4, column=5, sticky=tk.E+tk.W) + self.spdd_btn = tk.Button(master, text="A", + command=lambda: self.applyValueToAllLayer(4, self.spdd_var.get())) + self.spdd_btn.grid(row=4, column=6, sticky=tk.E + tk.W + tk.N + tk.S) # Row 5 self.expt_var = tk.StringVar() @@ -99,6 +113,9 @@ class WOWFileViewer: self.expt_lbl.grid(row=5, column=1, sticky=tk.E) self.expt_ent = tk.Entry(master, textvariable=self.expt_var, width=10) self.expt_ent.grid(row=5, column=2, sticky=tk.E+tk.W) + self.expt_btn = tk.Button(master, text="A", + command=lambda: self.applyValueToAllLayer(5, self.expt_var.get())) + self.expt_btn.grid(row=5, column=3, sticky=tk.E + tk.W + tk.N + tk.S) self.updist_var = tk.StringVar() self.updist_var.set(str(self.layer.up_distance)) @@ -106,6 +123,9 @@ class WOWFileViewer: self.updist_lbl.grid(row=5, column=4, sticky=tk.E) self.updist_ent = tk.Entry(master, textvariable=self.updist_var, width=10) self.updist_ent.grid(row=5, column=5, sticky=tk.E + tk.W) + self.updist_btn = tk.Button(master, text="A", + command=lambda: self.applyValueToAllLayer(6, self.updist_var.get())) + self.updist_btn.grid(row=5, column=6, sticky=tk.E + tk.W + tk.N + tk.S) # Row 6 self.printtime_var = tk.StringVar() @@ -138,6 +158,42 @@ class WOWFileViewer: except ValueError: tk.messagebox.showerror("WoW File Viewer", "Value error:\nOne of the layer field is invalid, please check") + def applyValueToAllLayer(self, type, value): + strtype = self._Types[type-1] + answer = tk.messagebox.askyesno("WoW File Viewer", "Are you sure you want to apply the value '{value}'\n" + "to all layer for '{type}'?".format(value=value, + type=strtype)) + if answer == tk.YES: + # The fun begins! + try: + for l in self.wowfile.layers: + if type == 1: # Thickness + l.thickness = round(float(value) / 1000, 10) + elif type == 2: # Speed up + l.speed_up = round(float(value), 5) + elif type == 3: # Exposure + l.exposition = round(float(value), 5) + elif type == 4: # Speed down + l.speed_down = round(float(value), 5) + elif type == 5: # Exposure time + l.exposition_time = round(float(value), 5) + elif type == 6: # Up movement distance + l.up_distance = round(float(value), 5) + + l.update_movetime() + + self.printtime_var.set(str(self.wowfile.get_printtime(human_readable=True))) + self.layerChange(self.layer.number) + except ValueError: + tk.messagebox.showerror("WoW File Viewer", + "Value error:\n" + "The value {value} is not valid, please check".format(value=value)) + + def saveAsNewFile(self): + newfile = tk.filedialog.asksaveasfilename(defaultextension=".wow", + filetypes=(("WOW print file", "*.wow"),("All files", "*.*"))) + self.wowfile.write_wow(newfile) + def sliderUpdate(self, pos): self.layerChange(int(pos))