You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
knutclient/src/knutanalog.h

454 lines
12 KiB

/***************************************************************************
* Copyright (C) 2007 by Daniel Prynych *
* Daniel.Prynych@buzuluk.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. *
* *
* 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. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#ifndef KNUTANALOG_H
#define KNUTANALOG_H
#include <tqframe.h>
#include <tqpixmap.h> // po odladeni smazat
#include <tqimage.h>
#include <tqmutex.h>
class TQPainter;
class TQFont;
enum speedOfAAlias { none,fast,slow};
/**
* This class shows analog measuring panels
*
* @author Daniel Prynych
* @short analog measuring panels
* @version 0.1
*/
class KNutAnalog : public TQFrame {
Q_OBJECT
public:
struct extentOfDyeDef {
double start,end;
int color;
};
/**
* Construct - makes object for analog measuring panel about size 130 x 130 points
* Konstruktor - vytvori objekt pro analogovy merici panel o rozmerech 130 x 130 bodu
*
* When you need paint or repainr panel you have to call functiin reapaint
* other functions calls this function theirself, when run = true
* Pokud je potreba vykreslit nebo prekreslit panel je nutno zavolat funkci repaint,
* ostatni funkce ji zavolaji sami pokud je run = TRUE.
*
* @param bottomLimit Is bottom value of scale..
* @param topLimit is end value of scale.
* @param typeOfView determine type view of scale 1- circle 2- right part of circle, 3 - top part of circle
* @param countOfParts determine count of big parts (parents parts) of scale.
* @param countOfSubParts determine count small parts (children parts) id scale, evere big part include e few small part.
* @param pointerColor determine color of pointer.
* @param scaleColor determine color of scale.
* @param textColor determine color of text.
* @param analogFonts determine fonts for text and scale.
* @param qualityOfPainter determine quality painting of pointer- 0 nothing. 1 fast antialiasing, 2 slow antialiasing, 3 blur motion + fast antialiasing, 4 blur motion + slow antialiasing
* @since 0.3
**/
KNutAnalog(TQWidget *parent = 0, const char *name = 0, int Astart = 0, int topLimit = 100, int typeOfView = 1, int countOfParts = 5, int countOfSubParts = 0, TQColor pointerColor = TQt::black, TQColor m_scaleColor = TQt::black, TQColor textColor = TQt::black, TQFont *analogFonts = 0, int qualityOfPointer = 4, bool makeBG = false );
/**
* Destruktor
* @since 0.1
**/
~KNutAnalog();
/**
* Sets text for top and bottom text of panel.
* Nastavi text dolni a horni text na panelu.
*
* @param m_inscription determinuje inscription , bottom text , usually.
* @param m_inscription Udava nadpis, "dolni" text, obvykle co je mereno.
* @param text_up Udava mernou jednotku "horni" text, obvykle merna jednotka.
* @param run = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
*
* @since 0.1
**/
void setText (TQString m_inscription, TQString text_up, bool run=false);
/**
* Makes background of analog panel.
* Vytvori pozadi analogoveho panelu.
*
* @param run = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
*
* @since 0.2
**/
void makeBackground (bool run=false);
/**
* Repaint pointer of analog panel.
* Prekresli rucicku analogoveho panelu.
*
* @param run = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
*
* @since 0.2
**/
void repaintPointer ( bool run );
/**
* Nastavuje devet zakladnich barev pro mezikruzi.
* Sets nine basic color for circle in scale
*
* @param run = TRUE provede okamzite prekresleni panelu.
* @param run = TRUE makes immediately repaint of panel
*
* @since 0.1
**/
void setDefaultArcColor(bool run=false);
/**
* Nastavi zakladni barvu pro mezikruzi.
* Sets basic color for circle in scale
*
* @param reg Poradove cislo barvy (barevneho registru).
* @param color Barva na kterou bude nastaven registr barvy.
*
* @since 0.1
**/
void setArcColor(int reg, TQColor color );
/**
* Vybarvi cast stupnice zadanou barvou.
* Nastavi rozsah mezikruzi, podle stupnice od pocatecni hodnoty do koncove hodnoty stupnice
* Barevne casti se barvy postupne, podel poradoveho cisla, mohou se prekryvat.
* Je mozno nastavit jen 5 casti !!
*
* @param startOfCircle Urcuje zazatek mezikruzi.
* @param endOfCircle Urcuje konec mezikruzi.
* @param color Urcuje barvu.
* @param run = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
*
* @since 0.2
**/
void addArc (double startOfCircle, double endOfCircle, int regColor, bool run=false);
/**
* Clear colors of scale
* Zrusi vybarveni stupnice.
*
* @param run = TRUE makes immediately repaint of panel
* @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 = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
*
* @since 0.2
*/
void setRange (int Astart = 0, int Aend = 100, bool run=false);
/**
* Sets number of parts od scale
* Nastavi pocet dilku stupnice.
*
* @param Count Determine number of parts of pointer..
* @param Count Urcuje pocet casti stupnice.
* @param run = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
*
* @since 0.1
*/
void setMember (int Count, bool run=false);
/**
* Sets color of analog pointer.
* Nastavi barvu analogove rucicky.
*
* @param pointerColor determine color of pointer.
* @param pointerColor Urcuje barvu rucicky.
* @param run = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
* @since 0.2
*/
void setPointerColor (TQColor pointerColor, bool run=false);
/**
* sets color of text;
* Nastavi barvu textu.
*
* @param fontColor determine color of font.
* @param fontColor urcuje barvu fontu.
* @param run = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
*
* @since 0.1
*/
void setFontColor (TQColor fontColor, bool run=false );
/**
* Sets color of scale
* Nastavi barvu stupnice.
*
* @param scaleColor determine color if scale.
* @param scaleColor urcuje barvu stupnice.
* @param run = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
*
* @since 0.1
*/
void setScaleColor (TQColor scaleColor, bool run=false);
/**
* Sets type of digital processing of pointer. 0 nothing. 1 fast antialiasing, 2 slow antialiasing, 3 blur motion + fast antialiasing, 4 blur motion + slow antialiasing.
*
* @param qualityOfPointer determine quality of pointer's digital procesing
* @param run = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
*
* @since 0.1
*/
void setDigitalProcesing (int qualityOfPointer, bool run =false );
/**
* Sets pointer on value pointerValue.
* Posune rucicku na hodnotu pointerValue.
*
* @param pointerValue Urcuje hodnotu na jakou bude nastavena rucicka.
* @param run = TRUE makes immediately repaint of panel
* @param run = TRUE provede okamzite prekresleni panelu.
*
* @since 0.1
*/
void setPointer (double pointerValue, bool run=true );
/**
* Const. determines width of analog panel in points
* Konstanta, udava velikost analogoveho panelu v bodech.
*
* @since 0.1
*/
static const int AnalogWidth = 130;
public slots:
/**
* Sets font of scale, change is doing immediately
* Nastavi font stupnice, zmena je provedena okamzite.
*
* @param newScaleFont Urcuje novy font hodnot stupnice.
* @param newScaleFont Urcuje novy font hodnot stupnice.
*
* @since 0.1
*/
void slotSetScaleFont(TQFont newScaleFont);
/**
* Sets font of text. change is doing immediately.
* Nastavi font textu, zmena je provedena okamzite.
*
* @param newTextFont Urcuje novy font pro texty.
*
* @since 0.1
*/
void slotSetTextFont(TQFont 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(TQFont newAllFont);
/**
* Repaint layer of backgroud and layer of pointer,
* all panel will be repainted
* 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( TQResizeEvent * );
virtual void paintEvent( TQPaintEvent * );
private:
/**
* @internal
*/
void paintBackGround ( void );
/**
* @internal
*/
void paintPointer ( void );
/**
* @internal
*/
void paintPointerSlowly ( double position, int centerX , int centerY, int widthOfCircle);
/**
* @internal
*/
void paintPointerFastly ( double position);
/**
* @internal
*/
void paintPartOfCircle ( TQPainter *paint, int centerX , int centerY, int widthOfCircle );
/**
* @internal
*/
void paintScale ( TQPainter *paint , int centerX , int centerY, int widthOfCircle);
/**
* @internal
*/
void makeAntialiasing (TQImage* myImage, TQPixmap* smallPixmap, const TQRgb colorOfBG, speedOfAAlias speed = slow , int typeOfView = 0);
/**
* @internal
*/
void makeMotionBlur (TQImage* myImage, const TQRgb colorOfBG, int typeOfView = 0);
/**
* @internal
*/
void paintScaleNumbers ( TQPainter *paint );
/**
* @internal
*/
void paintText ( TQPainter *paint );
/**
* @internal
*/
void paintValueOfPointer ( TQPainter *p, double value);
static const int m_widthOfBackGround = 122;
static const int m_startOfBackGround = 4;
bool m_showBackGround;
bool m_showPointer;
int m_bottomLimit;
int m_topLimit;
int m_typeOfView; // udava typ meraku
int m_countOfParts; // pocet policek na stupnici
int m_countOfSubParts; // pocet dilku v policku na stupnici
TQColor m_pointerColor, m_scaleColor, m_textColor; // colors of pointer, text and scale
TQColor m_arcColors[9];
TQString m_inscription;
TQString AnMJ;
int m_countOfColorParts; // count of color parts on scale
double m_valueOfPointer; // position of pointer;
double m_angleOfViewer, m_startAngle; //pocatecni_uhel;
int m_centerX;
int m_centerY;
int m_direction;
int m_widthOfScale;
int m_radiusOfScaleNumbers;
speedOfAAlias m_speedOfAAlias;
bool m_makeBlurMotion;
TQFont m_scaleFont;
TQFont m_textFont;
TQPixmap *m_wholeLayer;
TQPixmap *m_backgroudLayerBig;
TQPixmap *m_scaleLayerBig;
TQPixmap *m_scaleLayerSmall;
TQPixmap *m_pointerLayerBig;
TQPixmap *m_pointerLayerSmall;
extentOfDyeDef m_extentOfDye[5];
TQMutex m_pointerMutex;
};
#endif