#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Carla Native Plugins
# Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# For a full copy of the GNU General Public License see the doc/GPL.txt file.

# -----------------------------------------------------------------------
# Imports (ExternalUI)

from carla_style import CarlaApplication
from externalui import ExternalUI
from digitalpeakmeter import DigitalPeakMeter

# -----------------------------------------------------------------------
# External UI

class DistrhoUIBigMeter(DigitalPeakMeter, ExternalUI):
    def __init__(self):
        DigitalPeakMeter.__init__(self, None)
        ExternalUI.__init__(self)

        channels = 2 #6 if argv[0].endswith("bigmeterM-ui") else 2

        self.setChannels(channels)
        self.setColor(self.GREEN)
        self.setOrientation(self.VERTICAL)

        #self.setSmoothRelease(0) # till 5

        self.resize(30, 400)
        self.setWindowTitle(self.fUiName)

        self.fIdleTimer = self.startTimer(30)

        self.showUiIfTesting()

    # -------------------------------------------------------------------
    # DSP Callbacks

    def d_parameterChanged(self, index, value):
        if index == 0:
            color = int(value)

            if color not in (self.GREEN, self.BLUE):
                return

            self.setColor(color)

        else:
            self.displayMeter(index, value)

    # -------------------------------------------------------------------
    # ExternalUI Callbacks

    def d_uiShow(self):
        self.show()

    def d_uiHide(self):
        self.hide()

    def d_uiQuit(self):
        self.close()
        app.quit()

    def d_uiTitleChanged(self, uiTitle):
        self.setWindowTitle(uiTitle)

    # -------------------------------------------------------------------
    # Qt events

    def timerEvent(self, event):
        if event.timerId() == self.fIdleTimer and not self.idleExternalUI():
            self.d_uiQuit()
        DigitalPeakMeter.timerEvent(self, event)

    def closeEvent(self, event):
        self.closeExternalUI()
        DigitalPeakMeter.closeEvent(self, event)

#--------------- main ------------------
if __name__ == '__main__':
    app = CarlaApplication("BigMeter")
    #app...
    gui = DistrhoUIBigMeter()
    app.exit_exec()
