1 /***************************************************************************
3 elementdataviewer.cpp - description
5 copyright : (C) 2004 by Carsten Niehaus
6 email : cniehaus@kde.org
7 ***************************************************************************/
9 /***************************************************************************
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
16 ***************************************************************************/
18 #include "elementdataviewer.h"
19 #include "plotsetupwidget.h"
21 #include <knuminput.h>
22 #include <kcombobox.h>
28 #include <qcheckbox.h>
30 ElementDataViewer::ElementDataViewer( KalziumDataObject
*data
, QWidget
*parent
, const char* name
)
31 : KDialogBase( KDialogBase::Plain
,
32 i18n( "Visualize Data") ,
37 kdDebug() << "ElementDataViewer" << endl
;
41 yData
= new AxisData();
43 QFrame
*page
= plainPage();
44 QHBoxLayout
*hlay
= new QHBoxLayout(page
, 0, spacingHint() );
45 QVBoxLayout
*vlay
= new QVBoxLayout(hlay
, 0 );
46 m_pPlotSetupWidget
= new PlotSetupWidget( page
, "psw" );
47 m_pPlotWidget
= new PlotWidget( 0.0,12.0,0.0,22.0, page
, "plotwidget" );
49 hlay
->addWidget( m_pPlotSetupWidget
);
50 vlay
->addWidget( m_pPlotWidget
);
53 * setup the list of names
55 EList::iterator it
= d
->ElementList
.begin();
56 for( ; it
!= d
->ElementList
.end() ; ++it
)
58 names
.append( (*it
)->elname() );
63 setButtonText( User1
, i18n("&Plot") );
65 connect ( m_pPlotSetupWidget
->showNames
, SIGNAL( toggled(bool)), this, SLOT(slotUser1()));
68 void ElementDataViewer::slotUser1()
70 kdDebug() << "slotUser1" << endl
;
75 void ElementDataViewer::setLimits(int f
, int t
)
77 kdDebug() << "setLimits()" << endl
;
79 double minY
= yData
->value(f
);
80 double maxY
= yData
->value(f
);
85 while( _currentVal
< _to
)
87 double v
= yData
->value( _currentVal
);
97 m_pPlotWidget
->setLimits( (double)f
, (double)t
, minY
, maxY
);
100 void ElementDataViewer::paintEvent(QPaintEvent
*)
102 m_pPlotWidget
->update();
105 void ElementDataViewer::keyPressEvent(QKeyEvent
*e
)
123 void ElementDataViewer::slotZoomIn(){}
124 void ElementDataViewer::slotZoomOut(){}
126 void ElementDataViewer::setupAxisData()
128 kdDebug() << "setupAxisData()" << endl
;
132 const int selectedData
= m_pPlotSetupWidget
->KCB_y
->currentItem();
134 //this should be somewhere else, eg in its own method
135 yData
->m_currentDataType
= selectedData
;
137 EList::iterator it
= d
->ElementList
.begin();
140 case AxisData::WEIGHT
:
141 for( ; it
!= d
->ElementList
.end() ; ++it
) {
142 double value
= (*it
)->weight();
147 m_pPlotWidget
->setYAxisLabel(i18n("Atomic Weight [u]"));
150 case AxisData::MEANWEIGHT
:
151 for( ; it
!= d
->ElementList
.end() ; ++it
) {
152 double value
=(*it
)->meanweight();
157 m_pPlotWidget
->setYAxisLabel(i18n("Mean Weight [u]"));
160 case AxisData::DENSITY
:
161 for( ; it
!= d
->ElementList
.end() ; ++it
) {
162 double value
=(*it
)->density();
167 m_pPlotWidget
->setYAxisLabel(i18n("Density"));
171 for( ; it
!= d
->ElementList
.end() ; ++it
) {
172 double value
= (*it
)->ie();
177 m_pPlotWidget
->setYAxisLabel(i18n("1. Ionization Energy"));
181 for( ; it
!= d
->ElementList
.end() ; ++it
) {
182 double value
= (*it
)->ie2();
187 m_pPlotWidget
->setYAxisLabel(i18n("2. Ionization Energy"));
191 for( ; it
!= d
->ElementList
.end() ; ++it
) {
192 double value
= (*it
)->electroneg();
197 m_pPlotWidget
->setYAxisLabel(i18n("Electronegativity"));
200 case AxisData::MELTINGPOINT
:
201 for( ; it
!= d
->ElementList
.end() ; ++it
) {
202 double value
= (*it
)->melting();
207 m_pPlotWidget
->setYAxisLabel(i18n("Melting Point [K]"));
210 case AxisData::BOILINGPOINT
:
211 for( ; it
!= d
->ElementList
.end() ; ++it
) {
212 double value
= (*it
)->electroneg();
217 m_pPlotWidget
->setYAxisLabel(i18n("Boiling Point [K]"));
220 case AxisData::ATOMICRADIUS
:
221 for( ; it
!= d
->ElementList
.end() ; ++it
) {
222 double value
= (*it
)->radius();
227 m_pPlotWidget
->setYAxisLabel(i18n("Atomic Radius [pm]"));
232 yData
->setDataList( l
);
235 void ElementDataViewer::drawPlot()
237 kdDebug() << "drawPlot()" << endl
;
240 * to be 100% safe delete the old list
242 m_pPlotWidget
->clearObjectList();
245 * spare the next step in case everything is already set and done
247 if( yData
->currentDataType() != m_pPlotSetupWidget
->KCB_y
->currentItem() )
251 * if the user selected the elements 20 to 30 the list-values are 19 to 29!!!
253 int from
= m_pPlotSetupWidget
->from
->value();
254 int to
= m_pPlotSetupWidget
->to
->value();
255 kdDebug() << "from :" << from
<< endl
;
256 kdDebug() << "to :" << to
<< endl
;
259 * The number of elements. #20 to 30 are 30-20+1=11 Elements
266 * check if the users wants to see the elementnames or not
268 bool showNames
= m_pPlotSetupWidget
->showNames
->isChecked();
269 bool connectPoints
= m_pPlotSetupWidget
->connectPoints
->isChecked();
273 m_pPlotWidget
->setConnection( true );
274 kdDebug() << "setConnection ist wahr" << endl
;
278 m_pPlotWidget
->setConnection( false );
279 kdDebug() << "setConnection ist falsch" << endl
;
283 * reserve the memory for the KPlotObjects
285 QMemArray
<KPlotObject
*> dataPoint(num
);
286 QMemArray
<KPlotObject
*> dataPointLabel(num
);
291 * iterate for example from element 20 to 30 and contruct
294 kdDebug() << "start the plotting with creating the KPlotObjects" << endl
;
295 for( int i
= from
; i
< to
+1 ; i
++ )
297 dataPoint
[number
] = new KPlotObject( "whocares", "Blue", KPlotObject::POINTS
, 4, KPlotObject::CIRCLE
);
298 dataPoint
[number
]->addPoint( new DPoint( (double)i
, yData
->value( i
) ) );
299 m_pPlotWidget
->addObject( dataPoint
[ number
] );
303 dataPointLabel
[number
] = new KPlotObject( *(names
.at(i
)), "Red", KPlotObject::LABEL
);
304 dataPointLabel
[number
]->addPoint( new DPoint( (double)i
, yData
->value( i
) ) );
305 m_pPlotWidget
->addObject( dataPointLabel
[number
] );
310 kdDebug() << "plotting ended" << endl
;
313 void ElementDataViewer::initData()
315 kdDebug() << "initData()" << endl
;
320 ///////////////////////////////////////////////7
325 #include "elementdataviewer.moc"