Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/robotide/preferences/saving.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ def _create_editors(settings):
IntegerChoiceEditor(settings, 'txt number of spaces', _('Separating spaces'),
[str(i) for i in range(2, 11)],
_('Number of spaces between cells when saving in txt format')
),
IntegerChoiceEditor(settings, 'auto save interval', _('Auto save interval (minutes)'),
['0', '1', '2', '3', '5', '10', '15', '20', '30'],
_('Automatically save all files after specified minutes (0 = disabled)')
)
]

Expand Down
4 changes: 2 additions & 2 deletions src/robotide/preferences/settings.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ reformat = False
doc language = None
# the style of the tabs in notebook pages, Edit, Text, Run. Values from 0 to 5.
notebook theme = 0
# auto save interval: Automatically save all files after specified minutes (0 = disabled)
auto save interval = 0

[General]
font size = 11
Expand Down Expand Up @@ -71,8 +73,6 @@ tc_kw_name = '#1A5FB4'
variable = '#008080'
background = '#F6F5F4'
enable auto suggestions = True
enable visible spaces = True
enable visible newlines = True

[Grid]
font size = 10
Expand Down
32 changes: 30 additions & 2 deletions src/robotide/ui/mainframe.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,9 @@ def __init__(self, application, controller):
self.color_foreground = self.general_settings.get('foreground', '#5E5C64') if self.general_settings else '#5E5C64'
self.font_face = self.general_settings.get('font face', '') if self.general_settings else ''
self.font_size = self.general_settings.get('font size', 11) if self.general_settings else 11
self.ui_language = self.general_settings.get('ui language', 'English') if self.general_settings else 'English'
self.ui_language = self.general_settings.get('ui language', 'English') if self.general_settings else 'English'
self._auto_save_interval = application.settings.get('auto save interval', 0)
self._auto_save_timer = None
self.main_menu = None
self._init_ui()
self.SetIcon(wx.Icon(self._image_provider.RIDE_ICON))
Expand All @@ -187,6 +189,7 @@ def __init__(self, application, controller):
self.Bind(aui.EVT_AUI_PANE_DOCKING, self.OnFloatDock)
self.Bind(aui.EVT_AUI_PANE_DOCKED, self.OnFloatDock)
self._subscribe_messages()
self._start_auto_save_timer()
wx.CallAfter(self.actions.register_tools) # DEBUG
# DEBUG wx.CallAfter(self.OnSettingsChanged, self.general_settings)

Expand All @@ -197,7 +200,8 @@ def _subscribe_messages(self):
(self._set_label, RideTreeSelection),
(self._show_validation_error, RideInputValidationError),
(self._show_modification_prevented_error, RideModificationPrevented),
(self.on_ui_language_changed, RideSettingsChanged)
(self.on_ui_language_changed, RideSettingsChanged),
(self._on_auto_save_settings_changed, RideSettingsChanged)
]:
PUBLISHER.subscribe(listener, topic)

Expand Down Expand Up @@ -364,6 +368,30 @@ def get_selected_datafile(self):
def get_selected_datafile_controller(self):
return self.tree.get_selected_datafile_controller()

def _start_auto_save_timer(self):
"""Start the auto-save timer if interval is set."""
if self._auto_save_timer:
self._auto_save_timer.Stop()
self._auto_save_timer = None
if self._auto_save_interval > 0:
self._auto_save_timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self._on_auto_save, self._auto_save_timer)
self._auto_save_timer.Start(self._auto_save_interval * 60 * 1000) # minutes to milliseconds

def _on_auto_save(self, event):
"""Auto-save all files when timer fires."""
_ = event
if self.controller and self.controller.is_dirty():
RideBeforeSaving().publish()
self.save_all()
self.SetStatusText(_('Auto-saved all files'))

def _on_auto_save_settings_changed(self, message):
"""Update auto-save timer when settings change."""
if message.keys and 'auto save interval' in message.keys:
self._auto_save_interval = self._application.settings.get('auto save interval', 0)
self._start_auto_save_timer()

def on_close(self, event):
from ..preferences import RideSettings
if self._allowed_to_exit():
Expand Down
Loading