From c5bd1878846c17309c99ad7554d4645088de9629 Mon Sep 17 00:00:00 2001 From: Momo Date: Sat, 25 Aug 2018 10:57:17 +0200 Subject: [PATCH] * seperated controls * one frame movements --- lib/extensions/params.py | 1 - lib/simulator.py | 132 +++++++++++++++++---------------------- 2 files changed, 59 insertions(+), 74 deletions(-) diff --git a/lib/extensions/params.py b/lib/extensions/params.py index a77c96f14..6d1464a35 100644 --- a/lib/extensions/params.py +++ b/lib/extensions/params.py @@ -431,7 +431,6 @@ class SettingsFrame(wx.Frame): self.simulate_window.set_slider() self.simulate_window.Layout() - self.simulate_window.Refresh() else: params_rect = self.GetScreenRect() simulator_pos = params_rect.GetTopRight() diff --git a/lib/simulator.py b/lib/simulator.py index 10ee0569e..e662eaf90 100644 --- a/lib/simulator.py +++ b/lib/simulator.py @@ -40,15 +40,17 @@ class EmbroiderySimulator(wx.Frame): self.button_sizer = wx.StdDialogButtonSizer() self.button_label = ( - [_("<<"), - _('Speed | Play reverse (arrow left)'), - self.animation_reverse], - [_(">>"), - _('Speed | Play forward (arrow right)'), - self.animation_forward], - [_("Pause"), _("Pause (P)"), self.animation_pause], - [_("Restart"), _("Restart (R)"), self.animation_restart], - [_("Quit"), _("Close (Q)"), self.animation_quit]) + # Switch direction button (currently not in use - would this be better?) + #[_('>>'), _('Switch direction | Play reverse (arrow left) | Play forward (arrow right)'), self.animation_switch_direction], + [_('<<'), _('Play reverse (arrow left)'), self.animation_reverse], + [_('-'), _('Play one frame backward (+)'), self.animation_one_frame_back], + [_('+'), _('Play one frame forward (+)'), self.animation_one_frame_forward], + [_('>>'), _('Play forward (arrow right)'), self.animation_forward], + [_('^'), _('Speed up (arrow up)'), self.animation_speed_up], + [_('v'), _('Slow down (arrow down)'), self.animation_slow_down], + [_('Pause'), _('Pause (P)'), self.animation_pause], + [_('Restart'), _('Restart (R)'), self.animation_restart], + [_('Quit'), _('Close (Q)'), self.animation_quit]) self.buttons = [] for i in range(0, len(self.button_label)): @@ -80,29 +82,30 @@ class EmbroiderySimulator(wx.Frame): self.current_frame = 0 self.animation_direction = 1 - self.speed_info = self.calculate_speed_level() self.set_stitch_counter(0) shortcut_keys = [ - (wx.ACCEL_NORMAL, ord('+'), self.animation_speed_up), - (wx.ACCEL_NORMAL, ord('='), self.animation_speed_up), - (wx.ACCEL_SHIFT, ord('='), self.animation_speed_up), - (wx.ACCEL_NORMAL, wx.WXK_ADD, self.animation_speed_up), - (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_ADD, self.animation_speed_up), - (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_UP, self.animation_speed_up), - (wx.ACCEL_NORMAL, wx.WXK_UP, self.animation_speed_up), - (wx.ACCEL_NORMAL, ord('-'), self.animation_slow_down), - (wx.ACCEL_NORMAL, ord('_'), self.animation_slow_down), - (wx.ACCEL_NORMAL, wx.WXK_SUBTRACT, self.animation_slow_down), - (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_SUBTRACT, self.animation_slow_down), - (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_DOWN, self.animation_slow_down), - (wx.ACCEL_NORMAL, wx.WXK_DOWN, self.animation_slow_down), (wx.ACCEL_NORMAL, wx.WXK_RIGHT, self.animation_forward), - (wx.ACCEL_NORMAL, wx.WXK_LEFT, self.animation_reverse), (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_RIGHT, self.animation_forward), + (wx.ACCEL_NORMAL, wx.WXK_LEFT, self.animation_reverse), (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_LEFT, self.animation_reverse), + (wx.ACCEL_NORMAL, wx.WXK_UP, self.animation_speed_up), + (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_UP, self.animation_speed_up), + (wx.ACCEL_NORMAL, wx.WXK_DOWN, self.animation_slow_down), + (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_DOWN, self.animation_slow_down), + (wx.ACCEL_NORMAL, ord('+'), self.animation_one_frame_forward), + (wx.ACCEL_NORMAL, ord('='), self.animation_one_frame_forward), + (wx.ACCEL_SHIFT, ord('='), self.animation_one_frame_forward), + (wx.ACCEL_NORMAL, wx.WXK_ADD, self.animation_one_frame_forward), + (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_ADD, self.animation_one_frame_forward), + (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_UP, self.animation_one_frame_forward), + (wx.ACCEL_NORMAL, ord('-'), self.animation_one_frame_back), + (wx.ACCEL_NORMAL, ord('_'), self.animation_one_frame_back), + (wx.ACCEL_NORMAL, wx.WXK_SUBTRACT, self.animation_one_frame_back), + (wx.ACCEL_NORMAL, wx.WXK_NUMPAD_SUBTRACT, self.animation_one_frame_back), (wx.ACCEL_NORMAL, ord('r'), self.animation_restart), (wx.ACCEL_NORMAL, ord('p'), self.animation_pause), + (wx.ACCEL_NORMAL, wx.WXK_SPACE, self.animation_pause), (wx.ACCEL_NORMAL, ord('q'), self.animation_quit)] accel_entries = [] @@ -139,14 +142,6 @@ class EmbroiderySimulator(wx.Frame): self.move_to_top_left() return - def reset_speed(self): - if self.target_duration: - self.adjust_speed(self, self.target_duration) - else: - self.stitches_per_frame = 1 - self.frame_period = 80 - self.set_speed_info(self.calculate_speed_level()) - def adjust_speed(self, duration): self.frame_period = 1000 * float(duration) / len(self.lines) self.stitches_per_frame = 1 @@ -155,31 +150,42 @@ class EmbroiderySimulator(wx.Frame): self.frame_period *= 2 self.stitches_per_frame *= 2 - def animation_forward(self, event): - if self.current_frame == 1: - self.animation_direction = 1 - self.reset_speed() - self.timer.StartOnce(self.frame_period) - elif self.animation_direction == -1 and self.frame_period > 1280: - self.animation_direction = 1 - self.set_speed_info(self.calculate_speed_level()) - elif self.animation_direction == 1: - self.animation_speed_up('speed_up') + # Switch direction button (currently not in use - would this be better?) + def animation_switch_direction(self, event): + direction_button = event.GetEventObject() + lbl = direction_button.GetLabel() + if self.animation_direction == 1: + self.animation_reverse('backward') + direction_button.SetLabel('<<') else: - self.animation_slow_down('slow_down') + self.animation_forward('forward') + direction_button.SetLabel('>>') + + def animation_forward(self, event): + self.animation_direction = 1 + if not self.timer.IsRunning(): + self.timer.StartOnce(self.frame_period) def animation_reverse(self, event): - if self.current_frame == len(self.lines): - self.animation_direction = -1 - self.reset_speed() + self.animation_direction = -1 + if not self.timer.IsRunning(): self.timer.StartOnce(self.frame_period) - elif self.animation_direction == 1 and self.frame_period > 1280: - self.animation_direction = -1 - self.set_speed_info(self.calculate_speed_level()) - elif self.animation_direction == -1: - self.animation_speed_up('speed_up') - else: - self.animation_slow_down('slow_down') + + def animation_one_frame_forward(self, event): + if self.current_frame < len(self.lines): + self.timer.Stop() + self.current_frame = self.current_frame + 1 + self.draw_one_frame() + self.set_stitch_counter(self.current_frame) + self.set_stitch_slider(self.current_frame) + + def animation_one_frame_back(self, event): + if self.current_frame > 1: + self.timer.Stop() + self.current_frame = self.current_frame - 1 + self.draw_one_frame() + self.set_stitch_counter(self.current_frame) + self.set_stitch_slider(self.current_frame) def animation_speed_up(self, event): if self.stitches_per_frame <= 1280: @@ -215,36 +221,16 @@ class EmbroiderySimulator(wx.Frame): def animation_update_timer(self): self.frame_period = max(1, self.frame_period) self.stitches_per_frame = max(self.stitches_per_frame, 1) - self.speed_info = self.calculate_speed_level() self.set_stitch_counter(self.current_frame) if self.timer.IsRunning(): self.timer.Stop() self.timer.StartOnce(self.frame_period) - def calculate_speed_level(self): - count = 0 - speed = self.frame_period - speed_plus = 1 - animation_direction = '>>' if self.animation_direction == 1 else '<<' - while speed <= 2560: - speed = speed * 2 - count += 1 - while speed_plus < self.stitches_per_frame: - speed_plus = speed_plus * 2 - count += 1 - return animation_direction + ' x' + str(count) - def set_stitch_counter(self, current_frame): self.dc.SetTextForeground('red') stitch_counter_text = _("Stitch # ") + \ str(current_frame) + ' / ' + str(len(self.lines)) self.dc.DrawText(stitch_counter_text, 30, 5) - self.set_speed_info(self.speed_info) - - def set_speed_info(self, speed_info): - self.speed_info = speed_info - self.dc.SetTextForeground('blue') - self.dc.DrawText(_("Speed ") + str(speed_info), 210, 5) def on_slider(self, event): self.panel.SetFocus()