Ejemplo n.º 1
0
    def OnSelect(self, event):
        item = event.GetSelection()
        event_id = event.GetId()
        if event_id == ID_CBX_SEL_STATION:
            keyItem = self.cbxStationID.GetClientData(item)
            print 'Station cbx, item ', item, 'key', keyItem
            # refill the Loggers combobox based on the Series selected
            stSQLLoggers = """SELECT Loggers.ID, Loggers.LoggerSerialNumber
            FROM (ChannelSegments LEFT JOIN DataChannels
            ON ChannelSegments.ChannelID = DataChannels.ID)
            LEFT JOIN Loggers ON DataChannels.LoggerID = Loggers.ID
            WHERE (((ChannelSegments.StationID)={iSe}))
            GROUP BY Loggers.ID, Loggers.LoggerSerialNumber;
            """.format(iSe=keyItem)
            scidb.fillComboboxFromSQL(self.cbxLoggerID, stSQLLoggers)

            stSQLChan = """SELECT DataChannels.ID, ( DataChannels.Column || ',' ||
            Loggers.LoggerSerialNumber || ',' ||  Sensors.SensorSerialNumber || ',' ||
            DataTypes.TypeText || ',' ||  DataUnits.UnitsText || ',' ||
            DataChannels.UTC_Offset) AS Channel,
            DataSeries.DataSeriesDescription AS Series,
            ChannelSegments.SegmentBegin AS Begin
            FROM (((((DataChannels
            LEFT JOIN Loggers ON DataChannels.LoggerID = Loggers.ID)
            LEFT JOIN Sensors ON DataChannels.SensorID = Sensors.ID)
             LEFT JOIN DataTypes ON DataChannels.DataTypeID = DataTypes.ID)
            LEFT JOIN DataUnits ON DataChannels.DataUnitsID = DataUnits.ID)
            LEFT JOIN ChannelSegments ON DataChannels.ID = ChannelSegments.ChannelID)
            LEFT JOIN DataSeries ON ChannelSegments.SeriesID = DataSeries.ID
            WHERE Loggers.ID IN (SELECT Loggers.ID
            FROM (ChannelSegments LEFT JOIN DataChannels
            ON ChannelSegments.ChannelID = DataChannels.ID)
            LEFT JOIN Loggers ON DataChannels.LoggerID = Loggers.ID
            WHERE (((ChannelSegments.StationID)={iSe}))
            GROUP BY Loggers.ID, Loggers.LoggerSerialNumber)
            """.format(iSe=keyItem)
            scidb.fillComboCtrlPopupFromSQL(self.chanPopup, stSQLChan,
                                            [300, 180, 140])

        if event_id == ID_CBX_SEL_LOGGER:
            keyItem = self.cbxLoggerID.GetClientData(item)
            print 'Logger cbx, item ', item, 'key', keyItem
            stSQLChan = """SELECT DataChannels.ID, ( DataChannels.Column || ',' ||
            Loggers.LoggerSerialNumber || ',' ||  Sensors.SensorSerialNumber || ',' ||
            DataTypes.TypeText || ',' ||  DataUnits.UnitsText || ',' ||
            DataChannels.UTC_Offset) AS Channel,
            DataSeries.DataSeriesDescription AS Series,
            ChannelSegments.SegmentBegin AS Begin
            FROM (((((DataChannels
            LEFT JOIN Loggers ON DataChannels.LoggerID = Loggers.ID)
            LEFT JOIN Sensors ON DataChannels.SensorID = Sensors.ID)
             LEFT JOIN DataTypes ON DataChannels.DataTypeID = DataTypes.ID)
            LEFT JOIN DataUnits ON DataChannels.DataUnitsID = DataUnits.ID)
            LEFT JOIN ChannelSegments ON DataChannels.ID = ChannelSegments.ChannelID)
            LEFT JOIN DataSeries ON ChannelSegments.SeriesID = DataSeries.ID
            WHERE Loggers.ID = {iSe}
            """.format(iSe=keyItem)
            scidb.fillComboCtrlPopupFromSQL(self.chanPopup, stSQLChan,
                                            [300, 180, 140])
Ejemplo n.º 2
0
    def OnSelect(self, event):
        item = event.GetSelection()
        event_id = event.GetId()
        if event_id == ID_CBX_SEL_STATION:
            keyItem = self.cbxStationID.GetClientData(item)
            print 'Station cbx, item ', item, 'key', keyItem
            # refill the Loggers combobox based on the Series selected
            stSQLLoggers = """SELECT Loggers.ID, Loggers.LoggerSerialNumber
            FROM (ChannelSegments LEFT JOIN DataChannels
            ON ChannelSegments.ChannelID = DataChannels.ID)
            LEFT JOIN Loggers ON DataChannels.LoggerID = Loggers.ID
            WHERE (((ChannelSegments.StationID)={iSe}))
            GROUP BY Loggers.ID, Loggers.LoggerSerialNumber;
            """.format(iSe=keyItem)
            scidb.fillComboboxFromSQL(self.cbxLoggerID, stSQLLoggers)

            stSQLChan = """SELECT DataChannels.ID, ( DataChannels.Column || ',' ||
            Loggers.LoggerSerialNumber || ',' ||  Sensors.SensorSerialNumber || ',' ||
            DataTypes.TypeText || ',' ||  DataUnits.UnitsText || ',' ||
            DataChannels.UTC_Offset) AS Channel,
            DataSeries.DataSeriesDescription AS Series,
            ChannelSegments.SegmentBegin AS Begin
            FROM (((((DataChannels
            LEFT JOIN Loggers ON DataChannels.LoggerID = Loggers.ID)
            LEFT JOIN Sensors ON DataChannels.SensorID = Sensors.ID)
             LEFT JOIN DataTypes ON DataChannels.DataTypeID = DataTypes.ID)
            LEFT JOIN DataUnits ON DataChannels.DataUnitsID = DataUnits.ID)
            LEFT JOIN ChannelSegments ON DataChannels.ID = ChannelSegments.ChannelID)
            LEFT JOIN DataSeries ON ChannelSegments.SeriesID = DataSeries.ID
            WHERE Loggers.ID IN (SELECT Loggers.ID
            FROM (ChannelSegments LEFT JOIN DataChannels
            ON ChannelSegments.ChannelID = DataChannels.ID)
            LEFT JOIN Loggers ON DataChannels.LoggerID = Loggers.ID
            WHERE (((ChannelSegments.StationID)={iSe}))
            GROUP BY Loggers.ID, Loggers.LoggerSerialNumber)
            """.format(iSe=keyItem)
            scidb.fillComboCtrlPopupFromSQL(self.chanPopup, stSQLChan, [300, 180, 140])

        if event_id == ID_CBX_SEL_LOGGER:
            keyItem = self.cbxLoggerID.GetClientData(item)
            print 'Logger cbx, item ', item, 'key', keyItem
            stSQLChan = """SELECT DataChannels.ID, ( DataChannels.Column || ',' ||
            Loggers.LoggerSerialNumber || ',' ||  Sensors.SensorSerialNumber || ',' ||
            DataTypes.TypeText || ',' ||  DataUnits.UnitsText || ',' ||
            DataChannels.UTC_Offset) AS Channel,
            DataSeries.DataSeriesDescription AS Series,
            ChannelSegments.SegmentBegin AS Begin
            FROM (((((DataChannels
            LEFT JOIN Loggers ON DataChannels.LoggerID = Loggers.ID)
            LEFT JOIN Sensors ON DataChannels.SensorID = Sensors.ID)
             LEFT JOIN DataTypes ON DataChannels.DataTypeID = DataTypes.ID)
            LEFT JOIN DataUnits ON DataChannels.DataUnitsID = DataUnits.ID)
            LEFT JOIN ChannelSegments ON DataChannels.ID = ChannelSegments.ChannelID)
            LEFT JOIN DataSeries ON ChannelSegments.SeriesID = DataSeries.ID
            WHERE Loggers.ID = {iSe}
            """.format(iSe=keyItem)
            scidb.fillComboCtrlPopupFromSQL(self.chanPopup, stSQLChan, [300, 180, 140])
Ejemplo n.º 3
0
    def LayoutMaskingSetupPanel(self, pnl):

        pnl.SetBackgroundColour(wx.WHITE)
        iLinespan = 5
        stpSiz = wx.GridBagSizer(1, 1)
        
        gRow = 0
        stpLabel = wx.StaticText(pnl, -1, 'Set up Masking here')
        stpSiz.Add(stpLabel, pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)
        
        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Narrow Logger(s) to Station:'),
                     pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        stSQLStations = 'SELECT ID, StationName FROM Stations;'
        self.cbxStationID = wx.ComboBox(pnl, ID_CBX_SEL_STATION, style=wx.CB_READONLY)
        scidb.fillComboboxFromSQL(self.cbxStationID, stSQLStations)
        stpSiz.Add(self.cbxStationID, pos=(gRow, 2), span=(1, 3), flag=wx.LEFT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Narrow Channel choices to Logger:'),
                     pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        stSQLLoggers = 'SELECT ID, LoggerSerialNumber FROM Loggers;'
        self.cbxLoggerID = wx.ComboBox(pnl, ID_CBX_SEL_LOGGER, style=wx.CB_READONLY)
        scidb.fillComboboxFromSQL(self.cbxLoggerID, stSQLLoggers)
        stpSiz.Add(self.cbxLoggerID, pos=(gRow, 2), span=(1, 3), flag=wx.LEFT, border=5)

        self.Bind(wx.EVT_COMBOBOX, self.OnSelect)

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Data Channel:'),
                     pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        self.cbxChanID = wx.combo.ComboCtrl(pnl, ID_CHAN_TEXT, "", style=wx.CB_READONLY | wx.TE_PROCESS_ENTER)
        self.chanPopup = ListCtrlComboPopup()
#        pnl.chanPopup.id = ID_CHAN_LIST
        # It is important to call SetPopupControl() as soon as possible
        self.cbxChanID.SetPopupControl(self.chanPopup)
        stpSiz.Add(self.cbxChanID, pos=(gRow, 2), span=(1, 7), flag=wx.LEFT, border=5)
        stSQLChan = "SELECT DataChannels.ID, " \
            "( DataChannels.Column || ',' ||  Loggers.LoggerSerialNumber || ',' ||  " \
            "Sensors.SensorSerialNumber || ',' ||  DataTypes.TypeText || ',' ||  " \
            "DataUnits.UnitsText || ',' ||  DataChannels.UTC_Offset) AS Channel, " \
            "DataSeries.DataSeriesDescription AS Series, ChannelSegments.SegmentBegin AS Begin " \
            "FROM (((((DataChannels LEFT JOIN Loggers ON DataChannels.LoggerID = Loggers.ID) " \
            "LEFT JOIN Sensors ON DataChannels.SensorID = Sensors.ID) " \
            "LEFT JOIN DataTypes ON DataChannels.DataTypeID = DataTypes.ID) " \
            "LEFT JOIN DataUnits ON DataChannels.DataUnitsID = DataUnits.ID) " \
            "LEFT JOIN ChannelSegments ON DataChannels.ID = ChannelSegments.ChannelID) " \
            "LEFT JOIN DataSeries ON ChannelSegments.SeriesID = DataSeries.ID;"
        scidb.fillComboCtrlPopupFromSQL(self.chanPopup, stSQLChan, [300, 180, 140])
#        pnl.chanPopup.AddItem(("a",None,3,4,5,6,7)) # test AddItem w /every imaginable error

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Time interval to view, in Universal Time'),
                     pos=(gRow, 1), span=(1, 5), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Start'),
                     pos=(gRow, 0), span=(1, 1), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.tcDTStart = wx.TextCtrl(pnl, ID_START_TIME, style=wx.TE_PROCESS_ENTER)
        self.tcDTStart.Bind(wx.EVT_TEXT_ENTER, self.OnEnterKey)
        self.tcDTStart.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)
        stpSiz.Add(self.tcDTStart, pos=(gRow, 1), span=(1, 3), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)
#        self.tcDTStart.SetValue('2010-06-13 5pm') # for testing
        self.tcDTStart.SetValue('timestamp, or blank for first in Channel')

        # add StartTime adjustment buttons
        sbHorizSizer = wx.BoxSizer(wx.HORIZONTAL)

        self.StartDayDnButton = wx.Button(pnl, ID_ST_DAY_DN_BTN, '<Da', style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON,  self.OnTimeAdjustButton, id=ID_ST_DAY_DN_BTN)
        sbHorizSizer.Add(self.StartDayDnButton)

        self.StartHourDnButton = wx.Button(pnl, ID_ST_HOUR_DN_BTN, '<Hr', style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON,  self.OnTimeAdjustButton, id=ID_ST_HOUR_DN_BTN)
        sbHorizSizer.Add(self.StartHourDnButton)

        self.StartHourUpButton = wx.Button(pnl, ID_ST_HOUR_UP_BTN, 'Hr>', style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON,  self.OnTimeAdjustButton, id=ID_ST_HOUR_UP_BTN)
        sbHorizSizer.Add(self.StartHourUpButton)

        self.StartDayUpButton = wx.Button(pnl, ID_ST_DAY_UP_BTN, 'Da>', style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON,  self.OnTimeAdjustButton, id=ID_ST_DAY_UP_BTN)
        sbHorizSizer.Add(self.StartDayUpButton)

        stpSiz.Add(sbHorizSizer, pos=(gRow, 4), span=(1, 1))

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'End'),
                     pos=(gRow, 0), span=(1, 1), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.tcDTEnd = wx.TextCtrl(pnl, ID_END_TIME, style=wx.TE_PROCESS_ENTER)
        self.tcDTEnd.Bind(wx.EVT_TEXT_ENTER, self.OnEnterKey)
        self.tcDTEnd.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)
        stpSiz.Add(self.tcDTEnd, pos=(gRow, 1), span=(1, 3), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)
        
#        self.tcDTEnd.SetValue('2010-06-14 5pm') # for testing
        self.tcDTEnd.SetValue('timestamp, or blank for last in Channel')

        # add EndTime adjustment buttons
        ebHorizSizer = wx.BoxSizer(wx.HORIZONTAL)

        self.EndDayDnButton = wx.Button(pnl, ID_EN_DAY_DN_BTN, '<Da', style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON,  self.OnTimeAdjustButton, id=ID_EN_DAY_DN_BTN)
        ebHorizSizer.Add(self.EndDayDnButton)

        self.EndHourDnButton = wx.Button(pnl, ID_EN_HOUR_DN_BTN, '<Hr', style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON,  self.OnTimeAdjustButton, id=ID_EN_HOUR_DN_BTN)
        ebHorizSizer.Add(self.EndHourDnButton)

        self.EndHourUpButton = wx.Button(pnl, ID_EN_HOUR_UP_BTN, 'Hr>', style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON,  self.OnTimeAdjustButton, id=ID_EN_HOUR_UP_BTN)
        ebHorizSizer.Add(self.EndHourUpButton)

        self.EndDayUpButton = wx.Button(pnl, ID_EN_DAY_UP_BTN, 'Da>', style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON,  self.OnTimeAdjustButton, id=ID_EN_DAY_UP_BTN)
        ebHorizSizer.Add(self.EndDayUpButton)

        stpSiz.Add(ebHorizSizer, pos=(gRow, 4), span=(1, 1))
        
        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)

        gRow += 1
        mrbVertSizer = wx.BoxSizer(wx.VERTICAL)
        
        self.rbMask = wx.RadioButton(pnl, ID_RB_MASK, label='Mask', style=wx.RB_GROUP)
        mrbVertSizer.Add(self.rbMask, proportion=0, flag=wx.ALIGN_LEFT|wx.LEFT)
        self.rbMask.Bind(wx.EVT_RADIOBUTTON, self.giveRBInfo)

        self.rbUnmask = wx.RadioButton(pnl, ID_RB_UNMASK, label='Unmask')
        mrbVertSizer.Add(self.rbUnmask, proportion=0, flag=wx.ALIGN_LEFT|wx.LEFT)
        self.rbUnmask.Bind(wx.EVT_RADIOBUTTON, self.giveRBInfo)

        iRBLeftBorderWd = 30
        stpSiz.Add(mrbVertSizer, pos=(gRow, 0), span=(1, 2), 
            flag=wx.ALIGN_LEFT|wx.LEFT, border=iRBLeftBorderWd)

        self.applyButton = wx.Button(pnl, ID_APPLY_BTN, 'Apply')
        self.Bind(wx.EVT_BUTTON,  self.OnApplyBtn, id=ID_APPLY_BTN)
        stpSiz.Add(self.applyButton, pos=(gRow, 3), span=(1, 1), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)

        self.giveRBInfo(-1) # have to explictly call this 1st time; -1 is dummy value for event

        pnl.SetSizer(stpSiz)
        pnl.SetAutoLayout(1)
        pnl.SetupScrolling()
Ejemplo n.º 4
0
    def LayoutMaskingSetupPanel(self, pnl):

        pnl.SetBackgroundColour(wx.WHITE)
        iLinespan = 5
        stpSiz = wx.GridBagSizer(1, 1)

        gRow = 0
        stpLabel = wx.StaticText(pnl, -1, 'Set up Masking here')
        stpSiz.Add(stpLabel,
                   pos=(gRow, 0),
                   span=(1, 2),
                   flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                   border=5)

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl),
                   pos=(gRow, 0),
                   span=(1, iLinespan),
                   flag=wx.EXPAND)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Narrow Logger(s) to Station:'),
                   pos=(gRow, 0),
                   span=(1, 2),
                   flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                   border=5)

        stSQLStations = 'SELECT ID, StationName FROM Stations;'
        self.cbxStationID = wx.ComboBox(pnl,
                                        ID_CBX_SEL_STATION,
                                        style=wx.CB_READONLY)
        scidb.fillComboboxFromSQL(self.cbxStationID, stSQLStations)
        stpSiz.Add(self.cbxStationID,
                   pos=(gRow, 2),
                   span=(1, 3),
                   flag=wx.LEFT,
                   border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Narrow Channel choices to Logger:'),
                   pos=(gRow, 0),
                   span=(1, 2),
                   flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                   border=5)

        stSQLLoggers = 'SELECT ID, LoggerSerialNumber FROM Loggers;'
        self.cbxLoggerID = wx.ComboBox(pnl,
                                       ID_CBX_SEL_LOGGER,
                                       style=wx.CB_READONLY)
        scidb.fillComboboxFromSQL(self.cbxLoggerID, stSQLLoggers)
        stpSiz.Add(self.cbxLoggerID,
                   pos=(gRow, 2),
                   span=(1, 3),
                   flag=wx.LEFT,
                   border=5)

        self.Bind(wx.EVT_COMBOBOX, self.OnSelect)

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl),
                   pos=(gRow, 0),
                   span=(1, iLinespan),
                   flag=wx.EXPAND)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Data Channel:'),
                   pos=(gRow, 0),
                   span=(1, 2),
                   flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                   border=5)

        self.cbxChanID = wx.combo.ComboCtrl(pnl,
                                            ID_CHAN_TEXT,
                                            "",
                                            style=wx.CB_READONLY
                                            | wx.TE_PROCESS_ENTER)
        self.chanPopup = ListCtrlComboPopup()
        #        pnl.chanPopup.id = ID_CHAN_LIST
        # It is important to call SetPopupControl() as soon as possible
        self.cbxChanID.SetPopupControl(self.chanPopup)
        stpSiz.Add(self.cbxChanID,
                   pos=(gRow, 2),
                   span=(1, 7),
                   flag=wx.LEFT,
                   border=5)
        stSQLChan = "SELECT DataChannels.ID, " \
            "( DataChannels.Column || ',' ||  Loggers.LoggerSerialNumber || ',' ||  " \
            "Sensors.SensorSerialNumber || ',' ||  DataTypes.TypeText || ',' ||  " \
            "DataUnits.UnitsText || ',' ||  DataChannels.UTC_Offset) AS Channel, " \
            "DataSeries.DataSeriesDescription AS Series, ChannelSegments.SegmentBegin AS Begin " \
            "FROM (((((DataChannels LEFT JOIN Loggers ON DataChannels.LoggerID = Loggers.ID) " \
            "LEFT JOIN Sensors ON DataChannels.SensorID = Sensors.ID) " \
            "LEFT JOIN DataTypes ON DataChannels.DataTypeID = DataTypes.ID) " \
            "LEFT JOIN DataUnits ON DataChannels.DataUnitsID = DataUnits.ID) " \
            "LEFT JOIN ChannelSegments ON DataChannels.ID = ChannelSegments.ChannelID) " \
            "LEFT JOIN DataSeries ON ChannelSegments.SeriesID = DataSeries.ID;"
        scidb.fillComboCtrlPopupFromSQL(self.chanPopup, stSQLChan,
                                        [300, 180, 140])
        #        pnl.chanPopup.AddItem(("a",None,3,4,5,6,7)) # test AddItem w /every imaginable error

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl),
                   pos=(gRow, 0),
                   span=(1, iLinespan),
                   flag=wx.EXPAND)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1,
                                 'Time interval to view, in Universal Time'),
                   pos=(gRow, 1),
                   span=(1, 5),
                   flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                   border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Start'),
                   pos=(gRow, 0),
                   span=(1, 1),
                   flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                   border=5)
        self.tcDTStart = wx.TextCtrl(pnl,
                                     ID_START_TIME,
                                     style=wx.TE_PROCESS_ENTER)
        self.tcDTStart.Bind(wx.EVT_TEXT_ENTER, self.OnEnterKey)
        self.tcDTStart.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)
        stpSiz.Add(self.tcDTStart,
                   pos=(gRow, 1),
                   span=(1, 3),
                   flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
                   border=5)
        #        self.tcDTStart.SetValue('2010-06-13 5pm') # for testing
        self.tcDTStart.SetValue('timestamp, or blank for first in Channel')

        # add StartTime adjustment buttons
        sbHorizSizer = wx.BoxSizer(wx.HORIZONTAL)

        self.StartDayDnButton = wx.Button(pnl,
                                          ID_ST_DAY_DN_BTN,
                                          '<Da',
                                          style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON, self.OnTimeAdjustButton, id=ID_ST_DAY_DN_BTN)
        sbHorizSizer.Add(self.StartDayDnButton)

        self.StartHourDnButton = wx.Button(pnl,
                                           ID_ST_HOUR_DN_BTN,
                                           '<Hr',
                                           style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON, self.OnTimeAdjustButton, id=ID_ST_HOUR_DN_BTN)
        sbHorizSizer.Add(self.StartHourDnButton)

        self.StartHourUpButton = wx.Button(pnl,
                                           ID_ST_HOUR_UP_BTN,
                                           'Hr>',
                                           style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON, self.OnTimeAdjustButton, id=ID_ST_HOUR_UP_BTN)
        sbHorizSizer.Add(self.StartHourUpButton)

        self.StartDayUpButton = wx.Button(pnl,
                                          ID_ST_DAY_UP_BTN,
                                          'Da>',
                                          style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON, self.OnTimeAdjustButton, id=ID_ST_DAY_UP_BTN)
        sbHorizSizer.Add(self.StartDayUpButton)

        stpSiz.Add(sbHorizSizer, pos=(gRow, 4), span=(1, 1))

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'End'),
                   pos=(gRow, 0),
                   span=(1, 1),
                   flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                   border=5)
        self.tcDTEnd = wx.TextCtrl(pnl, ID_END_TIME, style=wx.TE_PROCESS_ENTER)
        self.tcDTEnd.Bind(wx.EVT_TEXT_ENTER, self.OnEnterKey)
        self.tcDTEnd.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)
        stpSiz.Add(self.tcDTEnd,
                   pos=(gRow, 1),
                   span=(1, 3),
                   flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
                   border=5)

        #        self.tcDTEnd.SetValue('2010-06-14 5pm') # for testing
        self.tcDTEnd.SetValue('timestamp, or blank for last in Channel')

        # add EndTime adjustment buttons
        ebHorizSizer = wx.BoxSizer(wx.HORIZONTAL)

        self.EndDayDnButton = wx.Button(pnl,
                                        ID_EN_DAY_DN_BTN,
                                        '<Da',
                                        style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON, self.OnTimeAdjustButton, id=ID_EN_DAY_DN_BTN)
        ebHorizSizer.Add(self.EndDayDnButton)

        self.EndHourDnButton = wx.Button(pnl,
                                         ID_EN_HOUR_DN_BTN,
                                         '<Hr',
                                         style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON, self.OnTimeAdjustButton, id=ID_EN_HOUR_DN_BTN)
        ebHorizSizer.Add(self.EndHourDnButton)

        self.EndHourUpButton = wx.Button(pnl,
                                         ID_EN_HOUR_UP_BTN,
                                         'Hr>',
                                         style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON, self.OnTimeAdjustButton, id=ID_EN_HOUR_UP_BTN)
        ebHorizSizer.Add(self.EndHourUpButton)

        self.EndDayUpButton = wx.Button(pnl,
                                        ID_EN_DAY_UP_BTN,
                                        'Da>',
                                        style=wx.BU_EXACTFIT)
        self.Bind(wx.EVT_BUTTON, self.OnTimeAdjustButton, id=ID_EN_DAY_UP_BTN)
        ebHorizSizer.Add(self.EndDayUpButton)

        stpSiz.Add(ebHorizSizer, pos=(gRow, 4), span=(1, 1))

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl),
                   pos=(gRow, 0),
                   span=(1, iLinespan),
                   flag=wx.EXPAND)

        gRow += 1
        mrbVertSizer = wx.BoxSizer(wx.VERTICAL)

        self.rbMask = wx.RadioButton(pnl,
                                     ID_RB_MASK,
                                     label='Mask',
                                     style=wx.RB_GROUP)
        mrbVertSizer.Add(self.rbMask,
                         proportion=0,
                         flag=wx.ALIGN_LEFT | wx.LEFT)
        self.rbMask.Bind(wx.EVT_RADIOBUTTON, self.giveRBInfo)

        self.rbUnmask = wx.RadioButton(pnl, ID_RB_UNMASK, label='Unmask')
        mrbVertSizer.Add(self.rbUnmask,
                         proportion=0,
                         flag=wx.ALIGN_LEFT | wx.LEFT)
        self.rbUnmask.Bind(wx.EVT_RADIOBUTTON, self.giveRBInfo)

        iRBLeftBorderWd = 30
        stpSiz.Add(mrbVertSizer,
                   pos=(gRow, 0),
                   span=(1, 2),
                   flag=wx.ALIGN_LEFT | wx.LEFT,
                   border=iRBLeftBorderWd)

        self.applyButton = wx.Button(pnl, ID_APPLY_BTN, 'Apply')
        self.Bind(wx.EVT_BUTTON, self.OnApplyBtn, id=ID_APPLY_BTN)
        stpSiz.Add(self.applyButton,
                   pos=(gRow, 3),
                   span=(1, 1),
                   flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
                   border=5)

        self.giveRBInfo(
            -1
        )  # have to explictly call this 1st time; -1 is dummy value for event

        pnl.SetSizer(stpSiz)
        pnl.SetAutoLayout(1)
        pnl.SetupScrolling()
Ejemplo n.º 5
0
 def fillSitesList(self):
     stSQLFieldSites = 'SELECT ID, SiteName FROM FieldSites'
     scidb.fillComboboxFromSQL(self.cbxFldSites, stSQLFieldSites)
     self.ShowSiteLatLon()
Ejemplo n.º 6
0
 def fillSitesList(self):
     stSQLFieldSites = 'SELECT ID, SiteName FROM FieldSites'
     scidb.fillComboboxFromSQL(self.cbxFldSites, stSQLFieldSites)
     self.ShowSiteLatLon()
Ejemplo n.º 7
0
 def refresh_cbxPanelsChoices(self, event):
     self.cbxGetPanel.Clear()
     stSQLPanels = 'SELECT ID, CalcName FROM NDVIcalc;'
     scidb.fillComboboxFromSQL(self.cbxGetPanel, stSQLPanels)
Ejemplo n.º 8
0
    def LayoutNDVISetupPanel(self, pnl):
        pnl.SetBackgroundColour(wx.WHITE)
        iLinespan = 5
        stpSiz = wx.GridBagSizer(1, 1)
        
        gRow = 0
        stpLabel = wx.StaticText(pnl, -1, 'Set up NDVI calculations here')
        stpSiz.Add(stpLabel, pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        stpSiz.Add(wx.StaticText(pnl, -1, 'Use panel:'),
                     pos=(gRow, 2), span=(1, 1), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        self.cbxGetPanel = wx.ComboBox(pnl, -1, style=wx.CB_READONLY)
        stpSiz.Add(self.cbxGetPanel, pos=(gRow, 3), span=(1, 1), flag=wx.LEFT, border=5)
        self.refresh_cbxPanelsChoices(-1)

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Name for this panel'),
                     pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)              
        self.tcCalcName = wx.TextCtrl(pnl)
        stpSiz.Add(self.tcCalcName, pos=(gRow, 2), span=(1, 3), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)

        # following is rarely used, not implemented yet
#        gRow += 1
#        self.ckChartFromRefDay = wx.CheckBox(pnl, label="Chart using")
#        stpSiz.Add(self.ckChartFromRefDay, pos=(gRow, 0), span=(1, 2), flag=wx.LEFT|wx.BOTTOM, border=5)
#        self.tcRefDay = wx.TextCtrl(pnl)
#        stpSiz.Add(self.tcRefDay, pos=(gRow, 2), span=(1, 1), 
#            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)
#        stpSiz.Add(wx.StaticText(pnl, -1, 'as day 1'),
#                     pos=(gRow, 3), span=(1, 1), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Reference station:'),
                     pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        stSQLStations = 'SELECT ID, StationName FROM Stations;'
        self.cbxRefStationID = wx.ComboBox(pnl, -1, style=wx.CB_READONLY)
        scidb.fillComboboxFromSQL(self.cbxRefStationID, stSQLStations)
        stpSiz.Add(self.cbxRefStationID, pos=(gRow, 2), span=(1, 3), flag=wx.LEFT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'For the reference station:'),
                     pos=(gRow, 1), span=(1, 3), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        stSQLSeries = 'SELECT ID, DataSeriesDescription FROM DataSeries;'

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'IR is in:'),
                     pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.cbxIRRefSeriesID = wx.ComboBox(pnl, -1, style=wx.CB_READONLY)
        scidb.fillComboboxFromSQL(self.cbxIRRefSeriesID, stSQLSeries)
        stpSiz.Add(self.cbxIRRefSeriesID, pos=(gRow, 2), span=(1, 3), flag=wx.LEFT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'VIS is in:'),
                     pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.cbxVISRefSeriesID = wx.ComboBox(pnl, -1, style=wx.CB_READONLY)
        scidb.fillComboboxFromSQL(self.cbxVISRefSeriesID, stSQLSeries)
        stpSiz.Add(self.cbxVISRefSeriesID, pos=(gRow, 2), span=(1, 3), flag=wx.LEFT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'For the other stations (selected to the right):'),
                     pos=(gRow, 1), span=(1, 4), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'IR is in:'),
                     pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.cbxIRDataSeriesID = wx.ComboBox(pnl, -1, style=wx.CB_READONLY)
        scidb.fillComboboxFromSQL(self.cbxIRDataSeriesID, stSQLSeries)
        stpSiz.Add(self.cbxIRDataSeriesID, pos=(gRow, 2), span=(1, 3), flag=wx.LEFT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'VIS is in:'),
                     pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.cbxVisDataSeriesID = wx.ComboBox(pnl, -1, style=wx.CB_READONLY)
        scidb.fillComboboxFromSQL(self.cbxVisDataSeriesID, stSQLSeries)
        stpSiz.Add(self.cbxVisDataSeriesID, pos=(gRow, 2), span=(1, 3), flag=wx.LEFT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)

        gRow += 1
        stAboutFns = 'Functions to process raw bands into IR and VIS signals. Use "i" and "v" for ' \
                        'raw IR- and VIS-containing bands respectively.'
        stWr = wordwrap(stAboutFns, 450, wx.ClientDC(pnl))
        stpSiz.Add(wx.StaticText(pnl, -1, stWr),
                     pos=(gRow, 0), span=(1, 5), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'IR:'),
                     pos=(gRow, 0), span=(1, 1), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.tcIRFunction = wx.TextCtrl(pnl)
        stpSiz.Add(self.tcIRFunction, pos=(gRow, 1), span=(1, 4), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'VIS:'),
                     pos=(gRow, 0), span=(1, 1), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.tcVISFunction = wx.TextCtrl(pnl)
        stpSiz.Add(self.tcVISFunction, pos=(gRow, 1), span=(1, 4), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Cutoff, hours +/- solar noon:'),
                     pos=(gRow, 0), span=(1, 4), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.tcPlusMinusCutoffHours = wx.TextCtrl(pnl)
        stpSiz.Add(self.tcPlusMinusCutoffHours, pos=(gRow, 4), span=(1, 1), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'Only include readings from'),
                     pos=(gRow, 0), span=(1, 2), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.tcThresholdPctLow = wx.TextCtrl(pnl)
        stpSiz.Add(self.tcThresholdPctLow, pos=(gRow, 2), span=(1, 1), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)
        stpSiz.Add(wx.StaticText(pnl, -1, 'to'),
                     pos=(gRow, 3), span=(1, 1), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.tcThresholdPctHigh = wx.TextCtrl(pnl)
        stpSiz.Add(self.tcThresholdPctHigh, pos=(gRow, 4), span=(1, 1), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticText(pnl, -1, 'percent of solar maximum on the clear day:'),
                     pos=(gRow, 0), span=(1, 3), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.tcClearDay = wx.TextCtrl(pnl)
        stpSiz.Add(self.tcClearDay, pos=(gRow, 3), span=(1, 2), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)

        gRow += 1
        self.ckUseOnlyValidNDVI = wx.CheckBox(pnl, label="Use only")
        stpSiz.Add(self.ckUseOnlyValidNDVI, pos=(gRow, 0), span=(1, 1), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.tcNDVIvalidMin = wx.TextCtrl(pnl)
        stpSiz.Add(self.tcNDVIvalidMin, pos=(gRow, 1), span=(1, 1), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)
        stpSiz.Add(wx.StaticText(pnl, -1, '<= NDVI <='),
            pos=(gRow, 2), span=(1, 1), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5)
        self.tcNDVIvalidMax = wx.TextCtrl(pnl)
        stpSiz.Add(self.tcNDVIvalidMax, pos=(gRow, 3), span=(1, 1), 
            flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5)

        gRow += 1
        stpSiz.Add(wx.StaticLine(pnl), pos=(gRow, 0), span=(1, iLinespan), flag=wx.EXPAND)

        gRow += 1
        self.btnSavePnl = wx.Button(pnl, label="Save\npanel", size=(-1, -1))
        self.btnSavePnl.Bind(wx.EVT_BUTTON, lambda evt: self.onClick_BtnSavePnl(evt))
        stpSiz.Add(self.btnSavePnl, pos=(gRow, 0), flag=wx.LEFT|wx.BOTTOM, border=5)

        stpSiz.Add(wx.StaticText(pnl, -1, 'Tasks:'),
                     pos=(gRow, 1), span=(1, 1), flag=wx.ALIGN_RIGHT|wx.TOP|wx.LEFT|wx.BOTTOM, border=5)

        lTasks = ['Make this NDVI dataset','Copy the current panel, which you can then vary']
        self.cbxTasks = wx.ComboBox(pnl, -1, choices=lTasks, style=wx.CB_READONLY)
        self.cbxTasks.Bind(wx.EVT_COMBOBOX, self.onCbxTasks)
        stpSiz.Add(self.cbxTasks, pos=(gRow, 2), span=(1, 3), flag=wx.LEFT, border=5)

        pnl.SetSizer(stpSiz)
        pnl.SetAutoLayout(1)
        pnl.SetupScrolling()