added all files
[ffqwlibrary] / libffqw-1.0 / sources / ffscrollinglabel.h
diff --git a/libffqw-1.0/sources/ffscrollinglabel.h b/libffqw-1.0/sources/ffscrollinglabel.h
new file mode 100644 (file)
index 0000000..8386701
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+         GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ 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 <QtGui/QWidget>
+#include <QPainter>
+#include <QPushButton>
+#include <QDebug>
+#include <QTimer>
+#include <QResizeEvent>
+#include <QBitmap>
+#include <QHideEvent>
+#include <QShowEvent>
+
+#ifndef MAEMO
+#include <QtDesigner/QDesignerExportWidget>
+#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