88from direct .tkwidgets import Floater
99
1010from .DNASerializer import DNASerializer
11+ from .AutoSaver import AutoSaver
1112from .LevelStyleManager import *
1213from .LevelEditorGlobals import *
1314from .LESceneGraphExplorer import *
@@ -127,6 +128,16 @@ def __init__(self, levelEditor, parent = None, **kw):
127128 'Open Injector' ,
128129 label = 'Injector' ,
129130 command = self .showInjector )
131+ menuBar .addmenuitem ('Advanced' , 'separator' )
132+ menuBar .addmenuitem ('Advanced' , 'checkbutton' ,
133+ 'Toggle Auto-saver On/Off' ,
134+ label = 'Toggle Auto Saver' ,
135+ command = self .toggleAutoSaver )
136+ menuBar .addmenuitem ('Advanced' , 'command' ,
137+ 'User Set Auto Saver Options' ,
138+ label = 'Auto Saver Options' ,
139+ command = self .showAutoSaverDialog )
140+
130141 # Corporate Clash Old Toontown-esque Filter
131142 if base .server == TOONTOWN_CORPORATE_CLASH :
132143 self .toggleOTVar = IntVar ()
@@ -176,6 +187,32 @@ def __init__(self, levelEditor, parent = None, **kw):
176187 message_text = CONTROLS )
177188 self .controlsDialog .withdraw ()
178189
190+ self .autoSaverDialog = Pmw .Dialog (parent , title = 'Autosaver Options' ,
191+ buttons = ('Save Options' ,),
192+ command = self .setAutoSaverInterval )
193+ self .autoSaverDialog .withdraw ()
194+
195+ self .autoSaverDialogInterval = Pmw .Counter (self .autoSaverDialog .interior (),
196+ labelpos = 'w' ,
197+ label_text = 'Auto save interval in minutes:' ,
198+ entry_width = 10 ,
199+ entryfield_value = int (AutoSaver .autoSaverInterval ),
200+ entryfield_validate = {'validator' : 'real' ,
201+ 'min' : 1 , 'max' : 60 })
202+
203+ self .autoSaverDialogMax = Pmw .Counter (self .autoSaverDialog .interior (),
204+ labelpos = 'w' ,
205+ label_text = 'Max auto save files:' ,
206+ entry_width = 10 ,
207+ entryfield_value = int (AutoSaver .maxAutoSaveCount ),
208+ entryfield_validate = {'validator' : 'numeric' ,
209+ 'min' : 0 , 'max' : 99 })
210+
211+ counters = (self .autoSaverDialogInterval , self .autoSaverDialogMax )
212+ Pmw .alignlabels (counters )
213+ for counter in counters :
214+ counter .pack (fill = 'both' , expand = 1 )
215+
179216 self .editMenu = Pmw .ComboBox (
180217 menuFrame , labelpos = W ,
181218 label_text = 'Edit Mode:' , entry_width = 18 ,
@@ -962,6 +999,9 @@ def toggleWidgetHandles(s = self):
962999 # Make sure input variables processed
9631000 self .initialiseoptions (LevelEditorPanel )
9641001
1002+ # Initializes auto saver for use
1003+ AutoSaver .initializeAutoSaver ()
1004+
9651005 def updateInfo (self , page ):
9661006 if page == 'Signs' :
9671007 self .updateSignPage ()
@@ -1466,6 +1506,16 @@ def setSuitPointType(self, name):
14661506 def setBattleCellType (self , name ):
14671507 self .levelEditor .currentBattleCellType = name
14681508
1509+ def setAutoSaverInterval (self , i ):
1510+ if i == 'Save Options' :
1511+ try :
1512+ AutoSaver .autoSaverInterval = float (self .autoSaverDialogInterval .get ())
1513+ AutoSaver .maxAutoSaveCount = float (self .autoSaverDialogMax .get ())
1514+ except ValueError as e :
1515+ # Non-float was passed
1516+ raise e
1517+ self .autoSaverDialog .withdraw ()
1518+
14691519 def updateSelectedObjColor (self , color ):
14701520 try :
14711521 obj = self .levelEditor .DNATarget
@@ -1506,6 +1556,10 @@ def showControls(self):
15061556 self .controlsDialog .show ()
15071557 self .controlsDialog .focus_set ()
15081558
1559+ def showAutoSaverDialog (self ):
1560+ self .autoSaverDialog .show ()
1561+ self .autoSaverDialog .focus_set ()
1562+
15091563 def showInjector (self ):
15101564 self .injectorDialog .show ()
15111565 self .injectorDialog .focus_set ()
@@ -1531,3 +1585,16 @@ def toggleDrive(self):
15311585 self .levelEditor .useDriveMode ()
15321586 else :
15331587 self .levelEditor .useDirectFly ()
1588+
1589+ def toggleAutoSaver (self ):
1590+ if AutoSaver .autoSaverToggled is False :
1591+ # If no working DNA outputFile is selected, one is chosen here
1592+ if DNASerializer .outputFile is None :
1593+ DNASerializer .saveToSpecifiedDNAFile ()
1594+ print (f'Starting auto saver on an interval of { AutoSaver .autoSaverInterval } minutes' )
1595+ # Toggles auto saver to begin auto saving loop
1596+ AutoSaver .autoSaverToggled = True
1597+ else :
1598+ print ('Stopping auto saver...' )
1599+ # Stops auto saving loop
1600+ AutoSaver .autoSaverToggled = False
0 commit comments