added all files
[ffqwlibrary] / libffqw-n810-1.0 / sources / ffabstractbutton.h
diff --git a/libffqw-n810-1.0/sources/ffabstractbutton.h b/libffqw-n810-1.0/sources/ffabstractbutton.h
new file mode 100644 (file)
index 0000000..91b2b15
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+         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 ffabstractbutton.h
+ * @brief Contains a necessary class declaration.
+ *
+ * @author ComArch S.A.
+ * @date 2009.08.03
+ * @version 1.0
+ */
+
+#ifndef FFABSTRACTBUTTON_H
+#define FFABSTRACTBUTTON_H
+
+#include "ffviewcache.h"
+#include "ffscrollinglabel.h"
+#include <QPainter>
+#include <QTime>
+#include <QPen>
+
+
+static const QString BUTTON_PATH= ":/standard/button"; ///<Path to the pixmaps used by button
+static const Qt::Alignment DEFAULT_ICON_ALIGNMENT = Qt::AlignLeft;///<Default icon's alignment
+/**
+ * @author ComArch S.A.
+ * @date 2009.08.03
+ * @version 1.0
+ *
+ * @brief A class responsible for margins and left indent
+ */
+class FFAbstractButtonPrivate
+{
+public:
+       FFAbstractButtonPrivate();
+       virtual ~FFAbstractButtonPrivate();
+
+       void scaleMargins(QSize oldSize, QSize newSize);
+       void setMargins(int leftMargin,
+                       int rightMargin,
+                       int topMargin,
+                       int bottomMargin);
+
+private:
+       friend class FFAbstractButton;
+
+       int leftMargin_;   ///<left margin value
+       int topMargin_;    ///<top margin value
+       int bottomMargin_; ///<bottom margin value
+       int rightMargin_;  ///<right margin value
+       int hSpacing_;     ///<horizontal spacing value
+       int vSpacing_;     ///<vertical spacing value
+
+       float leftMarginTemp;   ///<stores old left margin value
+       float topMarginTemp;    ///<stores old top margin value
+       float bottomMarginTemp; ///<stores old bottom margin value
+       float rightMarginTemp;  ///<stores old right margin value
+       float hSpacingTemp;     ///<stores old horizontal spacing value
+       float vSpacingTemp;     ///<stores old vertical spacing value
+
+       int leftIndent_;        ///<left indent value
+};
+
+/**
+ * @author ComArch S.A.
+ * @date 2009.08.03
+ * @version 1.0
+ *
+ * @brief A class responsible for simplest button, only with graphics
+ */
+class FFAbstractButton : public QAbstractButton
+{
+       Q_OBJECT
+
+public:
+       FFAbstractButton(QWidget* parent = 0);
+       virtual ~FFAbstractButton();
+
+       int indent();
+       int leftMargin();
+       int rightMargin();
+       int topMargin();
+       int bottomMargin();
+       int hSpacing();
+       int vSpacing();
+       Qt::Alignment iconAlignment();
+       void setLeftMargin(int leftMargin);
+       void setRightMargin(int rightMargin);
+       void setTopMargin(int topMargin);
+       void setBottomMargin(int bottomMargin);
+       void setMargins(int leftMargin,
+                       int rightMargin,
+                       int topMargin,
+                       int bottomMargin);
+       void setHSpacing(int hSpacing);
+       void setVSpacing(int hSpacing);
+       void setIconAlignment(Qt::Alignment iconAlignment);
+       QPen pen();
+       void setPen(QPen pen);
+       virtual void updateView();
+
+protected:
+       virtual void paintEvent(QPaintEvent* event);
+       virtual void resizeEvent(QResizeEvent* event);
+       virtual void mousePressEvent(QMouseEvent* event);
+       virtual void mouseReleaseEvent(QMouseEvent* event);
+
+       virtual void paintIcon(QPainter* painter);
+
+       FFAbstractButtonPrivate insideRect;     ///<stores rectangle on which button is draw
+
+       bool isClicked_;            ///<stores clicked state
+       int  iconSpace;             ///<holds space between edges of icon (icons width)
+       QPen pen_;                  ///<holds a pen then you can use later to drawing in paintEvent
+       Qt::Alignment iconAlignment_; ///<stores alignment of icon
+       void setSkin();
+
+private:
+
+       static FFViewCache* topLeftNormal;       ///<cached top left corner view
+       FFViewCache*        topCenterNormal;     ///<cached top center view
+       static FFViewCache* topRightNormal;      ///<cached top right corner view
+       FFViewCache*        centerLeftNormal;    ///<cached left view
+       FFViewCache*        centerNormal;        ///<cached center view
+       FFViewCache*        centerRightNormal;   ///<cached right view
+       static FFViewCache* bottomLeftNormal;    ///<cached bottom left corner view
+       FFViewCache*        bottomCenterNormal;  ///<cached bottom center view
+       static FFViewCache* bottomRightNormal;   ///<cached bottom right corner view
+       static FFViewCache* topLeftClicked;      ///<cached top left corner view - clicked state
+       FFViewCache*        topCenterClicked;    ///<cached top center view - clicked state
+       static FFViewCache* topRightClicked;     ///<cached top right corner view - clicked state
+       FFViewCache*        centerLeftClicked;   ///<cached left center view - clicked state
+       FFViewCache*        centerClicked;               ///<cached center view - clicked state
+       FFViewCache*        centerRightClicked;  ///<cached right center view - clicked state
+       static FFViewCache* bottomLeftClicked;   ///<cached bottom left corner view - clicked state
+       FFViewCache*        bottomCenterClicked; ///<cached bottom center view - clicked state
+       static FFViewCache* bottomRightClicked;  ///<cached bottom right corner view - clicked state
+
+       int pixmapsPositionWidth_;  ///<stores width of center part of the button
+       int pixmapsPositionHeight_; ///<stores height of center part of the button
+
+       QString path;  ///<stores path to the pixmaps
+       static bool  staticFFViewCacheUpdated;
+       static int   minimumWidth;
+
+       void init();
+
+signals:
+       void clicked();
+};
+
+#endif // FFABSTRACTBUTTON_H