~rmpr/atbswp

8d0fb65794ed11a02901667ef9d49183683460bf — Mairo Rufus 2 years ago 36aac90
Display the number of remaining iterations

Prior to this change the number was only displayed verbatim. Now it is
not only displayed but updated with the number of remaining iterations
and updated when that number is changed in the settings. #53

https://github.com/RMPR/atbswp/issues/53
2 files changed, 29 insertions(+), 11 deletions(-)

M atbswp/control.py
M atbswp/gui.py
M atbswp/control.py => atbswp/control.py +16 -7
@@ 38,6 38,7 @@ from custom_widgets import SliderDialog, CountdownDialog

import wx
import wx.adv
import wx.lib.newevent as NE


TMP_PATH = os.path.join(tempfile.gettempdir(),


@@ 357,17 358,23 @@ class PlayCtrl:
        self.count = settings.CONFIG.getint('DEFAULT', 'Repeat Count')
        self.infinite = settings.CONFIG.getboolean('DEFAULT', 'Infinite Playback')
        self.count_was_updated = False
        self.ThreadEndEvent, self.EVT_THREAD_END = NE.NewEvent()

    def play(self, capture, toggle_button):
        """Play the loaded capture."""
        toggle_value = True
        for line in capture:
            if self.play_thread.ended():
                return
            exec(line)

        if self.count <= 0 and not self.infinite:
            toggle_value = False
        event = self.ThreadEndEvent(count=self.count, toggle_value=toggle_value)
        wx.PostEvent(toggle_button.Parent, event)

        btn_event = wx.CommandEvent(wx.wxEVT_TOGGLEBUTTON)
        btn_event.EventObject = toggle_button
        if self.count <= 0 and not self.infinite:
            toggle_button.Value = False
        self.action(btn_event)

    def action(self, event):


@@ 381,7 388,8 @@ class PlayCtrl:
                self.count_was_updated = True
            if TMP_PATH is None or not os.path.isfile(TMP_PATH):
                wx.LogError("No capture loaded")
                toggle_button.Value = False
                event = self.ThreadEndEvent(count=self.count, toggle_value=False)
                wx.PostEvent(toggle_button.Parent, event)
                return
            with open(TMP_PATH, 'r') as f:
                capture = f.readlines()


@@ 449,15 457,15 @@ class SettingsCtrl:
        current_value = settings.CONFIG.getboolean('DEFAULT', 'Infinite Playback')
        settings.CONFIG['DEFAULT']['Infinite Playback'] = str(not current_value)

    @staticmethod
    def repeat_count(event):
    def repeat_count(self, event):
        """Set the repeat count."""
        current_value = settings.CONFIG.getint('DEFAULT', 'Repeat Count')
        dialog = wx.NumberEntryDialog(None, message="Choose a repeat count", prompt="", caption="Repeat Count", value=current_value, min=1, max=999)
        dialog.ShowModal()
        new_value = dialog.Value
        new_value = str(dialog.Value)
        dialog.Destroy()
        settings.CONFIG['DEFAULT']['Repeat Count'] = str(new_value)
        settings.CONFIG['DEFAULT']['Repeat Count'] = new_value
        self.main_dialog.remaining_plays.Label = new_value

    @staticmethod
    def recording_hotkey(event):


@@ 516,6 524,7 @@ class HelpCtrl:
        url = "https://youtu.be/L0jjSgX5FYk"
        wx.LaunchDefaultBrowser(url, flags=0)


class PlayThread(Thread):
    """Thread with an end method triggered by a click on the Toggle button."""
    def __init__(self, *args, **kwargs):

M atbswp/gui.py => atbswp/gui.py +13 -4
@@ 65,9 65,9 @@ class MainDialog(wx.Dialog, wx.MiniFrame):
                  control.SettingsCtrl.infinite_playback,
                  cp)

        sc = control.SettingsCtrl(self)
        # Repeat count
        self.Bind(wx.EVT_MENU,
                  control.SettingsCtrl.repeat_count,
        self.Bind(wx.EVT_MENU, sc.repeat_count,
                  menu.Append(wx.ID_ANY, self.settings_text[2]))
        menu.AppendSeparator()



@@ 86,7 86,6 @@ class MainDialog(wx.Dialog, wx.MiniFrame):
        aot = menu.AppendCheckItem(wx.ID_ANY, self.settings_text[5])
        status = settings.CONFIG.getboolean('DEFAULT', 'Always On Top')
        aot.Check(status)
        sc = control.SettingsCtrl(self)
        self.Bind(wx.EVT_MENU,
                  sc.always_on_top,
                  aot)


@@ 206,6 205,9 @@ class MainDialog(wx.Dialog, wx.MiniFrame):
        self.pbc = control.PlayCtrl()
        self.Bind(wx.EVT_TOGGLEBUTTON, self.pbc.action, self.play_button)

        # Handle the event returned after a playback has completed
        self.Bind(self.pbc.EVT_THREAD_END, self.on_thread_end)

        # compile_button_ctrl
        self.Bind(wx.EVT_BUTTON, control.CompileCtrl.compile, self.compile_button)



@@ 217,7 219,9 @@ class MainDialog(wx.Dialog, wx.MiniFrame):

        self.Bind(wx.EVT_CLOSE, self.on_close_dialog)

        # Handle keyboard shortcuts
        self.panel.Bind(wx.EVT_KEY_UP, self.on_key_press)

        self.panel.SetFocus()

    def __set_properties(self):


@@ 287,6 291,12 @@ class MainDialog(wx.Dialog, wx.MiniFrame):

        event.Skip()

    def on_thread_end(self, event):
        self.play_button.Value = event.toggle_value
        self.remaining_plays.Label = str(event.count) if event.count > 0 else \
                str(settings.CONFIG.getint('DEFAULT', 'Repeat Count'))
        self.remaining_plays.Update()

    def on_exit_app(self, event):
        """Clean exit saving the settings."""
        settings.save_config()


@@ 328,4 338,3 @@ class TaskBarIcon(wx.adv.TaskBarIcon):
        self.parent = parent
        super(TaskBarIcon, self).__init__()