/****************************************************************************
                          kanalog.h  -  description
                             -------------------
    begin                : Tue Aug 21 2001
    copyright            : (C) 2001 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 KANALOG_H
#define KANALOG_H

#include <qframe.h>

//#include <qpainter.h>
//#include <qfont.h>

  struct zvyraz {
    float start,end;
    int barva;
    };

class QPainter;
class QFont;
    

/**
 * Tato trida zajistuje zobrazeni analogovych mericich panelu.
 *
 * @author Daniel Prynych
 * @short Analogove merici panely
 * @version 0.5
*/
class KAnalog : public QFrame  {
  Q_OBJECT
  public:

/**
 * Konstruktor - vytvori objekt pro analogovy merici panel o rozmerech 130 x 130 bodu
 *
 * Pokud je potreba vykreslit nebo prekreslit panel je nutno zavolat funkci repaint,
 * ostatni funkce ji zavolaji sami pokud je run = TRUE.
 *
 * @param Astart Je pocatecni hodnota stupnice.
 * @param Aend Je koncova hodnota stupnice.
 * @param type Udava typ meraku 1 - kruh , 2 - prava vysec, 3 - horni vysec.
 * @param numberItem Udava pocet rozdeleni stupnice.
 * @param numberInItem Udava pocet rozdeleni velkeho dilku stupnice na mensi casti.
 * @param Afinger Urcuje barvu rucicky a jeji hodnoty.
 * @param Ascale Urcuje barvu stupnice.
 * @param Afont Urcuje barvu textu.
 * @param analogFonts Urcuje font pro text a stupnici.
 * @since  0.3
 **/
  KAnalog(QWidget *parent = 0, const char *name = 0, int Astart = 0, int Aend = 100, int type = 1, int numberItem = 5, int numberInItem = 0, QColor Afinger = Qt::black, QColor Ascale = Qt::black, QColor AFont = Qt::black, QFont *analogFonts = 0L);

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

/**
 * Nastavi text dolni a horni text na panelu.
 *
 * @param text_down Udava "dolni" text, obvykle co je mereno.
 * @param text_up Udava "horni" text, obvykle merna jednotka.
 * @param run = TRUE provede okamzite prekresleni panelu.
 *
 * @since  0.1
 **/
  void setText (QString text_down, QString text_up, bool run=false);



/**
 * Inicializuje devet zakladnich barev pro mezikruzi.
 *
 * @param run = TRUE provede okamzite prekresleni panelu.
 *
 * @since  0.1
 **/
  void setDefaultArcColor(bool run=false);


/**
 * Nastavi zakladni barvu pro mezikruzi.
 *
 * @param reg Poradove cislo barvy (barevneho registru).
 * @param color Barva na kterou bude nastaven registr barvy.
 *
 * @since  0.1
 **/
  void setArcColor(int reg, QColor color );


        
/**
 * Vybarvi cast stupnice zadanou barvou.
 * Barevne casti se barvy postupne, v poradi jak jsou zadany, mohou se prekryvat.
 * Je mozno nabarvit jen 5 casti !!
 *
 * @param a Urcuje pocatecni uhel.
 * @param b Urcuje koncovy uhel.
 * @param color Urcuje barvu.
 * @param run = TRUE provede okamzite prekresleni panelu.
 *
 * @since  0.2
 **/
  void addArc (float a, float b, int regColor, bool run=false);



/**
 * Zrusi vybarveni stupnice.
 *
 * @param run = TRUE provede okamzite prekresleni panelu.
 *
 * @since  0.1
 **/
  void delArc (bool run=false);



/**
 * Nastavi rozsah stupnice.
 *
 * @param Astart Urcuje pocatecni hodnotu stupnice.
 * @param AEND Urcuje koncovou hodnotu stupnice.
 * @param run Pokud je nastaveno na TRUE, provede okamzite prekresleni panelu.
 *
 * @since  0.2
 */
  void setRange (int Astart = 0, int Aend = 100, bool run=false);

/**
 * Nastavi pocet dilku stupnice.
 *
 * @param Count Urcuje pocet casti stupnice.
 * @param run Pokud je nastaveno na TRUE, provede okamzite prekresleni panelu.
 *
 * @since  0.1
 */
  void setMember (int Count, bool run=false);

/**
 * Nastavi barvu analogove rucicky.
 *
 * @param fingerColor Urcuje barvu rucicky.
 * @param run Pokud je nastaveno na TRUE, provede okamzite prekresleni panelu.
 *
 * @since  0.2
 */
  void setFingerColor (QColor fingerColor, bool run=false);

/**
 * Nastavi barvu textu.
 *
 * @param fontColor Urcuje barvu rucicky.
 * @param run Pokud je nastaveno na TRUE, provede okamzite prekresleni panelu.
 *
 * @since  0.1
 */
  void setFontColor (QColor fontColor,  bool run=false );


  
/**
 * Nastavi rozsah stupnice.
 *
 * @param finger Urcuje barvu stupnice.
 * @param run Pokud je nastaveno na TRUE, provede okamzite prekresleni panelu.
 *
 * @since  0.1
 */
  void setScaleColor (QColor scale, bool run=false);

/**
 * Posune rucicku na hodnotu finger.
 *
 * @param finger Urcuje hodnotu na jakou bude nastavena rucicka.
 * @param run Pokud je nastaveno na TRUE, provede okamzite prekresleni panelu.
 *
 * @since  0.1
 */
  void setFinger (float finger,  bool run=true );


/**
 * Konstanta, udava velikost analogoveho panelu v bodech.
 *
 * @since  0.1
 */
  static const int AnalogWidth = 130;


  public slots:

/**
 * Nastavi font stupnice, zmena je provedena okamzite.
 *
 * @param newScaleFont Urcuje novy font hodnot stupnice.
 *
 * @since  0.1
 */
  void slotSetScaleFont(QFont newScaleFont);


/**
 * Nastavi font textu, zmena je provedena okamzite.
 *
 * @param newTextFont Urcuje novy font pro texty.
 *
 * @since  0.1
 */
  void slotSetTextFont(QFont newTextFont);


/**
 * Nastavi font stupnice a textu, zmena je provedena okamzite.
 *
 * @param newTextFont Urcuje novy font pro texty a hodnoty stupnice.
 *
 * @since  0.1
 */
  void slotSetAllFont(QFont newAllFont);


/**
 * Da povel k prekreseni urovne pozadi a  urovne rucicky.
 * To znamena, ze bude prekreslen kompletne cely panel.
 *
 * @since  0.1
 */
  void repaintAll (void);
    
    
  protected:
  virtual void resizeEvent( QResizeEvent * );
  virtual void paintEvent( QPaintEvent * );

  private:
/**
 * @internal
 */
  void KresliCMK ( QPainter *paint );

/**
 * @internal
 */
  void KresliSt ( QPainter *paint );

/**
 * @internal
 */
  void KresliText ( QPainter *paint );

/**
 * @internal
 */
  void KresliRucicku (  QPainter *paint, float pozice);

/**
 * @internal
 */
  void KresliStupnici ( QPainter *paint );
  
  static const int PixPozadiWidth = 122;
  static const int PixPozadiStart = 4;

  bool zobrazPozadi;
  bool zobrazRucicku;

  int dolni_mez, horni_mez;
  int typ_zobrazeni;   // udava typ meraku
  int pocet_casti; // pocet policek na stupnici
  int pocet_dilku; // pocet dilku v policku na stupnici
  QColor rucicka, stupnice, barvaTextu; // barvy rucicky pozadi stupnice

  QColor barvy_arc[9];
  QString AnNadpis, AnMJ;
  int pocet_zvyrazneni; // pocet barevnych poli na stupnici
  float pozice_rucicky;
  float  uhel_zobrazeni, pocatecni_uhel;
  int stred_x, stred_y, smer, sirkaMK, vzdalenost_st;

  QFont st_font;
  QFont text_font;

  QPixmap *vrstvaPozadi;
  QPixmap *vrstvaStupnice;
  QPixmap *vrstvaRucicky;
  QPixmap *kompletVrstva;
  zvyraz zvyrazneni[5];
};


#endif


syntax highlighted by Code2HTML, v. 0.9.1