/***************************************************************************
                          knutpanelmeter.h  -  description
                             -------------------
    begin                : Út b?e 16 2004
    copyright            : (C) 2004 by Daniel Prynych
    email                : Daniel.Prynych@alo.cz
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef KNUTPANELMETER_H
#define KNUTPANELMETER_H

#include "knutanalog.h"
#include "knutvardata.h"


//#include <tqwidget.h>
#include <tqscrollview.h>


class TQLabel;
class TQFont;

/**
  *@author Daniel Prynych
  */
class KNutPanelMeter : public TQScrollView  {
   TQ_OBJECT
  
public:

/**
 * Konstruktor
 *
 * Param taPanelPalette je paleta pozadi subpanelu MERAKU !!!
 * @param activeUpsInfo ukazatel na data o aktivni UPS
 * @param settingData ukazatel na zakladni data programu (barvy pozadi, mezikruzi, rucicky ... ,fonty atd )
 * @param analogRecords ukazatel na tridu ktera pracuje s daty o upsekach
 *
 * @since  0.2
 **/
  KNutPanelMeter(TQPalette aPanelPalette, KNutVarData::upsInfoDef* activeUpsInfo, KNutVarData::SettingDataDef* settingData, KNutVarData* analogRecords, TQWidget *parent=0, const char *name=0);

/**
 * Destruktor
 *
 * @since  0.1
 **/
  ~KNutPanelMeter();

/**
 * Zrusi analogove panely vcetne uvoneni pameti.
 *
 * @since  0.1
 **/
  void deActivateAnalogs (void);


/**
 * Vytvori a inicializuje analogove panely.
 *
 * @since  0.1
 **/
  void activateAnalogs (void);

/**
 * Rozmisti analogove panely po hlavnim panelu a spocte jeho rozmery.
 *
 * @param showPanels je true jsou rozsviceny (show) subpanely
 * @since  0.2
 **/
  void setSize (bool showPanels = false);


/**
 * Prekresli zmenu rozsahu pro dany analogovy panel (jenom jeden)
 * Pokud panel nepodporuje zmeny rozsahu neprovede nic.
 * Zmenu rozsahu podporuji nasledujici panely: Current,BattVolt,BattCurrent
 *
 * @param panelNumber je cislo analogoveho panelu.
 * @param value je hodnota na kterou je panel nastaven.
 *
 * @since  0.1
 **/
  void repaintScaleAnalogPanel (int panelNumber, float value);

/**
 * Paints pointer for selected analog panel
 * Prekresli rucicku pro vybrany analogovy panel.
 *
 * @param panelNumber is number of analog panel.
 * @param value is value of settimg amalog panel.
 * @param run = true makes immediately repaint of panel 
 * @param panelNumber je cislo analogoveho panelu.
 * @param value je hodnota na kterou je panel nastaven.
 * @param run = true provede okamzite prekresleni 
 *
 * @since  0.2
 **/
  void repaintAnalogPointer (int panelNumber, float value, bool run = true);


/**
 * Repaints analog panels
 * Repainting range of panel for frequency and voltage, based on current setting.
 * Prekresli a prebarvi analogove panely.
 * Prekresuje rozsah panelu pro frekvenci a nepeti na zaklade soucasneho nastaveni.
 *
 * @param repaintFrequencyPanels urcuje ze ma prekreslit panely ktere zobrazuji vstupni frequency.
 * @param repaintVoltagePanels urcuje ze ma prekreslit panely ktere zobrazuji vstupni a vystupni napeti.
 * @param repaintAllPanels urcuje ze ma prebarvit vsechny prvky panelu.
 *
 * @since  0.1
 **/
  void repaintAnalogPanels (bool repaintFrequencyPanels, bool repaintVoltagePanels, bool repaintAllPanels);






/**
 * Changes type of digital processing of pointer and repaints it.
 * Zmeni zpusob digitalniho zpracovani rucucky a  prekresli ji
 *
 * @since  0.1
 **/
  void changeAnalogPanelsDigProcessing (void);


/**
 * Sets value of panels to zero
 * Nastavi hodnotu vsech panelu na nulu
 *
 * @since  0.1
 **/
   void zeroingPanels (void);

/**
 * Repaints backgroud of analog panels
 * Prebarvi pozadi analogovych panelu.
 *
 * @param taPanelPalette je hodnota nove palety pro pozadi
 *
 * @since  0.1
 **/
  void setAnalogBG(TQPalette aPanelPalette);



/**
 * Vraci soucasnou velikost panelu.
 *
 * @since  0.1
 **/
  virtual TQSize sizeHint (void);

public slots:

  /**
   * Sets new font for all panels
   * Nastavy novy font ve vsech panelech.
   *
   * @since  0.1
   **/
  void slotSetPanelsFont(TQFont newFont);


private:
/************ private const *****************/

  static const int SpacePanels = 2; //vzdalenost mezi meraky, length between panels

  static const int MaxBattVolt = 350;   //   max battery.voltage
  static const int MaxCurrent = 50;    //     max output.current
  static const int MaxBattCurrent = 50;   //  max battery.current
/************ private struct ************************/

  struct analogPanelRecordsDef {
    int scaleEnd[knc::NumberOfVars];
    int scaleStart[knc::NumberOfVars];
    KNutAnalog* upsAnalogs[knc::NumberOfVars];
    };


/*********** private vars *******************/

  TQLabel* m_analogArea;

  analogPanelRecordsDef* m_analogPanels;

  KNutVarData::upsInfoDef* m_activeUpsInfo; // values for selected ups -- hodnoty pro vybrane ups
  KNutVarData::SettingDataDef* m_settingData;  // v teto strukture jsou ulozeny promene ktere nastavuji konfiguraci

  KNutVarData* m_analogRecords;

  TQPalette m_aPanelPalette;

  int m_widthArea;
  int m_heightArea;
};

#endif
