def activeContactDataAvailable(self, tableData):
        log.log("activeContactDataAvailable")
        self.activeContactsWidget.clear()

        try:
            hLabels = ["STRIKE", "TYPE", "%Chng", "OI", "LTP"]
            rowCnt = len(tableData)
            colCnt = len(hLabels)
            self.activeContactsWidget.setRowCount(rowCnt)
            self.activeContactsWidget.setColumnCount(colCnt)
            self.activeContactsWidget.verticalHeader().setVisible(False)
            self.activeContactsWidget.horizontalHeader().setVisible(True)
            self.activeContactsWidget.horizontalHeader().setStyleSheet("font-weight:bold;border:1px")
            self.activeContactsWidget.setHorizontalHeaderLabels(hLabels)
            self.activeContactsWidget.setSortingEnabled(False)

            for r in range(rowCnt):
                for c in range(colCnt): 
                    self.activeContactsWidget.setItem(r,c, QtGui.QTableWidgetItem(str(tableData[r][c])))   
            
            self.activeContactsWidget.resizeColumnsToContents()
            self.activeContactsWidget.setSortingEnabled(True)
            self.activeContactsWidget.sortItems(1, QtCore.Qt.AscendingOrder)
        except:
            log.log("Exception in activeContactDataAvailable")
    def HeavyWeightsDataAvailable(self, niftyHeavyWightsData):        
        if [] == self.graphs:
            return

        try:
            heavyWeightsTimePrice = {}
            heavyWeightsTimeVol = {}

            for record in niftyHeavyWightsData:
                time = record[0]
                ltp  = record[2]
                vol  = record[3]

                if time in heavyWeightsTimePrice:
                    heavyWeightsTimePrice[time] = heavyWeightsTimePrice[time] + ltp 
                    heavyWeightsTimeVol[time] = heavyWeightsTimeVol[time] + vol
                else:
                    heavyWeightsTimePrice[time] = ltp  
                    heavyWeightsTimeVol[time] = vol    

            #Heavy weights chart
            price   = [] 
            time_x  = []

            for pr in heavyWeightsTimePrice.values():
                price.append(pr)
            for tm in heavyWeightsTimePrice.keys():
                time_x.append(tm)

            for plot in self.graphs:
                if plot.objectName() == "NiftyHeavy":
                    plot.setData(x = [self.TimeStamp(time) for time in time_x], y = price, pen='y')

            #Heavy weights volume chart
            if len(time_x) < 2:
                return

            volume  = [] 
            time_x.pop(0)

            volPrv = None
            for vl in heavyWeightsTimeVol.values():
                if None != volPrv:
                    volume.append(vl-volPrv)
                volPrv = vl
            
            '''
            volume = np.random.random(len(time_x))

            print(time_x)
            print(volume)
            #print(heavyWeightsTimeVol.values())
            '''

            for plot in self.graphs:
                if plot.objectName() == "Volume":                
                    plot.setOpts(x = [self.TimeStamp(time) for time in time_x], height=volume, width=0.3, brush='r')
        except:
            log.log("Exception in HeavyWeightsDataAvailable")
    def OtmstoShowChanged(self):
        self.otms2Read = int(self.otmsToShowSpn.currentText())
        self.CalAtmOtmRangeToRead()
        self.DeleteExistingGraphs()
        self.AddEmptyGraphs2View()
        log.log("OtmstoShowChanged : " + str(self.otms2Read))

        if None != self.read_thread:
            self.otms2ShowSgnl.emit(self.otmsToShow)
 def heaveyWeightsChanged(self):
     self.heavyWeightsList.clear()
     heavyWightsWdg = self.grpBox.children()
     for chld in heavyWightsWdg:
         if str(type(QtGui.QCheckBox())) == str(type(chld)):
             if chld.isChecked():
                 self.heavyWeightsList.append(chld.text())
     
     self.heaveyWeightsChdSgnl.emit(self.heavyWeightsList)
     log.log("Heavy weights changed : " + str(self.heavyWeightsList))
    def InitDataAvailble(self, expiryList):
        log.log("InitDataAvailble, expiry list = " + str(expiryList))
        self.expiry = expiryList[0]
        self.expirySelction.addItems(expiryList) 
        
        #Start pulling data only when we get expiry 
        self.write_thread = dt.DataWriteThread()  
        self.writeDataStateSgnl.connect(self.write_thread.SetWriteDataState)
        self.write_thread.start()

        self.read_thread.SetExpiry(self.expiry)
        self.read_thread.start()
        self.expirySelction.currentIndexChanged.connect(self.ExpirySelectionChanged)
        self.AddEmptyGraphs2View()
    def NiftyPriceAvailable(self, niftyData):
        try:
            price   = niftyData['Price']
            time_x  = niftyData['Time']

            if [] == price or [] == time_x:
                return

            for plot in self.graphs:
                if plot.objectName() == "Nifty":
                    pen = pg.mkPen(color=(0, 255, 0), width=1, style=QtCore.Qt.DotLine)
                    plot.setData(x = [self.TimeStamp(time) for time in time_x], y = price, pen=pen)
        except:
            log.log("Exception in NiftyPriceAvailable")
    def PEOIDataAvailable(self, peData):
        try:
            strike  = peData['Strike']
            time_x  = peData['Time']
            pe_oi_y = peData['OI']

            if [] == strike or [] == time_x or [] == pe_oi_y:
                return

            for plot in self.graphs:
                if plot.objectName() == str(strike)+"PE":
                    plot.setData(x = [self.TimeStamp(time) for time in time_x], y = pe_oi_y, pen='b')
        except:
            log.log("Exception in PEOIDataAvailable")
    def CEOIDataAvailable(self, ceData):
        try:
            strike   = ceData['Strike']
            time_x   = ceData['Time']
            ce_oi_y  = ceData['OI']
            niftyPrc = ceData['Nifty']

            if [] == strike or [] == time_x or [] == ce_oi_y or [] == niftyPrc:
                return

            for plot in self.graphs:
                if plot.objectName() == str(strike):
                    plot.setData(x = [self.TimeStamp(time) for time in time_x], y = ce_oi_y, pen='r')
                elif plot.objectName() == str(strike)+"Nifty":
                    if True == self.ShowNiftyOnOI:
                        pen = pg.mkPen(color=(0, 255, 0), width=1, style=QtCore.Qt.DotLine)
                        plot.setData(x = [self.TimeStamp(time) for time in time_x], y = niftyPrc, pen=pen)
                    else: 
                        plot.setData(x = [], y = [])
                     
            ######## check plot.hide()
        except:
            log.log("Exception in CEOIDataAvailable")
    def NiftyDataAvailable(self, niftyPrice):
        self.currentPrice = int(niftyPrice)
        self.CalAtmOtmRangeToRead()

        if self.init_data_thread is None:
            log.log("NiftyDataAvailable, initializing all threads")
            self.read_thread = dt.DataReadThread(self.expiry, self.heavyWeightsList)
            self.read_thread.ceSignal.connect(self.CEOIDataAvailable)
            self.read_thread.peSignal.connect(self.PEOIDataAvailable)
            self.read_thread.niftySignal.connect(self.NiftyPriceAvailable)
            self.read_thread.niftyHeavyWeightsSgnl.connect(self.HeavyWeightsDataAvailable)

            self.read_thread.UpdateOtmsToShow(self.otmsToShow)
            
            self.expiryChngSgnl.connect(self.read_thread.SetExpiry)
            self.timePeriodChngSgnl.connect(self.read_thread.SetTimePeriod)
            self.otms2ShowSgnl.connect(self.read_thread.SetOtmsToShow)
            self.updateOtms2ShowSgnl.connect(self.read_thread.UpdateOtmsToShow)
            self.readDataSgnl.connect(self.read_thread.ReadData)
            self.heaveyWeightsChdSgnl.connect(self.read_thread.UpdateHeavyWeightsList)

            self.init_data_thread = dt.InitDataThread()  
            self.init_data_thread.signal.connect(self.InitDataAvailble)
            self.init_data_thread.start()
 def ShowNiftyChartOnOIChart(self):
     self.ShowNiftyOnOI = self.niftyChrtChkBx.isChecked()
     log.log("ShowNiftyChartOnOIChart : " + str(self.ShowNiftyOnOI))
     if None != self.read_thread:
         self.readDataSgnl.emit()
 def ReadDuringMarketHrs(self):        
     state = self.marketHrs.isChecked()
     log.log("readDuringMarketHrs : " + str(state))
     if None != self.write_thread and None != self.init_nifty_thread:
         self.writeDataStateSgnl.emit(state)
 def TimePeriodChanged(self):
     period = self.timePeriod.currentText()
     log.log("TimePeriodChanged : " + period)
     if None != self.read_thread:
         self.timePeriodChngSgnl.emit(int(period))
 def ExpirySelectionChanged(self):
     self.expiry = self.expirySelction.currentText()
     log.log("ExpirySelectionChanged : " + self.expiry)
     if None != self.read_thread:
         self.expiryChngSgnl.emit(self.expiry)