X-Git-Url: http://git.maemo.org/git/?p=ffqwlibrary;a=blobdiff_plain;f=libffqw-1.0%2Fsources%2Fffscrollingcheckbox.cpp;fp=libffqw-1.0%2Fsources%2Fffscrollingcheckbox.cpp;h=1a2e325cd4c74935d94958c5ff7daa5ab1324785;hp=0000000000000000000000000000000000000000;hb=1273d1fbb03faf468b080ca8f2f78717e6949815;hpb=0cf856837e9dc2e271c8e16390758bf02107f678 diff --git a/libffqw-1.0/sources/ffscrollingcheckbox.cpp b/libffqw-1.0/sources/ffscrollingcheckbox.cpp new file mode 100644 index 0000000..1a2e325 --- /dev/null +++ b/libffqw-1.0/sources/ffscrollingcheckbox.cpp @@ -0,0 +1,318 @@ +/* + 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 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; + } +}