added all files
[ffqwlibrary] / libffqw-1.0 / sources / ffcolorcombobox.cpp
diff --git a/libffqw-1.0/sources/ffcolorcombobox.cpp b/libffqw-1.0/sources/ffcolorcombobox.cpp
new file mode 100644 (file)
index 0000000..d40d2c8
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+         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 ffcolorcombobox.cpp
+ * @brief Implementation of the FFColorComboBox class
+ *
+ * @author ComArch S.A.
+ * @date 2009.08.13
+ * @version 1.0
+ */
+
+#include "ffcolorcombobox.h"
+
+/**
+ * Constructs a FFColorComboBox with a parent.
+ */
+FFColorComboBox::FFColorComboBox(QWidget* parent) :
+       FFAbstractComboBox(new FFColorButton, parent)
+{
+
+}
+
+/**
+ * A virtual destructor.
+ */
+FFColorComboBox::~FFColorComboBox()
+{
+       ;
+}
+
+/**
+ * Adds item to combobox
+ * @param spec is a color for item
+ */
+void FFColorComboBox::addItem(QColor spec)
+{
+       addItem(QVariant(spec));
+}
+/**
+ * Adds item to combobox
+ * @param spec is a pen with color for item
+ */
+void FFColorComboBox::addItem(QPen spec)
+{
+       addItem(spec.color());
+}
+/**
+ * Adds items to combobox
+ * @param items is a list of colors for items
+ */
+void FFColorComboBox::addItems(QList<QColor> items)
+{
+       for(int i = 0; i < items.size(); ++i)
+       {
+               // First step: you must prepare new button (button must be inherited from FFAbstractButton)
+               FFColorButton* temp = new FFColorButton;
+               temp->setColor(items.at(i));
+
+               // Second step: You must call this function with previously prepared button
+               insertItem(temp, false);
+       }
+       emit reset();
+}
+/**
+ * Adds items to combobox
+ * @param items is a list of QPen-s with colors for items
+ */
+void FFColorComboBox::addItems(QList<QPen> items)
+{
+       for(int i = 0; i < items.size(); ++i)
+       {
+               // First step: you must prepare new button (button must be inherited from FFAbstractButton)
+               FFColorButton* temp = new FFColorButton;
+               temp->setColor(items.at(i).color());
+
+               // Second step: You must call this function with previously prepared button
+               insertItem(temp, false);
+       }
+       emit reset();
+}
+
+/**
+ * Sets actual color. If a color is not in colorcombobox nothing happens.
+ *@param color is a color to set
+ */
+void FFColorComboBox::setCurrentColor(QColor color)
+{
+       for(int i = 0; i < items_.size(); ++i)
+       {
+               if(dynamic_cast<FFColorButton*>(items_[i])->color() == color)
+               {
+                       setCurrentItem(i);
+                       return;
+               }
+       }
+}
+
+/**
+ * Sets chosen value of FFColoroComboBox on activator
+ * @param item is a pointer to chosen item.
+ */
+
+void FFColorComboBox::setActivatorSpecs(FFAbstractButton* item)
+{
+       if(FFColorButton* but = dynamic_cast<FFColorButton*>(item))
+       {
+               dynamic_cast<FFColorButton*>(activator_)->setColor(but->color());
+       }
+}
+/**
+ * Returns QVariant element containing value of chosen item
+ */
+QVariant FFColorComboBox::activatorSpecs()
+{
+       return QVariant(dynamic_cast<FFColorButton*>(activator_)->pen());
+}
+
+/**
+ * Adds new item to FFColorComboBox
+ */
+void FFColorComboBox::addItem(QVariant spec)
+{
+       // First step: you must prepare new button (button must be inherited from FFAbstractButton)
+       FFColorButton* temp = new FFColorButton;
+       temp->setColor(spec.value<QColor>());
+
+       // Second step: You must call this function with previously prepared button
+       insertItem(temp);
+}
+
+/**
+ * Constructs FFColorButton with given parent
+ */
+FFColorButton::FFColorButton(QWidget* parent) :
+       FFAbstractButton(parent)
+{
+       setMargins(15,15,15,15);
+}
+/**
+ * A virtual destructor
+ */
+FFColorButton::~FFColorButton()
+{
+       ;
+}
+/**
+ * Sets a color painted on the button
+ */
+void FFColorButton::setColor(QColor color)
+{
+       QBrush brush;
+       brush = pen_.brush();
+       brush.setStyle(Qt::SolidPattern);
+       brush.setColor(color);
+       pen_.setBrush(brush);
+       pen_.setColor(color);
+}
+/**
+ * Returns color painted on the button
+ */
+QColor FFColorButton::color()
+{
+       return pen_.color();
+}
+/**
+ * Serves paint event, draws rounded rectangle. Overrides parent's method
+ * @param event Contains all informations about event.
+ */
+void FFColorButton::paintEvent(QPaintEvent* event)
+{
+       FFAbstractButton::paintEvent(event);
+
+       QPainter painter;
+       painter.begin(this);
+
+       painter.setPen(pen_);
+       painter.setBrush(pen_.brush());
+
+       painter.setRenderHint(QPainter::Antialiasing,true);
+       painter.drawRoundedRect(leftMargin() + indent(),
+                        topMargin(),
+                        width() - leftMargin() - rightMargin() - 2 * indent(),
+                        height() - topMargin() - bottomMargin(),10,10);
+
+       painter.end();
+
+}