File indexing completed on 2024-05-12 16:35:24

0001 /* This file is part of the KDE project
0002    Copyright (C) 2012-2013 Jigar Raisinghani <jigarraisinghani@gmail.com>
0003 
0004    This library is free software; you can redistribute it and/or
0005    modify it under the terms of the GNU Library General Public
0006    License as published by the Free Software Foundation; either
0007    version 2 of the License, or (at your option) any later version.
0008 
0009    This library is distributed in the hope that it will be useful,
0010    but WITHOUT ANY WARRANTY; without even the implied warranty of
0011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012    Library General Public License for more details.
0013 
0014    You should have received a copy of the GNU Library General Public License
0015    along with this library; see the file COPYING.LIB.  If not, write to
0016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017    Boston, MA 02110-1301, USA.
0018 */
0019 
0020 // Local
0021 #include "pivotfilters.h"
0022 #include "ui_pivotfilters.h"
0023 #include "pivotmain.h"
0024 
0025 #include<QtGui>
0026 #include<QString>
0027 
0028 #include <sheets/Sheet.h>
0029 #include <sheets/ui/Selection.h>
0030 
0031 using namespace Calligra::Sheets;
0032 
0033 class PivotFilters::Private
0034 {
0035   public:
0036       Selection *selection;
0037       Ui::PivotFilters mainWidget;
0038       int operatorselected1,operatorselected2;
0039       bool isoperatorselected;
0040       QVector<QString> conditions;
0041 };
0042 
0043 
0044 PivotFilters::PivotFilters(QWidget* parent,Selection* selection):
0045       KoDialog(parent),
0046       d(new Private)
0047 {
0048       QWidget* widget = new QWidget(this);
0049       d->mainWidget.setupUi(widget);    
0050       setMainWidget(widget);
0051       d->selection=selection;
0052       selectFields(d->mainWidget.Field);
0053       d->operatorselected1=1;
0054       d->operatorselected2=1;
0055       d->isoperatorselected=false;
0056     
0057 //     setButtons(Ok|Cancel);
0058 //     enableButton(Ok,"true");
0059       connect(d->mainWidget.Operator, SIGNAL(activated(QString)), this, SLOT(activateBoxes()));
0060       connect(d->mainWidget.Operator2, SIGNAL(activated(QString)), this, SLOT(activateBoxes2()));
0061       connect(d->mainWidget.Field, SIGNAL(activated(QString)), this, SLOT(fillValue()));
0062       connect(d->mainWidget.Field2, SIGNAL(activated(QString)), this, SLOT(fillValue2()));
0063       connect(d->mainWidget.Field3, SIGNAL(activated(QString)), this, SLOT(fillValue3()));
0064 }
0065 
0066 
0067 void PivotFilters::selectFields(QComboBox* box)
0068 {
0069       Sheet *const sheet = d->selection->lastSheet();
0070       const QRect range = d->selection->lastRange();
0071       
0072       int r = range.right();
0073       int row = range.top();
0074 
0075       Cell cell;
0076       
0077       QString text;
0078     //  int index = 0;
0079       for (int i = range.left(); i <= r; ++i) {
0080       cell = Cell(sheet, i, row);
0081       text = cell.displayText();
0082       
0083       if(text.length() >0)
0084       {
0085         box->addItem(text); 
0086       }
0087       }
0088 }
0089 void PivotFilters::activateBoxes()
0090 {
0091     if(d->mainWidget.Operator->currentText()=="None")
0092     {
0093       d->mainWidget.Field2->clear();
0094       d->mainWidget.Operator2->clear();
0095       d->mainWidget.Field3->clear();
0096       d->mainWidget.Value2->clear();
0097       d->mainWidget.Value3->clear();
0098       d->mainWidget.Condition2->clear();
0099       d->mainWidget.Condition3->clear();
0100       d->operatorselected2=0;
0101       d->operatorselected1=0;
0102       d->isoperatorselected=true;
0103     }
0104     if(d->operatorselected1==1)
0105     {
0106       selectFields(d->mainWidget.Field2);
0107       d->mainWidget.Operator2->addItem("None");
0108       d->mainWidget.Operator2->addItem("And");
0109       d->mainWidget.Operator2->addItem("Or");
0110       d->mainWidget.Condition2->addItem("<");
0111       d->mainWidget.Condition2->addItem(">");
0112       d->mainWidget.Condition2->addItem("==");
0113       d->mainWidget.Condition2->addItem("!=");
0114       
0115     }
0116     d->operatorselected1++;
0117 }
0118 void PivotFilters::activateBoxes2()
0119 {
0120     if(d->mainWidget.Operator2->currentText()=="None")
0121     {
0122       d->mainWidget.Field3->clear();
0123       d->mainWidget.Value3->clear();
0124       d->mainWidget.Condition3->clear();
0125       
0126       d->operatorselected2=0;
0127     }
0128       
0129     
0130     if(d->operatorselected2==1 || d->isoperatorselected==true)
0131     {
0132       selectFields(d->mainWidget.Field3);
0133       d->mainWidget.Condition3->addItem("<");
0134       d->mainWidget.Condition3->addItem(">");
0135       d->mainWidget.Condition3->addItem("==");
0136       d->mainWidget.Condition3->addItem("!=");
0137       d->isoperatorselected=false;
0138     }
0139     d->operatorselected2++;
0140 }
0141 void PivotFilters::fillValue()
0142 {
0143     PivotMain *pmain=new PivotMain(this,d->selection);
0144     QVector<QString> str=pmain->ValueData(d->mainWidget.Field->currentText());
0145     d->mainWidget.Value->clear();
0146     for(int i=0;i<str.count();i++)
0147     {
0148       d->mainWidget.Value->addItem(str.at(i));
0149     }
0150 }
0151 void PivotFilters::fillValue2()
0152 {
0153     PivotMain *pmain=new PivotMain(this,d->selection);
0154     QVector<QString> str=pmain->ValueData(d->mainWidget.Field2->currentText());
0155     d->mainWidget.Value2->clear();
0156     for(int i=0;i<str.count();i++)
0157     {
0158       d->mainWidget.Value2->addItem(str.at(i));
0159     }
0160 }
0161 void PivotFilters::fillValue3()
0162 {
0163     PivotMain *pmain=new PivotMain(this,d->selection);
0164     QVector<QString> str=pmain->ValueData(d->mainWidget.Field3->currentText());
0165     d->mainWidget.Value3->clear();
0166     for(int i=0;i<str.count();i++)
0167     {
0168       d->mainWidget.Value3->addItem(str.at(i));
0169     }
0170 }
0171 
0172 QVector<QString> PivotFilters::filterData()
0173 {
0174     QVector<QString> data;
0175 
0176     data.append(d->mainWidget.Field->currentText());
0177     data.append(d->mainWidget.Condition->currentText());
0178     data.append(d->mainWidget.Value->currentText());
0179     
0180     if(d->mainWidget.Operator->currentText()!="None")
0181     {
0182       data.append(d->mainWidget.Operator->currentText());
0183       data.append(d->mainWidget.Field2->currentText());
0184       data.append(d->mainWidget.Condition2->currentText());
0185       data.append(d->mainWidget.Value2->currentText());   
0186     }
0187     if(d->mainWidget.Operator2->currentText()!="None" && d->mainWidget.Operator->currentText()!="None")
0188     {
0189       data.append(d->mainWidget.Operator2->currentText());
0190       data.append(d->mainWidget.Field3->currentText());
0191       data.append(d->mainWidget.Condition3->currentText());
0192       data.append(d->mainWidget.Value3->currentText());   
0193     }
0194       
0195     return data;
0196 }
0197 
0198 
0199 
0200 
0201 
0202 PivotFilters::~PivotFilters()
0203 {
0204     delete d;
0205 }