added all files
[ffqwlibrary] / libffqw-1.0 / sources / ffchartlegendcontrolpanel.cpp
diff --git a/libffqw-1.0/sources/ffchartlegendcontrolpanel.cpp b/libffqw-1.0/sources/ffchartlegendcontrolpanel.cpp
new file mode 100644 (file)
index 0000000..55c9706
--- /dev/null
@@ -0,0 +1,277 @@
+/*
+         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 ffchartlegendcontrolpanel.cpp
+ * @brief Contains a necessary class declaration.
+ *
+ * @author ComArch S.A.
+ * @date 2009.08.24
+ * @version 1.0
+ */
+#include <qdebug.h>
+#include "ffchartlegendcontrolpanel.h"
+
+/**
+ * Constructs a FFChartLegendControlPanel with parent.
+ * @param parent QWidget parent
+ */
+FFChartLegendControlPanel::FFChartLegendControlPanel(QWidget* parent) :
+       FFAbstractWidget(parent)
+{
+       this->parent = parent;
+       init();
+}
+
+/**
+ * A virtual destructor.
+ */
+FFChartLegendControlPanel::~FFChartLegendControlPanel()
+{
+       parent = NULL;
+
+}
+
+/**
+ * Returns pen_ - pen with line style, line color and line width
+ */
+QPen FFChartLegendControlPanel::pen()
+{
+       return pen_;
+}
+
+/**
+ * Sets pen_ - pen with line style, line color and line width
+ */
+void FFChartLegendControlPanel::setPen(QPen pen)
+{
+       pen_ = pen;
+       colorSelector->setCurrentColor(pen.color());
+       styleSelector->setCurrentLine(pen.style());
+       thicknessSelector->setCurrentLine(pen.width());
+}
+
+/**
+ * Initiates all needed fields
+ */
+void FFChartLegendControlPanel::init()
+{
+       // sets default values
+       setAutoFillBackground(true);
+
+       backgroundColor = DEFAULT_LEGEND_BACKGROUND_COLOR;
+       backgroundOpacity = DEFAULT_LEGEND_BACKGROUND_OPACITY;
+
+       //Initialize pen_
+       pen_.setWidth(0);
+       pen_.setStyle(Qt::SolidLine);
+       pen_.setColor(Qt::transparent);
+
+       //sets hide button
+       hideButton = new FFAbstractButton(this);
+
+       hideButton->setMargins(0, 0, 5, 5);
+       hideButton->setIconAlignment(Qt::AlignRight);
+       hideButton->setIcon(QIcon(QPixmap(":/standard/combo_colorarrow.svg")));
+
+       //creates selectors
+       colorSelector = new FFColorComboBox(this);
+       thicknessSelector = new FFLineComboBox(this);
+       styleSelector = new FFLineComboBox(this);
+
+       //sets selectors and add needed items
+       QBrush emptyBrush(QColor(20, 80, 0));
+       thicknessSelector->setTitle("Thickness's chooser");
+       thicknessSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 1));
+       thicknessSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 2));
+       thicknessSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 3));
+       thicknessSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 4));
+       thicknessSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 5));
+       thicknessSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 6));
+       thicknessSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 7));
+       thicknessSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 8));
+       thicknessSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 9));
+       thicknessSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 10));
+
+       styleSelector->setTitle("Style's chooser");
+       styleSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)),
+                                   6,
+                                   Qt::SolidLine));
+       styleSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)),
+                                   6,
+                                   Qt::DashLine));
+       styleSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)), 6, Qt::DotLine));
+       styleSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)),
+                                   6,
+                                   Qt::DashDotDotLine));
+       styleSelector->addItem(QPen(QBrush(qRgb(100, 100, 100)),
+                                   6,
+                                   Qt::DashDotLine));
+
+       colorSelector->addItem(QColor(125, 125, 125));
+       colorSelector->addItem(QColor(255, 0, 0));
+       colorSelector->addItem(QColor(0, 255, 0));
+       colorSelector->addItem(QColor(0, 0, 255));
+       colorSelector->addItem(QColor(255, 255, 0));
+       colorSelector->addItem(QColor(255, 255, 255));
+       colorSelector->addItem(QColor(0, 255, 255));
+       colorSelector->addItem(QColor(255, 0, 255));
+       colorSelector->addItem(QColor(255, 255, 255));
+       colorSelector->setCols(2);
+
+       //creates and sets layout of controlPanel
+       gLayout = new QGridLayout(this);
+       gLayout->setMargin(0);
+
+       gLayout->addWidget(thicknessSelector, 0, 0);
+       gLayout->addWidget(styleSelector, 1, 0);
+       gLayout->addWidget(colorSelector, 2, 0);
+       gLayout->addWidget(hideButton, 3, 0);
+
+       //empty item added to layout
+       QSpacerItem* horizontalSpacer = new QSpacerItem(1,
+                                                       1,
+                                                       QSizePolicy::Expanding,
+                                                       QSizePolicy::Expanding);
+       gLayout->addItem(horizontalSpacer, 4, 0);
+
+       //connects
+       connect(thicknessSelector,
+               SIGNAL(activated(QVariant)),
+               this,
+               SLOT(thicknessChanged(QVariant)));
+       connect(styleSelector,
+               SIGNAL(activated(QVariant)),
+               this,
+               SLOT(styleChanged(QVariant)));
+       connect(colorSelector,
+               SIGNAL(activated(QVariant)),
+               this,
+               SLOT(colorChanged(QVariant)));
+       connect(hideButton, SIGNAL(clicked()), this, SLOT(hide()));
+}
+
+/**
+ * Slot to support sizeChooser and emit signal to legend
+ */
+void FFChartLegendControlPanel::thicknessChanged(QVariant localPen)
+{
+       pen_.setWidth(localPen.value<QPen> ().width());
+       emit penChanged(pen_);
+
+}
+
+/**
+ * Slot to support styleChooser and emit signal to legend
+ */
+void FFChartLegendControlPanel::styleChanged(QVariant localPen)
+{
+       pen_.setStyle(localPen.value<QPen> ().style());
+       emit penChanged(pen_);
+}
+
+/**
+ * Slot to support colorChooserand emit signal to legend
+ */
+void FFChartLegendControlPanel::colorChanged(QVariant localPen)
+{
+       pen_.setColor(localPen.value<QPen> ().color());
+       emit penChanged(pen_);
+}
+
+/**
+ * Slot to support hide feature
+ */
+void FFChartLegendControlPanel::hide()
+{
+       QWidget::hide();
+       if(NULL != parent)
+               parent->parentWidget()->repaint(geometry());
+}
+
+/**
+ * Draws FFLegendControlPanel's background
+ * @param event Contains all informations about event.
+ */
+void FFChartLegendControlPanel::paintEvent(QPaintEvent *event)
+{
+       Q_UNUSED(event)
+       QPainter paint;
+       paint.begin(this);
+       paint.setOpacity(backgroundOpacity);
+       paint.setBrush(backgroundColor);
+       paint.setPen(Qt::transparent);
+       paint.drawRect(0, 0, width(), height());
+       paint.end();
+}
+