Files
scyther/gui/Gui/Settingswindow.py
2006-08-11 08:34:22 +00:00

118 lines
3.6 KiB
Python

#!/usr/bin/python
#---------------------------------------------------------------------------
""" Import externals """
import wx
#---------------------------------------------------------------------------
""" Import scyther-gui components """
import Preference
import Scyther.Claim as Claim
#---------------------------------------------------------------------------
class SettingsWindow(wx.Panel):
def __init__(self,parent,daddy):
wx.Panel.__init__(self,parent,-1)
self.win = daddy
space = 10
grid = wx.GridBagSizer(hgap=space,vgap=space)
ypos = 0
# Bound on the number of runs
self.maxruns = int(Preference.get('maxruns','5'))
txt = wx.StaticText(self,-1,"Maximum number of runs (0 disables bound)")
ctrl = wx.SpinCtrl(self, -1, "",style=wx.RIGHT)
ctrl.SetRange(0,100)
ctrl.SetValue(self.maxruns)
self.Bind(wx.EVT_SPINCTRL,self.EvtRuns,ctrl)
grid.Add(ctrl,(ypos,0))
grid.Add(txt,(ypos,1))
ypos += 1
# Matchin options
self.match = int(Preference.get('match','0'))
claimoptions = ['typed matching','find basic type flaws','find all type flaws']
r2 = wx.StaticText(self,-1,"Matching type")
l2 = self.ch = wx.Choice(self,-1,choices=claimoptions)
l2.SetSelection(self.match)
self.Bind(wx.EVT_CHOICE,self.EvtMatch,l2)
grid.Add(l2,(ypos,0))
grid.Add(r2,(ypos,1))
ypos += 1
### MISC expert stuff
# Bound on the number of classes/attacks
self.maxattacks = int(Preference.get('maxattacks','100'))
stname = Claim.stateDescription(True,2,False)
atname = Claim.stateDescription(False,2,False)
txt = "%s/%s" % (stname,atname)
r9 = wx.StaticText(self,-1,"Maximum number of %s for all claims combined (0 disables maximum)" % txt)
l9 = wx.SpinCtrl(self, -1, "",style=wx.RIGHT)
l9.SetRange(0,100)
l9.SetValue(self.maxattacks)
self.Bind(wx.EVT_SPINCTRL,self.EvtMaxAttacks,l9)
grid.Add(l9,(ypos,0))
grid.Add(r9,(ypos,1))
ypos += 1
self.misc = Preference.get('scytheroptions','')
r10 = wx.StaticText(self,-1,"Additional parameters for the Scyther tool")
l10 = wx.TextCtrl(self,-1,self.misc,size=(150,-1))
self.Bind(wx.EVT_TEXT,self.EvtMisc,l10)
grid.Add(l10,(ypos,0))
grid.Add(r10,(ypos,1))
ypos += 1
# Combine
self.SetSizer(grid)
self.SetAutoLayout(True)
def EvtMatch(self,evt):
self.match = evt.GetInt()
def EvtRuns(self,evt):
self.maxruns = evt.GetInt()
def EvtMaxAttacks(self,evt):
self.maxattacks = evt.GetInt()
def EvtMisc(self,evt):
self.misc = evt.GetString()
def ScytherArguments(self,mode):
""" Note: constructed strings should have a space at the end to
correctly separate the options.
"""
tstr = ""
# Number of runs
tstr += "--max-runs=%s " % (str(self.maxruns))
# Matching type
tstr += "--match=%s " % (str(self.match))
# Max attacks/classes
if self.maxattacks != 0:
tstr += "--max-attacks=%s " % (str(self.maxattacks))
# Verification type
if mode == "check":
tstr += "--check "
elif mode == "autoverify":
tstr += "--auto-claims "
elif mode == "statespace":
tstr += "--state-space "
# Anything else?
if self.misc != "":
tstr += " " + self.misc + " "
return tstr
#---------------------------------------------------------------------------