knode
knrangefilter.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <QHBoxLayout>
00016 #include <QLabel>
00017 #include <QCheckBox>
00018 #include <QComboBox>
00019
00020 #include <knuminput.h>
00021 #include <kconfig.h>
00022 #include <kconfiggroup.h>
00023
00024 #include "knrangefilter.h"
00025
00026 using namespace KNode;
00027
00028 bool KNode::RangeFilter::doFilter( int a )
00029 {
00030 bool ret=true;
00031 if(enabled) {
00032 switch (op1) {
00033 case gt:
00034 case gtoeq:
00035 if (op2 != dis)
00036 ret=( matchesOp(val1,op1,a) && matchesOp(a,op2,val2) );
00037 else
00038 ret = matchesOp(val1,op1,a);
00039 break;
00040 case eq:
00041 case lt:
00042 case ltoeq:
00043 ret = matchesOp(val1,op1,a);
00044 break;
00045 default:
00046 ret = false;
00047 }
00048 }
00049
00050 return ret;
00051 }
00052
00053
00054
00055 bool KNode::RangeFilter::matchesOp( int v1, Op o, int v2 )
00056 {
00057 bool ret=false;
00058
00059 switch(o) {
00060 case eq: ret=(v1==v2); break;
00061 case gt: ret=(v1<v2); break;
00062 case gtoeq: ret=(v1<=v2); break;
00063 case ltoeq: ret=(v1>=v2); break;
00064 case lt: ret=(v1>v2); break;
00065 default: ret=false; break;
00066 };
00067
00068 return ret;
00069 }
00070
00071
00072
00073 void KNode::RangeFilter::load( const KConfigGroup &group )
00074 {
00075 enabled=group.readEntry("enabled", false);
00076 val1=group.readEntry("val1",0);
00077 op1=(Op) group.readEntry("op1",0);
00078 val2=group.readEntry("val2",0);
00079 op2=(Op) group.readEntry("op2",0);
00080 }
00081
00082
00083
00084 void KNode::RangeFilter::save( KConfigGroup &group )
00085 {
00086 group.writeEntry("enabled", enabled);
00087 group.writeEntry("val1", val1);
00088 group.writeEntry("op1", (int)op1);
00089 group.writeEntry("op2", (int)op2);
00090 group.writeEntry("val2", val2);
00091 }
00092
00093
00094
00095
00096
00097
00098 KNode::RangeFilterWidget::RangeFilterWidget( const QString& value, int min, int max,
00099 QWidget* parent, const QString &unit )
00100 : QGroupBox( value, parent )
00101 {
00102 QHBoxLayout *layout = new QHBoxLayout( this );
00103
00104 enabled = new QCheckBox( this );
00105 layout->addWidget( enabled );
00106
00107 val1 = new KIntSpinBox( min, max, 1, min, this );
00108 val1->setSuffix( unit );
00109 layout->addWidget( val1 );
00110
00111 op1 = new QComboBox( this );
00112 op1->addItem("<");
00113 op1->addItem("<=");
00114 op1->addItem("=");
00115 op1->addItem(">=");
00116 op1->addItem(">");
00117 layout->addWidget( op1 );
00118
00119 des = new QLabel( value, this );
00120 des->setAlignment( Qt::AlignCenter );
00121 layout->addWidget( des );
00122
00123 op2 = new QComboBox( this );
00124 op2->addItem("");
00125 op2->addItem("<");
00126 op2->addItem("<=");
00127 layout->addWidget( op2 );
00128
00129 val2 = new KIntSpinBox( min, max, 1, min, this );
00130 val2->setSuffix( unit );
00131 layout->addWidget( val2 );
00132
00133 connect(op1, SIGNAL(activated(int)), SLOT(slotOp1Changed(int)));
00134 connect(op2, SIGNAL(activated(int)), SLOT(slotOp2Changed(int)));
00135 connect(enabled, SIGNAL(toggled(bool)), SLOT(slotEnabled(bool)));
00136
00137 slotEnabled(false);
00138 }
00139
00140
00141
00142 KNode::RangeFilterWidget::~RangeFilterWidget()
00143 {
00144 }
00145
00146
00147
00148 RangeFilter KNode::RangeFilterWidget::filter()
00149 {
00150 RangeFilter r;
00151 r.val1=val1->value();
00152 r.val2=val2->value();
00153
00154 r.op1=(RangeFilter::Op) op1->currentIndex();
00155 if (op2->currentText().isEmpty())
00156 r.op2 = RangeFilter::dis;
00157 else if (op2->currentText()=="<")
00158 r.op2 = RangeFilter::gt;
00159 else if (op2->currentText()=="<=")
00160 r.op2 = RangeFilter::gtoeq;
00161
00162 r.enabled=enabled->isChecked();
00163
00164 return r;
00165 }
00166
00167
00168
00169 void KNode::RangeFilterWidget::setFilter( RangeFilter &f )
00170 {
00171 val1->setValue(f.val1);
00172 val2->setValue(f.val2);
00173
00174 op1->setCurrentIndex((int)f.op1);
00175 if ( f.op2 == RangeFilter::dis )
00176 op2->setCurrentIndex(0);
00177 else if ( f.op2 == RangeFilter::gt )
00178 op2->setCurrentIndex(1);
00179 else if ( f.op2 == RangeFilter::gtoeq )
00180 op2->setCurrentIndex(2);
00181
00182 enabled->setChecked(f.enabled);
00183 }
00184
00185
00186
00187 void KNode::RangeFilterWidget::clear()
00188 {
00189 val1->setValue(val1->minimum());
00190 val2->setValue(val2->minimum());
00191 enabled->setChecked(false);
00192 }
00193
00194
00195
00196 void KNode::RangeFilterWidget::slotOp1Changed( int id )
00197 {
00198 bool state = op1->isEnabled() && id < 2;
00199 op2->setEnabled(state);
00200 des->setEnabled(state);
00201 slotOp2Changed(op2->currentIndex());
00202 }
00203
00204
00205
00206 void KNode::RangeFilterWidget::slotOp2Changed( int id )
00207 {
00208 val2->setEnabled(op1->isEnabled() && (op1->currentIndex()<2) && (id>0));
00209 }
00210
00211
00212
00213 void KNode::RangeFilterWidget::slotEnabled( bool e )
00214 {
00215 op1->setEnabled(e);
00216 val1->setEnabled(e);
00217 des->setEnabled(e);
00218 slotOp1Changed(op1->currentIndex());
00219 }
00220
00221
00222
00223 #include "knrangefilter.moc"