Modified og_gui_manager.py to make it accessible on devices not on the efabless platform. Changed the create project script to make the proper config directories so that the editors can be used. Modified profile.py to make the settings properly reflect the user preferences.
diff --git a/common/settings.py b/common/settings.py
new file mode 100755
index 0000000..f25c107
--- /dev/null
+++ b/common/settings.py
@@ -0,0 +1,158 @@
+#!/ef/efabless/opengalaxy/venv/bin/python3
+#
+#-----------------------------------------------------------
+# Settings window for the Open Galaxy characterization tool
+#
+#-----------------------------------------------------------
+# Written by Tim Edwards
+# efabless, inc.
+# March 17, 2017
+# Version 0.1
+#--------------------------------------------------------
+
+import re
+import tkinter
+from tkinter import ttk
+
+class Settings(tkinter.Toplevel):
+ """Open Galaxy characterization tool settings management."""
+
+ def __init__(self, parent=None, fontsize = 11, callback = None, *args, **kwargs):
+ '''See the __init__ for Tkinter.Toplevel.'''
+ tkinter.Toplevel.__init__(self, parent, *args, **kwargs)
+
+ s = ttk.Style()
+ s.configure('normal.TButton', font=('Helvetica', fontsize), border = 3, relief = 'raised')
+ self.protocol("WM_DELETE_WINDOW", self.close)
+ self.parent = parent
+ self.withdraw()
+ self.title('Open Galaxy Characterization Tool Settings')
+ self.sframe = tkinter.Frame(self)
+ self.sframe.grid(column = 0, row = 0, sticky = "news")
+
+ self.sframe.stitle = ttk.Label(self.sframe,
+ style='title.TLabel', text = 'Settings')
+ self.sframe.stitle.pack(side = 'top', fill = 'x', expand = 'true')
+ self.sframe.sbar = ttk.Separator(self.sframe, orient='horizontal')
+ self.sframe.sbar.pack(side = 'top', fill = 'x', expand = 'true')
+
+ self.doforce = tkinter.IntVar(self.sframe)
+ self.doforce.set(0)
+ self.sframe.force = ttk.Checkbutton(self.sframe, text='Force netlist regeneration',
+ variable = self.doforce)
+ self.sframe.force.pack(side = 'top', anchor = 'w')
+
+ self.doedit = tkinter.IntVar(self.sframe)
+ self.doedit.set(0)
+ self.sframe.edit = ttk.Checkbutton(self.sframe, text='Allow edit of all parameters',
+ variable = self.doedit)
+ self.sframe.edit.pack(side = 'top', anchor = 'w')
+
+ self.dokeep = tkinter.IntVar(self.sframe)
+ self.dokeep.set(0)
+ self.sframe.keep = ttk.Checkbutton(self.sframe, text='Keep simulation files',
+ variable = self.dokeep)
+ self.sframe.keep.pack(side = 'top', anchor = 'w')
+
+ self.doplot = tkinter.IntVar(self.sframe)
+ self.doplot.set(1)
+ self.sframe.plot = ttk.Checkbutton(self.sframe, text='Create plot files locally',
+ variable = self.doplot)
+ self.sframe.plot.pack(side = 'top', anchor = 'w')
+
+ self.dotest = tkinter.IntVar(self.sframe)
+ self.dotest.set(0)
+ self.sframe.test = ttk.Checkbutton(self.sframe, text='Submission test-only mode',
+ variable = self.dotest)
+ self.sframe.test.pack(side = 'top', anchor = 'w')
+
+ self.doschem = tkinter.IntVar(self.sframe)
+ self.doschem.set(0)
+ self.sframe.schem = ttk.Checkbutton(self.sframe,
+ text='Force submit as schematic only',
+ variable = self.doschem)
+ self.sframe.schem.pack(side = 'top', anchor = 'w')
+
+ self.dosubmitfailed = tkinter.IntVar(self.sframe)
+ self.dosubmitfailed.set(0)
+ self.sframe.submitfailed = ttk.Checkbutton(self.sframe,
+ text='Allow submission of unsimulated/failing design',
+ variable = self.dosubmitfailed)
+ self.sframe.submitfailed.pack(side = 'top', anchor = 'w')
+
+ self.dolog = tkinter.IntVar(self.sframe)
+ self.dolog.set(0)
+ self.sframe.log = ttk.Checkbutton(self.sframe, text='Log simulation output',
+ variable = self.dolog)
+ self.sframe.log.pack(side = 'top', anchor = 'w')
+
+ self.loadsave = tkinter.IntVar(self.sframe)
+ self.loadsave.set(0)
+ self.sframe.loadsave = ttk.Checkbutton(self.sframe, text='Unlimited loads/saves',
+ variable = self.loadsave)
+ self.sframe.loadsave.pack(side = 'top', anchor = 'w')
+
+ # self.sframe.sdisplay.sopts(side = 'top', fill = 'x', expand = 'true')
+
+ self.bbar = ttk.Frame(self)
+ self.bbar.grid(column = 0, row = 1, sticky = "news")
+ self.bbar.close_button = ttk.Button(self.bbar, text='Close',
+ command=self.close, style = 'normal.TButton')
+ self.bbar.close_button.grid(column=0, row=0, padx = 5)
+
+ # Callback-on-close
+ self.callback = callback
+
+ def grid_configure(self, padx, pady):
+ pass
+
+ def redisplay(self):
+ pass
+
+ def get_force(self):
+ # return the state of the "force netlist regeneration" checkbox
+ return False if self.doforce.get() == 0 else True
+
+ def get_edit(self):
+ # return the state of the "edit all parameters" checkbox
+ return False if self.doedit.get() == 0 else True
+
+ def get_keep(self):
+ # return the state of the "keep simulation files" checkbox
+ return False if self.dokeep.get() == 0 else True
+
+ def get_plot(self):
+ # return the state of the "create plot files locally" checkbox
+ return False if self.doplot.get() == 0 else True
+
+ def get_test(self):
+ # return the state of the "submit test mode" checkbox
+ return False if self.dotest.get() == 0 else True
+
+ def get_schem(self):
+ # return the state of the "submit as schematic" checkbox
+ return False if self.doschem.get() == 0 else True
+
+ def get_submitfailed(self):
+ # return the state of the "submit failed" checkbox
+ return False if self.dosubmitfailed.get() == 0 else True
+
+ def get_log(self):
+ # return the state of the "log simulation output" checkbox
+ return False if self.dolog.get() == 0 else True
+
+ def get_loadsave(self):
+ # return the state of the "unlimited loads/saves" checkbox
+ return False if self.loadsave.get() == 0 else True
+
+ def close(self):
+ # pop down settings window
+ self.withdraw()
+ # execute the callback function, if one is given
+ if self.callback:
+ self.callback()
+
+ def open(self):
+ # pop up settings window
+ self.deiconify()
+ self.lift()