Changeset 837


Ignore:
Timestamp:
Apr 26, 2012 1:45:52 PM (10 years ago)
Author:
jemian
Message:

refactor common code

Location:
moxy/trunk/src/moxy/moxy_wx
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • moxy/trunk/src/moxy/moxy_wx/axis.py

    r836 r837  
    2020
    2121import wx                   #@UnusedImport
    22 import wx.lib.buttons
    23 import wx.lib.stattext
    2422import moxy.model.pv
    2523from moxy.model.axis import SingleAxis
    2624import epics.wx
     25import tools
    2726
    2827
     
    3332
    3433CONNECT_TEST_TIMEOUT = 0.1                      # seconds
    35 
    36 COLOR_MOVING = wx.Colour(179, 250, 142)         # pale green
    37 COLOR_NOT_MOVING = wx.Colour(200, 191, 140)     # not exactly background color
    38 COLOR_BACKGROUND = wx.Colour(237, 233, 227)     # boa-constructor uses this
    39 COLOR_PV_AUTOFILL = wx.Colour(200, 200, 200)    # pale grey
    40 COLOR_PV_NOT_OK = wx.Colour(254, 232, 255)      # pale pink
    41 COLOR_PV_OK = wx.Colour(235, 254, 231)          # pale green (another)
    42 
    43 COLOR_PV_NOT_DEFINED = COLOR_BACKGROUND
    44 
    4534
    4635# - - - - - - - - - - - - - - - - - - classes
     
    126115        position_sizer = self._Make_Positions_Sizer( panel )
    127116       
    128         controlsButton = axis_Button(panel,
     117        controlsButton = tools.Button(panel,
    129118                                         label=u'more',
    130119                                         name='controlsButton',
     
    132121                                         binding=self.doMotorControlsButton)
    133122       
    134         stopButton = axis_Button(panel,
     123        stopButton = tools.Button(panel,
    135124                                         label=u'Stop',
    136125                                         name='stopButton',
     
    153142        describe this axis, return a sizer
    154143        '''
    155         self.gst_name = wx.lib.stattext.GenStaticText(parent,
    156                                                       wx.ID_ANY, 'description')
    157         self.gst_name.SetToolTipString(u'local name for this axis')
    158         self.gst_name.SetLabel( self.axis_parent.axis.name )
    159        
    160         self.w_desc = wx.lib.stattext.GenStaticText(parent,
    161                                                     wx.ID_ANY, 'description')
    162         self.w_desc.SetToolTipString(u'EPICS description for this axis')
    163        
    164         self.w_egu = wx.lib.stattext.GenStaticText(parent, wx.ID_ANY, 'units')
    165         self.w_egu.SetToolTipString(u'engineering units')
     144        self.gst_name = tools.Label(parent, self.axis_parent.axis.name,
     145                    tooltip=u'local name for this axis')
     146       
     147        self.w_desc = tools.Label(parent, 'description',
     148                    tooltip=u'EPICS description for this axis')
     149       
     150        self.w_egu = tools.Label(parent, 'units',
     151                    tooltip=u'engineering units')
    166152
    167153        sbox = wx.StaticBox(parent, id=wx.ID_ANY,
     
    182168        show readback and target values and connection state, return the sizer
    183169        '''
    184         self.w_readback = wx.lib.stattext.GenStaticText(parent,
    185                                                         wx.ID_ANY, 'readback')
    186         self.w_readback.SetToolTipString(u'readback value')
    187    
    188         self.w_target = axis_TextEntry(parent, '',
     170        self.w_readback = tools.Label(parent, 'readback',
     171                    tooltip=u'readback value')
     172   
     173        self.w_target = tools.TextEntry(parent, '',
    189174                False, u'target value', self.doTargetEntry)
    190175       
    191         self.w_status = wx.lib.stattext.GenStaticText(parent, wx.ID_ANY, 'status')
    192         self.w_status.SetToolTipString(u'EPICS connection status')
     176        self.w_status = tools.Label(parent, 'status',
     177                    tooltip=u'EPICS connection status')
    193178       
    194179        sbox = wx.StaticBox(parent, id=wx.ID_ANY,
     
    219204                except ValueError:
    220205                    msg = '''"%s" is not a floating point number!''' % s
    221                     AcknowledgeDialog(self.parent, msg )
     206                    tools.AcknowledgeDialog(self.parent, msg )
    222207
    223208    def doStopButton(self, event):
     
    238223            msg = "This axis is not an EPICS motor record."
    239224            msg += "  No motor control screen available."
    240             AcknowledgeDialog(self.axis_parent, msg)
     225            tools.AcknowledgeDialog(self.axis_parent, msg)
    241226
    242227    def SetStatus(self, value):
     
    285270        '''set the widget background color based on moving state'''
    286271        moving = not value
    287         color = {False: COLOR_NOT_MOVING, True: COLOR_MOVING}[moving]
     272        color = {False: tools.COLOR_NOT_MOVING, True: tools.COLOR_MOVING}[moving]
    288273        wx.CallAfter(self.w_target.SetBackgroundColour, color )
    289274        wx.CallAfter(self.w_readback.SetBackgroundColour, color )
     
    358343        make an editor to change the settings, return a sizer
    359344        '''
    360         label_name = wx.lib.stattext.GenStaticText(parent, wx.ID_ANY, 'name')
    361         label_VAL = wx.lib.stattext.GenStaticText(parent, wx.ID_ANY, 'VAL')
    362         label_isMotor = wx.lib.stattext.GenStaticText(parent, wx.ID_ANY, '"motor?"')
    363         label_RBV = wx.lib.stattext.GenStaticText(parent, wx.ID_ANY, 'RBV')
    364         label_EGU = wx.lib.stattext.GenStaticText(parent, wx.ID_ANY, 'EGU')
    365         label_DESC = wx.lib.stattext.GenStaticText(parent, wx.ID_ANY, 'DESC')
    366         label_DMOV = wx.lib.stattext.GenStaticText(parent, wx.ID_ANY, 'DMOV')
    367         label_STOP = wx.lib.stattext.GenStaticText(parent, wx.ID_ANY, 'STOP')
     345        label_name = tools.Label(parent, 'name')
     346        label_VAL = tools.Label(parent, 'VAL')
     347        label_isMotor = tools.Label(parent, '"motor?"')
     348        label_RBV = tools.Label(parent, 'RBV')
     349        label_EGU = tools.Label(parent, 'EGU')
     350        label_DESC = tools.Label(parent, 'DESC')
     351        label_DMOV = tools.Label(parent, 'DMOV')
     352        label_STOP = tools.Label(parent, 'STOP')
    368353       
    369354        this_axis = self.axis_parent.axis
    370         self.w_name = axis_TextEntry(parent, this_axis.name,
     355        self.w_name = tools.TextEntry(parent, this_axis.name,
    371356                        True, u'local name for this axis',
    372357                        self.doConfigureHandler)
    373         self.w_VAL_pv = axis_TextEntry(parent,
     358        self.w_VAL_pv = tools.TextEntry(parent,
    374359                            this_axis.axis.get_pv('VAL').pvname,
    375360                            True, u'EPICS PV name for target position',
     
    381366        self.w_isMotor.Bind(wx.EVT_CHECKBOX, self.doCheckboxClick)
    382367       
    383         self.w_RBV_pv = axis_TextEntry(parent,
     368        self.w_RBV_pv = tools.TextEntry(parent,
    384369                            this_axis.axis.get_pv('RBV').pvname,
    385370                            True, u'EPICS PV name for readback position',
    386371                            self.doConfigureHandler)
    387         self.w_EGU_pv = axis_TextEntry(parent,
     372        self.w_EGU_pv = tools.TextEntry(parent,
    388373                            this_axis.axis.get_pv('EGU').pvname,
    389374                            True, u'EPICS PV name for engineering units',
    390375                            self.doConfigureHandler)
    391         self.w_DESC_pv = axis_TextEntry(parent,
     376        self.w_DESC_pv = tools.TextEntry(parent,
    392377                            this_axis.axis.get_pv('DESC').pvname,
    393378                            True, u'EPICS PV name for description',
    394379                            self.doConfigureHandler)
    395         self.w_DMOV_pv = axis_TextEntry(parent,
     380        self.w_DMOV_pv = tools.TextEntry(parent,
    396381                            this_axis.axis.get_pv('DMOV').pvname,
    397382                            True, u'EPICS PV name for motion is done',
    398383                            self.doConfigureHandler)
    399         self.w_STOP_pv = axis_TextEntry(parent,
     384        self.w_STOP_pv = tools.TextEntry(parent,
    400385                            this_axis.axis.get_pv('STOP').pvname,
    401386                            True, u'EPICS PV name for STOP moving command',
     
    404389            val_pv = this_axis.axis.get_pv('VAL').pvname
    405390            self.w_VAL_pv.SetValue( moxy.model.pv.GetBasePv(val_pv) )
    406             self.w_RBV_pv.SetValue( '' )
    407             self.w_EGU_pv.SetValue( '' )
    408             self.w_DESC_pv.SetValue( '' )
    409             self.w_DMOV_pv.SetValue( '' )
    410             self.w_STOP_pv.SetValue( '' )
     391            for obj in (self.w_RBV_pv,
     392                        self.w_EGU_pv,
     393                        self.w_DESC_pv,
     394                        self.w_DMOV_pv,
     395                        self.w_STOP_pv):
     396                obj.SetValue( '' )
    411397       
    412398        sbox = wx.StaticBox(parent, id=wx.ID_ANY,
     
    434420        build a buttons row and place it in a sizer, return the sizer
    435421        '''
    436         self.connectButton = axis_Button(parent,
     422        self.connectButton = tools.Button(parent,
    437423              label=u'Connect', name='connectButton',
    438424              tip=u'Connect this axis with EPICS',
    439425              binding=self.doConnnectButton)
    440         self.disconnectButton = axis_Button(parent,
     426        self.disconnectButton = tools.Button(parent,
    441427              label=u'Disconnect', name='disconnectButton',
    442428              tip=u'Disconnect this axis from EPICS',
     
    452438        build a buttons row and place it in a sizer, return the sizer
    453439        '''
    454         self.acceptButton = axis_Button(parent,
     440        self.acceptButton = tools.Button(parent,
    455441              label=u'Accept', name='acceptButton',
    456442              tip=u'Accept the new PV names',
    457443              binding=self.doAcceptButton)
    458         self.revertButton = axis_Button(parent,
     444        self.revertButton = tools.Button(parent,
    459445              label=u'Revert', name='revertButton',
    460446              tip=u'Revert to previous PV names',
     
    515501        result = self._Verify_Fields_Before_Accepting()
    516502        if result is not None:
    517             AcknowledgeDialog(self.parent, result )
     503            tools.AcknowledgeDialog(self.parent, result )
    518504            return
    519505
     
    584570        pv = obj.GetValue().strip()
    585571        if len(pv) == 0:
    586             color = COLOR_PV_NOT_DEFINED
     572            color = tools.COLOR_PV_NOT_DEFINED
    587573        else:
    588574            valid = moxy.model.pv.pvIsAvailable( pv, CONNECT_TEST_TIMEOUT )
    589             color = {True: COLOR_PV_OK, False: COLOR_PV_NOT_OK}[valid]
     575            color = {True: tools.COLOR_PV_OK, False: tools.COLOR_PV_NOT_OK}[valid]
    590576        wx.CallAfter( obj.SetBackgroundColour, color )
    591577
     
    706692
    707693
    708 class axis_Button(wx.lib.buttons.GenButton):
    709     '''custom Button widget'''
    710    
    711     def __init__(self, parent, label, name, tip, binding):
    712         wx.lib.buttons.GenButton.__init__(self, id=wx.ID_ANY,
    713                               label=label, name=name, parent=parent)
    714         self.SetToolTipString(tip)
    715         self.Bind(wx.EVT_BUTTON, binding)
    716 
    717 
    718 class axis_TextEntry(wx.TextCtrl):
    719     '''custom wx.TextCtrl widget'''
    720    
    721     def __init__(self, parent, value='',
    722                        editable=True, tooltip='', handler=None):
    723         '''
    724         Create and return a TextCtrl object.
    725         [Enter] key event is bound to widget to call handler.
    726        
    727         :param obj parent: widget panel that will contain this TextCtrl
    728         :param str|float value: initial value to set in the entry field
    729         :param bool editable: should the entry field be editable?
    730         :param str tooltip: short description of this field
    731         :param obj handler: None or method to be called when [Enter] is pressed in this field
    732         :return: wx.TextCtrl object
    733         '''
    734         style = wx.TE_PROCESS_ENTER
    735         wx.TextCtrl.__init__(self, parent, wx.ID_ANY, 'DemoView', style=style)
    736         self.SetEditable( editable )
    737         if value is not None:
    738             self.SetValue( str(value) )
    739         self.SetToolTipString( tooltip )
    740         if handler is not None:
    741             self.Bind(wx.EVT_TEXT_ENTER, handler)
    742 
    743 
    744694# - - - - - - - - - - - - - - - - - - methods
    745 
    746 
    747    
    748 def AcknowledgeDialog(parent, msg):
    749     ''' present a modal dialog box with a message to be acknowledged '''
    750     dlg = wx.MessageDialog(parent, msg,
    751                 "Acknowledge", wx.OK|wx.ICON_EXCLAMATION)
    752     dlg.ShowModal()
    753     dlg.Destroy()
    754695
    755696
  • moxy/trunk/src/moxy/moxy_wx/pv.py

    r836 r837  
    2424import wx.lib.stattext
    2525from moxy.model.pv import PvConnection
     26import tools
    2627
    2728
     
    3031
    3132__svnid__ = "$Id$"
    32 COLOR_MOVING = wx.Colour(179, 250, 142)         # pale green
    33 COLOR_NOT_MOVING = wx.Colour(200, 191, 140)     # not exactly background color
    34 COLOR_PALE_PURPLE = wx.Colour(200, 200, 255)    # my name for this
    35 COLOR_LIGHTGREEN = wx.Colour(200, 255, 200)     # my name for this
    36 COLOR_LIGHTRED = wx.Colour(255, 200, 200)       # my name for this
    37 COLOR_BACKGROUND = wx.Colour(237, 233, 227)     # boa-constructor uses this
    3833
    3934
     
    8277        edit the PV name string if not connected
    8378        '''
    84         self.w_pvname = wx.TextCtrl(parent=parent, id=wx.ID_ANY)
    85         self.w_pvname.SetEditable(True)
    86         self.w_value = wx.TextCtrl(parent=parent, id=wx.ID_ANY)
    87         self.w_value.SetEditable(False)
    88         self.w_value.SetBackgroundColour( COLOR_BACKGROUND )
     79        self.w_pvname = tools.TextEntry(parent, editable=True)
     80        self.w_value = tools.TextEntry(parent, bgColor=tools.COLOR_BACKGROUND)
    8981       
    9082        self.SetPV(self.pvname)
     
    109101        show connection state and something else useful
    110102        '''
    111         self.w_state = wx.TextCtrl(parent=parent, id=wx.ID_ANY)
    112         self.w_state.SetEditable(False)
    113         self.w_remarks = wx.TextCtrl(parent=parent, id=wx.ID_ANY)
    114         self.w_remarks.SetEditable(False)
     103        self.w_state = tools.TextEntry(parent)
     104        self.w_remarks = tools.TextEntry(parent)
    115105       
    116106        self.SetState(self.state)
     
    133123        build the buttons row and place it in a sizer, return the sizer
    134124        '''
    135         self.connectButton = self._Make_My_Button(parent,
     125        self.connectButton = tools.Button(parent,
    136126              label=u'Connect', name='connectButton',
    137127              tip=u'Connect with EPICS PV',
    138128              binding=self.doConnectButton)
    139         self.disconnectButton = self._Make_My_Button(parent,
     129        self.disconnectButton = tools.Button(parent,
    140130              label=u'Disconnect', name='disconnectButton',
    141131              tip=u'Disconnect from EPICS PV',
     
    146136        sizer.AddWindow(self.disconnectButton, proportion=1, flag=wx.EXPAND)
    147137        return sizer
    148        
    149     def _Make_My_Button(self, parent, label, name, tip, binding):
    150         '''
    151         Create a button and bind it to a method.
    152         Return the button object
    153         '''
    154         button = wx.lib.buttons.GenButton(id=wx.ID_ANY,
    155               label=label, name=name, parent=parent,)
    156         button.SetToolTipString(tip)
    157         button.Bind(wx.EVT_BUTTON, binding)
    158         return button
    159138
    160139    def connect(self):
     
    172151        self.SetState( 'not connected' )
    173152        self.SetRemarks( '' )
    174         wx.CallAfter(self.w_value.SetBackgroundColour, COLOR_BACKGROUND)
     153        wx.CallAfter(self.w_value.SetBackgroundColour, tools.COLOR_BACKGROUND)
    175154
    176155    def doConnectButton(self, event):
     
    198177    def ColorSelector(self, index):
    199178        # this makes a gaudy display
    200         clut = [ COLOR_NOT_MOVING, COLOR_MOVING,
    201                  COLOR_PALE_PURPLE, COLOR_LIGHTGREEN, COLOR_LIGHTRED,
    202                  wx.RED,
     179        clut = [ tools.COLOR_NOT_MOVING,
     180                 tools.COLOR_MOVING,
     181                 tools.COLOR_PALE_PURPLE,
     182                 tools.COLOR_LIGHTGREEN,
     183                 tools.COLOR_LIGHTRED,
     184                 tools.COLOR_RED,
    203185                 'orange',
    204186                 'yellow',
     
    225207                self.SetValue( value )
    226208            else:
    227                 wx.CallAfter(self.w_value.SetBackgroundColour, COLOR_BACKGROUND)
     209                wx.CallAfter(self.w_value.SetBackgroundColour, tools.COLOR_BACKGROUND)
    228210                self.SetRemarks( 'disconnect received, IOC is unavailable?' )
    229211        else:
Note: See TracChangeset for help on using the changeset viewer.