Changeset 1129


Ignore:
Timestamp:
20.01.2016 12:22:45 (4 years ago)
Author:
klaus
Message:

first working GUI for parameter set

Location:
SHX/trunk/SeismicHandler
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/SeismicHandler/basics/analysispar.py

    r1124 r1129  
    217217    pardef = { 
    218218        # analysis results 
    219         'fk_slowness'     : ( 10, 'float',     None), 
    220         'fk_azimuth'      : ( 20, 'float',     None), 
    221         'epi_latitude'    : ( 30, 'float',     None), 
    222         'epi_longitude'   : ( 40, 'float',     None), 
    223         'source_depth'    : ( 41, 'float',     None), 
     219        'fk_slowness'     : ( 10, 'floatN',    None), 
     220        'fk_azimuth'      : ( 20, 'floatN',    None), 
     221        'epi_latitude'    : ( 30, 'floatN',    None), 
     222        'epi_longitude'   : ( 40, 'floatN',    None), 
     223        'source_depth'    : ( 41, 'floatN',    None), 
    224224        # trace read parameters 
    225225        'read_time'       : ( 50, 'datetime',  toUTCDateTime('7-AUG-2015_00:16:30')), 
     
    237237        'fk_min_freq'     : ( 80, 'float',     0.4), 
    238238        'fk_max_freq'     : ( 90, 'float',     3.0), 
     239        # own variables 
     240        'autosave'        : (100, 'fileN',     None), 
    239241    } 
    240242 
     
    257259            except: 
    258260                raise ShxError( "cannot parse time '%s'" % value ) 
    259         elif partype == 'string': 
     261        elif partype in ('string','file','fileN'): 
    260262            self._setValue( parname, value ) 
    261         elif partype == 'float': 
     263        elif partype in ('float','floatN'): 
     264            if partype == 'floatN' and (value == None or value == ""): 
     265                self._setValue( parname, None ) 
     266                return 
    262267            try: 
    263268                self._setValue( parname, float(value) ) 
     
    278283            raise ShxError( "unknown analysis parameter '%s'" % parname ) 
    279284        self.pardict[parname] = value 
     285        if self.pardict['autosave']: 
     286            self.save( self.pardict['autosave'] ) 
     287     
     288    def getType( self, parname ): 
     289        if not parname in self.pardict.keys(): 
     290            raise ShxError( "unknown analysis parameter '%s'" % parname ) 
     291        return self.pardef[parname][PIDX_TYPE] 
    280292     
    281293    def getValue( self, parname ): 
     
    295307            except: 
    296308                return "" 
    297         elif partype == 'string': 
    298             return self.getValue( parname ) 
    299         elif partype == 'float': 
     309        elif partype in ('string','file','fileN'): 
     310            retval = self.getValue( parname ) 
     311            if retval == None: 
     312                return "" 
     313            else: 
     314                return retval 
     315        elif partype in ('float','floatN'): 
    300316            try: 
    301317                return "%g" % self.getValue(parname) 
  • SHX/trunk/SeismicHandler/commands/param.py

    r1123 r1129  
    88from SeismicHandler.basics.analysispar import AnalysisPar 
    99from SeismicHandler.basics.error import ShxError 
     10from SeismicHandler.basics.messages import ui_event 
    1011 
    1112provides = {"param": "param"} 
     
    3637    redraw = False 
    3738     
    38     legalcmds = ('set','get','dump','save','load','reset') 
     39    legalcmds = { 
     40        'set'  : 3, 
     41        'get'  : 3, 
     42        'dump' : 1, 
     43        'save' : 2, 
     44        'load' : 2, 
     45        'reset': 1, 
     46    } 
    3947 
    4048    def __init__(self, *args, **kwargs): 
     
    4452    #@timeit 
    4553    def run(self): 
     54        subcmd = self.parameters[0].lower() 
     55        if subcmd not in self.legalcmds.keys(): 
     56            raise ShxError( "illegal param subcmd '%s'" % subcmd ) 
     57        if len(self.parameters) != self.legalcmds[subcmd]: 
     58            raise ShxError( "need %d parameters" % self.legalcmds[subcmd] ) 
    4659        if len(self.parameters) == 1: 
    47             subcmd = self.parameters[0] 
     60            pass 
    4861        elif len(self.parameters) == 2: 
    49             subcmd, fname = self.parameters 
     62            subcmd, name = self.parameters 
    5063        else: 
    5164            subcmd, name, value = self.parameters 
    5265            name = name.lower() 
    5366        subcmd = subcmd.lower() 
    54         if subcmd not in self.legalcmds: 
    55             raise ShxError( "illegal param subcmd '%s'" % subcmd ) 
    5667        analysispar = AnalysisPar() 
     68 
    5769        if subcmd == 'set': 
    5870            analysispar.setValueFromString( name, value ) 
     71            ui_event( "updateparams" ) 
    5972        elif subcmd == 'get': 
    6073            symbname = value 
     
    6780            print analysispar.dump() 
    6881        elif subcmd == 'save': 
    69             analysispar.save( fname ) 
     82            analysispar.save( name ) 
    7083        elif subcmd == 'load': 
    71             analysispar.load( fname ) 
     84            analysispar.load( name ) 
    7285            self.redraw = True 
     86            ui_event( "updateparams" ) 
    7387        elif subcmd == 'reset': 
    7488            analysispar.reset() 
     89            ui_event( "updateparams" ) 
    7590        else: 
    7691            print "This cannot happen, program bug in param.py" 
  • SHX/trunk/SeismicHandler/modules/wx_.py

    r1128 r1129  
    1919from SeismicHandler.basics.analysispar import PhaseList, AnalysisPar 
    2020from obspy.core import read, UTCDateTime 
    21 from obspy.sh.core import fromUTCDateTime 
     21from obspy.sh.core import fromUTCDateTime, toUTCDateTime 
    2222 
    2323# width of station info 
     
    13111311        self.flag_norm = False 
    13121312        self.flag_overlap = True 
     1313        self.pardialog = None 
    13131314     
    13141315    def showMessage( self, msg, error=False ): 
     
    15831584     
    15841585    def OnOpenParams( self, e ): 
    1585         dia = ParamDialog( self ) 
    1586         dia.Show() 
     1586        self.pardialog = ParamDialog( self ) 
     1587        self.pardialog.Show() 
    15871588 
    15881589    def redraw(self): 
     
    16101611        self.vbutton = {} 
    16111612 
    1612         ap = AnalysisPar() 
    1613         for pname in ap.sortedParams(): 
    1614             pvalue = ap.getValueAsString( pname ) 
     1613        self.ap = AnalysisPar() 
     1614        for pname in self.ap.sortedParams(): 
     1615            pvalue = self.ap.getValueAsString( pname ) 
    16151616            ptext = "%s : %s" % (pname,pvalue) 
    16161617            self.vbutton[pname] = wx.Button( self, label='Change', 
     
    16181619            self.vtext[pname] = wx.StaticText( self, label=ptext, 
    16191620                pos=(btnwidth+2*space,ypos), size=(textwidth,height) ) 
     1621            #self.vtext[pname].SetBackgroundColour( 'red' ) 
    16201622            self.Bind( wx.EVT_BUTTON, partial(self.OnButton,pname), 
    16211623                self.vbutton[pname] ) 
     
    16231625     
    16241626    def OnButton( self, pname, e, *args ): 
    1625         print "Button pressed", pname 
    1626         dlg = QueryString( self, "get string", "enter something" ) 
    1627         dlg.ShowModal() 
     1627        oldvalue = self.ap.getValueAsString( pname ) 
     1628        ptype = self.ap.getType( pname ) 
     1629        dlg = QueryString( self, "Change %s" % pname, 
     1630            "New value for '%s' (type %s):" % (pname,ptype), oldvalue ) 
     1631        btn = dlg.ShowModal() 
     1632        print "dbg: btn", btn 
    16281633        result = dlg.getValue() 
    1629         #dlg.Destroy() 
    1630         self.vtext[pname].SetLabel( "%s : %s" % (pname,result) ) 
     1634        dlg.Destroy() 
     1635        if self.validate( result, ptype ): 
     1636            if result == "": 
     1637                cmd = "param set %s ;;" % pname 
     1638            else: 
     1639                cmd = "param set %s %s" % (pname,result) 
     1640            _sendShCommand( cmd ) 
     1641        else: 
     1642            msg = "Illegal input: got '%s' but need type %s" % (result,ptype) 
     1643            dlg = wx.MessageDialog(self, msg, "Illegal input", 
     1644                                                     wx.OK | wx.ICON_ERROR) 
     1645            dlg.ShowModal() 
     1646            dlg.Destroy() 
     1647        #self.updateVariables() # done via command line 
     1648     
     1649    def updateVariables( self, *args ): 
     1650        for pname in self.ap.sortedParams(): 
     1651            pvalue = self.ap.getValueAsString( pname ) 
     1652            self.vtext[pname].SetLabel( "%s : %s" % (pname,pvalue) ) 
     1653     
     1654    def validate( self, result, ptype ): 
     1655        if ptype == 'int': 
     1656            try: 
     1657                i = int( result ) 
     1658                return True 
     1659            except: 
     1660                return False 
     1661        elif ptype in ('float','floatN'): 
     1662            if ptype == 'floatN' and result == "": 
     1663                return True 
     1664            try: 
     1665                i = float( result ) 
     1666                return True 
     1667            except: 
     1668                return False 
     1669        elif ptype == 'datetime': 
     1670            try: 
     1671                r = toUTCDateTime( result ) 
     1672                return (r != None) 
     1673            except: 
     1674                return False 
     1675        elif ptype in ('string','file'): 
     1676            return (result != "") 
     1677        elif ptype == 'fileN': 
     1678            return True 
     1679        else: 
     1680            print "Program bug, unknown type '%s'" % ptype 
     1681            return False 
    16311682 
    16321683 
    16331684class QueryString(wx.Dialog): 
    16341685 
    1635     def __init__( self, parent, title, prompt ): 
    1636         wx.Dialog.__init__( self, parent, -1, title, size=(350,200) ) 
     1686    def __init__( self, parent, title, prompt, oldvalue ): 
     1687        wx.Dialog.__init__( self, parent, -1, title, size=(350,120) ) 
    16371688        self.SetBackgroundColour( 'white' ) 
    16381689        wx.StaticText( self, label=prompt, pos=(10,10) ) 
    1639         self.text = wx.TextCtrl( self, value="fsdfds", pos=(100,10), 
    1640             size=(100,50) ) 
    1641         tbtn = wx.Button( self, label='OK', pos=(10,150) ) 
     1690        self.text = wx.TextCtrl( self, value=oldvalue, pos=(10,30), 
     1691            size=(200,26) ) 
     1692        tbtn = wx.Button( self, label='OK', pos=(100,70) ) 
    16421693        self.Bind( wx.EVT_BUTTON, self.OnText, tbtn ) 
    16431694        self.result = None 
     
    17341785    wx.CallAfter(plotter.canvas.OnIdle, None) 
    17351786subscribe_ui_event(__screenshot, "screenshot") 
     1787 
     1788 
     1789@ui_events 
     1790def __updateparams(unused): 
     1791    """ 
     1792    Trigger redraw of parameter dialog. 
     1793    """ 
     1794    global plotter 
     1795    if plotter and plotter.pardialog != None: 
     1796        wx.CallAfter(plotter.pardialog.updateVariables, None) 
     1797subscribe_ui_event(__updateparams, "updateparams") 
     1798 
     1799@ui_events 
     1800def __openparams(unused): 
     1801    """ 
     1802    Open parameter dialog box. 
     1803    """ 
     1804    global plotter 
     1805    if plotter and plotter.pardialog == None: 
     1806        wx.CallAfter(plotter.OnOpenParams, None) 
     1807subscribe_ui_event(__openparams, "openparams") 
     1808 
Note: See TracChangeset for help on using the changeset viewer.