--- /dev/null
+/*
+ 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 ffscrollingcheckbox.cpp
+ * @brief Implementation of the FFScrollingCheckBox class.
+ *
+ * @author ComArch S.A.
+ * @date 2009.08.03
+ * @version 1.0
+ */
+
+#include "ffscrollingcheckbox.h"
+
+
+/*Static FFViewCaches -improve performance*/
+FFViewCache* FFScrollingCheckBox::stateTrue = NULL;
+FFViewCache* FFScrollingCheckBox::stateFalse = NULL;
+/**
+ * Constructs a FFScrollingCheckBox with a parent.
+ * Sets variable to initial values and set graphics used in widget.
+ */
+FFScrollingCheckBox::FFScrollingCheckBox(QWidget* parent) :
+ FFScrollingButton(parent)
+{
+ path = SCROLLINGCHECKBOX_PATH;
+ init();
+}
+/**
+ * Constructs a FFScrollingCheckBox with a parent and new path to
+ * False/Normal Graphics.
+ * Set variable to initial values and set graphics used in widget.
+ */
+FFScrollingCheckBox::FFScrollingCheckBox(const QString& path, QWidget* parent ) :
+ FFScrollingButton(parent)
+{
+ this->path = path;
+ init();
+}
+
+/**
+ * A virtual destructor.
+ */
+FFScrollingCheckBox::~FFScrollingCheckBox()
+{
+ ;
+}
+
+/**
+ * Repaint the view of checkbox button. Overrides the virtual method from QWidget.
+ * @param event Contains all informations about event.
+ */
+void FFScrollingCheckBox::paintEvent(QPaintEvent* event)
+{
+ //calls parental paint event
+ FFAbstractButton::paintEvent(event);
+
+ //sets values for drawing
+ int x=0,y=0;
+ if(width() > height())
+ {
+ x = leftMargin() + indent();
+ y = topMargin() ;
+ }
+ else
+ {
+ x = leftMargin() + indent();
+ y = topMargin() ;
+ }
+
+ QPainter painter;
+ painter.begin(this);
+
+ //draws image.
+ if( isChecked())
+ {
+ painter.drawPixmap(x,y,stateTrue->pixmap());
+ }
+ else
+ {
+ painter.drawPixmap(x,y,stateFalse->pixmap());
+ }
+ painter.end();
+}
+
+/**
+ * Updates button`s view after changing size of the widget.
+ * Update size of all pixmap which need it (without corners)
+ * @param event Contains all informations about event.
+ */
+void FFScrollingCheckBox::resizeEvent(QResizeEvent* event)
+{
+ FFAbstractButton::resizeEvent(event);
+ calculateRatio();
+ updateView();
+}
+
+/**
+ * Support mouse press event.
+ * @param event Contains all informations about event.
+ */
+void FFScrollingCheckBox::mousePressEvent(QMouseEvent* event)
+{
+ FFScrollingButton::mousePressEvent(event);
+}
+
+/**
+ * Support mouse release event.
+ * @param event Contains all informations about event.
+ */
+void FFScrollingCheckBox::mouseReleaseEvent(QMouseEvent* event)
+{
+ if(isClicked_)
+ {
+ if(!signalsBlocked())
+ {
+ toggle();
+ }
+ }
+ FFScrollingButton::mouseReleaseEvent(event);
+}
+/**
+ * Paints icon if it was set.
+ * @param painter is a tool to paint icon on widget.
+ */
+void FFScrollingCheckBox::paintIcon(QPainter* painter)
+{
+ // if icon was set paint it
+ if (!icon().isNull())
+ {
+ QRect rect(0+leftMargin() + qMin(width() - leftMargin() - rightMargin(),
+ height() - topMargin() - bottomMargin()),
+ 0+topMargin(),
+ geometry().width()-rightMargin()-leftMargin(),
+ geometry().height()-bottomMargin()-topMargin());
+
+ //paint icon in button center
+ icon().paint(painter,rect,iconAlignment(),QIcon::Normal, QIcon::Off);
+ }
+}
+/**
+ * Returns text icon space.
+ */
+int FFScrollingCheckBox::textIconSpace()
+{
+ return textIconSpace_;
+}
+
+/**
+ * Initiates an object of FFScrollingCheckBox. Sets all needed fields.
+ */
+void FFScrollingCheckBox::init()
+{
+
+
+ setCheckable(true);
+ setChecked(false);
+ textIconSpace_ = DEFAULT_TEXTICON_SPACE;
+
+ if(NULL == stateFalse)
+ {
+ stateFalse = new FFViewCache;
+ stateFalse->init(path + "_false.svg");
+ stateFalse->updateView(stateFalse->defaultSize());
+ }
+
+ if(NULL == stateTrue)
+ {
+
+ stateTrue = new FFViewCache;
+ stateTrue->init(path + "_true.svg");
+ stateTrue->updateView(stateTrue->defaultSize());
+ }
+ setTitleIndent(0);
+ setDescriptionIndent(0);
+ setMinimumWidth(minimumHeight() + leftMargin() + rightMargin() + indent());
+ setMargins(0,0,0,0);
+}
+
+/**
+ * Sets text icon space
+ */
+void FFScrollingCheckBox::setTextIconSpace(int textIconSpace)
+{
+ textIconSpace_=textIconSpace;
+}
+/**
+ * Updates button's view parameters
+ */
+void FFScrollingCheckBox::updateView()
+{
+ int margins = topMargin() + bottomMargin() + hSpacing();
+ int checkboxEdge = qMin(width() - leftMargin() - rightMargin(),
+ height() - topMargin() - bottomMargin());
+ QSize size= QSize(0,0);
+ if(width() > height())
+ {
+ titleWidget()->setVisible(true);
+ descriptionWidget()->setVisible(true);
+ //sets button's labels geometry
+ titleWidget()->setGeometry(vSpacing() + checkboxEdge + leftMargin() + iconSpace + textIconSpace_
+ + titleIndent() + indent(),
+ topMargin(),
+ width() - leftMargin() - rightMargin() - titleIndent() - checkboxEdge - hSpacing() - iconSpace - textIconSpace_ - indent(),
+ (height() - margins) * tRatio);
+
+ descriptionWidget()->setGeometry(vSpacing() + checkboxEdge + leftMargin() + descriptionIndent() + iconSpace + textIconSpace_ + indent(),
+ topMargin() + titleWidget()->size().height() + hSpacing(),
+ width() - checkboxEdge - leftMargin() - descriptionIndent() - rightMargin() - hSpacing() - iconSpace - textIconSpace_ - indent(),
+ (height() - margins) * (dRatio));
+ size = QSize(checkboxEdge, checkboxEdge);
+ }
+ else
+ {
+ size = QSize(width()-(leftMargin() + rightMargin() + 2* indent()),checkboxEdge-(topMargin()+bottomMargin()));
+ }
+
+ if(minimumSize().width() >= width() )
+ {
+ titleWidget()->setVisible(false);
+ descriptionWidget()->setVisible(false);
+ }
+
+ stateFalse->updateView(size);
+ stateTrue->updateView(size);
+
+ update();
+
+ //calls update view from parent
+ FFAbstractButton::updateView();
+}
+/**
+ * Sets icon alignment
+ * @param iconAlignment contains new alignemnt for icon
+ */
+void FFScrollingCheckBox::setIconAlignment(Qt::Alignment iconAlignment)
+{
+ //Sets only possible alignment options
+ switch(iconAlignment)
+ {
+ case Qt::AlignLeft:
+ FFAbstractButton::setIconAlignment(iconAlignment);
+ break;
+ default:
+ qDebug() << "You can only use Qt::AlignLeft or Qt::AlignRight";
+ break;
+ }
+}