class BtcChartPlasmoid(plasmascript.Applet):
    def __init__(self, parent, args=None):
        plasmascript.Applet.__init__(self, parent)
        
        self._market = None
        self._thread = None
        self._interval = 1
     
    def init(self):
        self.setHasConfigurationInterface(True)
        self.readConfig()
        self.setAspectRatioMode(Plasma.IgnoreAspectRatio)

        cfg = self.config()
        width, ok = cfg.readEntry('width', 256).toInt()
        height, ok = cfg.readEntry('height', 256).toInt()
        self.resize(width, height)
        
        self.applet.geometryChanged.connect(self.saveGeometry)
     
        self._theme = Plasma.Svg(self)
        self._theme.setImagePath('widgets/background')
        self.setBackgroundHints(Plasma.Applet.DefaultBackground)
     
        self._layout = QGraphicsGridLayout(self.applet)
        self.applet.setLayout(self._layout)

        self._chart = Chart(self.applet)
        self._chart.setZValue(1)
        self._layout.addItem(self._chart, 0, 0)
        
        self._data = Data(self)
        
        self.update()
        
    def update(self):
        self._timer = self.startTimer(self._interval*1000*60)
        self._chart.clearTrades()
        try:
            trades = self._data.init(self._market)
        except:
            pass
        self._chart.addTrades(trades)

    def timerEvent(self, event):
        try:
            self._chart.addTrades(self._data.getData())
        except:
            pass

    def createConfigurationInterface(self,  parent):
        parent.setButtons(KDialog.ButtonCode(KDialog.Ok | KDialog.Cancel | KDialog.Apply))

        self._generalConfig = QWidget()
        self._generalConfigUi = uic.loadUi(self.package().filePath('ui', 'general_config.ui'), self._generalConfig)
        parent.addPage(self._generalConfigUi,  'General',  self.icon(),  QString(),  False)

        self._generalConfigUi.intervalEdit.setValue(self._interval)
        if self._data:
            for market in self._data.markets():
                self._generalConfigUi.marketCombo.addItem(market)
                if market == self._market:
                    self._generalConfigUi.marketCombo.setCurrentIndex(self._generalConfigUi.marketCombo.count() - 1)
                    
        self.connect(parent, SIGNAL('applyClicked()'), self.configUpdated)
        self.connect(parent, SIGNAL('okClicked()'), self.configUpdated)

    def configUpdated(self):
        self._market = self._generalConfigUi.marketCombo.currentText()
        self._interval = self._generalConfigUi.intervalEdit.value()
        self.update()
        self._data.init(self._market)
        self.writeConfig()
        
    def readConfig(self):
        cfg = self.config()
        self._market = cfg.readEntry('market',  '').toString()
        self._interval, ok = cfg.readEntry('interval',  1).toInt()

    def writeConfig(self):
        cfg = self.config()
        cfg.writeEntry('market', self._market)
        cfg.writeEntry('interval', self._interval)
        self.emit(SIGNAL('configNeedsSaving()'))

    def saveGeometry(self):
        cfg = self.config()
        cfg.writeEntry('width', self.applet.geometry().width())
        cfg.writeEntry('height', self.applet.geometry().height())