X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=libffqw-n810-1.0%2Fsources%2Fffscrollinglabel.h;fp=libffqw-n810-1.0%2Fsources%2Fffscrollinglabel.h;h=8386701203d08e3c99c66345b49a37d3eb78ff1a;hb=1273d1fbb03faf468b080ca8f2f78717e6949815;hp=0000000000000000000000000000000000000000;hpb=0cf856837e9dc2e271c8e16390758bf02107f678;p=ffqwlibrary diff --git a/libffqw-n810-1.0/sources/ffscrollinglabel.h b/libffqw-n810-1.0/sources/ffscrollinglabel.h new file mode 100644 index 0000000..8386701 --- /dev/null +++ b/libffqw-n810-1.0/sources/ffscrollinglabel.h @@ -0,0 +1,223 @@ +/* + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + +http://www.gnu.org/licenses/gpl-3.0.txt +*/ +/** + * @file ffscrollinglabel.h + * @brief Contains a necessary class declaration. + * + * @author ComArch S.A. + * @date 2009.08.07 + * @version 1.1 + * + * @brief A label with scrolling text. + */ + +#ifndef FFSCROLLINGLABEL_H +#define FFSCROLLINGLABEL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef MAEMO +#include +#endif + +#include "ffabstractwidget.h" +#include "ffviewcache.h" + +const int TIMER_DELAY = 200; ///< delay for timer responsible for scrolling +const QString DEFAULT_TEXT = "Default text"; ///< text printed on a label as default +const int DEFAULT_SCROLL_SPEED = 10; ///< number of pixels which defines step of scrolling +const int DEFAULT_END_SCROLL_DELAY = 10; ///< number of gaps when one of label's edge is visible +const int LABEL_SIZE_TINY = 6; ///< defines size of tiny label's font +const int LABEL_SIZE_SMALL = 10; ///< defines size of small label's font +const int LABEL_SIZE_NORMAL = 12; ///< defines size of normal label's font +const int LABEL_SIZE_LARGE = 16; ///< defines size of large label's font +const int LABEL_SIZE_HUGE = 24; ///< defines size of huge label's font + +/** + * @author ComArch S.A. + * @date 2009.08.07 + * @version 1.1 + * + * @brief A label with scrolling text. + */ +#ifdef MAEMO + +class FFScrollingLabel : public FFAbstractWidget +{ + Q_OBJECT + +#else + +class QDESIGNER_WIDGET_EXPORT FFScrollingLabel : public FFAbstractWidget +{ + Q_OBJECT + Q_ENUMS(Alignment) + Q_PROPERTY(QFont font READ font WRITE setFont) + Q_PROPERTY(QString text READ text WRITE setText) + Q_PROPERTY(bool resizable READ isResizable WRITE setResizable) + Q_PROPERTY(int scrollSpeed READ scrollSpeed WRITE setScrollSpeed) + Q_PROPERTY(int endScrollDelay READ endScrollDelay WRITE setEndScrollDelay) + Q_PROPERTY(QColor color READ color WRITE setColor) + Q_PROPERTY(bool fitToFont READ fitToFont WRITE setFitToFont) + Q_PROPERTY(bool smoothDisappear READ isSmoothDisappear WRITE setSmoothDisappear) + Q_PROPERTY(int timerDelay READ timerDelay WRITE setTimerDelay) + Q_PROPERTY(FFScrollingLabel::Alignment alignment READ alignment WRITE setAlignment) + +#endif +public: + FFScrollingLabel(QWidget* parent = 0); + FFScrollingLabel(QString text, QWidget *parent = 0); + FFScrollingLabel(QString text, QFont font, QWidget* parent = 0); + virtual ~FFScrollingLabel(); + + enum Alignment + { + ALIGNMENT_LEFT = 0x2000, ///< label alignment to left + ALIGNMENT_RIGHT = 0x4000, ///< label alignment to right + ALIGNMENT_CENTER = 0x8000 ///< label alignment to center + }; + + QFont font() const; + QString text() const; + bool isResizable() const; + int scrollSpeed() const; + int endScrollDelay() const; + QColor color() const; + bool fitToFont() const; + bool isSmoothDisappear() const; + int timerDelay(); + FFScrollingLabel::Alignment alignment(); + + void setFont(QFont font); + void setFont(int fontParam); + void setText(QString text); + void setResizable(bool resizable); + void setScrollSpeed(int scrollSpeed); + void setEndScrollDelay(int endScrollDelay); + void setColor(QColor color); + void setFitToFont(bool fitToFont); + void setScrollType(int type); + void setSmoothDisappear(bool smoothDisappear); + void setTimerDelay(int delay); + void setAlignment(FFScrollingLabel::Alignment alignment); + + void updateView(); + +protected: + virtual void paintEvent(QPaintEvent *event); + virtual void resizeEvent(QResizeEvent *event); + virtual QSize sizeHint() const; + virtual void hideEvent(QHideEvent* event); + virtual void showEvent(QShowEvent* event); + +private: + QPainter* painter; ///< pointer to painter + QLinearGradient gradient; ///< stores gradient for label + QPen pen; ///< stores pen where gradient is set + QString text_; ///< stores text of label + QFont font_; ///< stores font of text + QTimer* timer; ///< timer used to animation + bool resizable_; ///< is true when font size should change with widget's size changes. + QColor color_; ///< stores color used to create gradient + + int length_; ///< length of the text + int textOffset; ///< text's offset + int scrollSpeed_; ///< scoll's speed + int endScrollDelay_; ///< gap during one of edges is visible + int endScrollDelayIterationL; ///< contains value how many times text is in stopped state on left + int endScrollDelayIterationR; ///< contains value how many times text is in stopped state on right + bool fitToFont_; ///< if is true the widgets height is adjusted to font size + QString previousScrollType; ///< stores scrolling type + bool smoothDisappear_; ///< is true when the gradient at ends is set up + int timerDelay_; ///< defines how often text is repainted + Alignment alignment_; ///< stores text's alignment + int textStartPos; ///< contains start text's posiotion + + void init(QString text, QFont font); + void calcTextPos(); + inline void changeGradient(qreal left, qreal right); + +private slots: + void scrollSideToSide(); +}; + +#endif // FFSCROLLINGLABEL_H