summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/oxygen/calcdlgui.cpp8
-rw-r--r--noncore/apps/oxygen/dataTable.cpp22
-rw-r--r--noncore/apps/oxygen/dataTable.h11
-rw-r--r--noncore/apps/oxygen/datawidgetui.cpp25
-rw-r--r--noncore/apps/oxygen/datawidgetui.h18
-rw-r--r--noncore/apps/oxygen/main.cpp8
-rw-r--r--noncore/apps/oxygen/oxyframe.cpp8
-rw-r--r--noncore/apps/oxygen/oxyframe.h7
-rw-r--r--noncore/apps/oxygen/oxygen.cpp8
-rw-r--r--noncore/apps/oxygen/psewidget.cpp8
-rw-r--r--noncore/apps/oxygen/psewidget.h7
11 files changed, 120 insertions, 10 deletions
diff --git a/noncore/apps/oxygen/calcdlgui.cpp b/noncore/apps/oxygen/calcdlgui.cpp
index e40e2c7..b6dfff3 100644
--- a/noncore/apps/oxygen/calcdlgui.cpp
+++ b/noncore/apps/oxygen/calcdlgui.cpp
@@ -1,57 +1,65 @@
/***************************************************************************
+ application: : Oxygen
+
+ begin : September 2002
+ copyright : ( C ) 2002 by Carsten Niehaus
+ email : cniehaus@handhelds.org
+ **************************************************************************/
+
+/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
#include "oxygen.h"
#include "calcdlgui.h"
#include "kmolcalc.h"
#include <qlineedit.h>
#include <qmultilineedit.h>
#include <qpushbutton.h>
calcDlgUI::calcDlgUI() : CalcDlg()
{
this->showMaximized();
kmolcalc = new KMolCalc;
connect( calculate, SIGNAL( clicked() ), this, SLOT( calc() ) );
connect( clear_fields, SIGNAL( clicked() ), this, SLOT( clear() ) );
result->setReadOnly( true );
}
void calcDlgUI::calc()
{
QString compound( formula->text() );
if ( compound.isEmpty() ) {
clear();
return;
}
QString errors( kmolcalc->readFormula( compound ) );
QString mw, ea;
double weight = kmolcalc->getWeight();
if ( errors == "OK" ) {
mw.setNum( weight );
ea = kmolcalc->getEmpFormula() + " :\n" + kmolcalc->getEA();
} else {
mw = "???";
ea = tr( "ERROR: \n" ) + errors + "\n";
}
result->setText( mw );
anal_display->setText( ea );
}
/**
* * Clear all text entry / result fields.
* */
void calcDlgUI::clear()
{
formula->clear();
result->clear();
anal_display->clear();
}
diff --git a/noncore/apps/oxygen/dataTable.cpp b/noncore/apps/oxygen/dataTable.cpp
index 70b5a6a..ff01417 100644
--- a/noncore/apps/oxygen/dataTable.cpp
+++ b/noncore/apps/oxygen/dataTable.cpp
@@ -1,102 +1,122 @@
/***************************************************************************
+ application: : Oxygen
+
+ begin : September 2002
+ copyright : ( C ) 2002 by Carsten Niehaus
+ email : cniehaus@handhelds.org
+ **************************************************************************/
+
+/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
#include <qpe/config.h>
#include "dataTable.h"
#include <qwidget.h>
#include <qhbox.h>
#include <qlabel.h>
#include <qfont.h>
#include <qlayout.h>
OxydataWidget::OxydataWidget(QWidget *parent) : QWidget(parent)
{
QGridLayout *qgrid = new QGridLayout( this, 2,1 );
+
QHBox *hbox = new QHBox( this );
left = new QLabel( hbox );
middle = new QLabel( hbox );
right = new QLabel( hbox );
- DataTable = new OxydataTable( 9,2, this );
+ right->setAlignment( AlignRight );
+ middle->setAlignment( AlignHCenter );
QFont bf;
bf.setBold( true );
bf.setPointSize( bf.pointSize()+2 );
middle->setFont( bf );
+ DataTable = new OxydataTable( 9,2, this );
+ DataTable->setColumnWidth ( 1 , 118 );
+ DataTable->setColumnWidth ( 0 , 118 );
setTable();
qgrid->addWidget( hbox,0,0 );
qgrid->addWidget( DataTable,1,0 );
}
void OxydataWidget::setElement( int el )
{
Config configobj( "oxygendata" );
configobj.setGroup( QString::number( el+1 ));
left->setText( configobj.readEntry( "Symbol" ) );
middle->setText( configobj.readEntry( "Name" ) );
right->setText( QString::number( el+1 ) );
DataTable->setText( 0,1,configobj.readEntry( "Weight" ) );
DataTable->setText( 1,1,configobj.readEntry( "Block" ) );
DataTable->setText( 2,1,configobj.readEntry( "Group" ) );
DataTable->setText( 3,1,configobj.readEntry( "EN" ) );
DataTable->setText( 4,1,configobj.readEntry( "AR" ) ) ;
DataTable->setText( 5,1,configobj.readEntry( "IE" ) );
DataTable->setText( 6,1,configobj.readEntry( "Density" ) );
DataTable->setText( 7,1,configobj.readEntry( "BP" ) );
DataTable->setText( 8,1,configobj.readEntry( "MP" ) );
}
void OxydataWidget::setTable() const
{
DataTable->setText( 0,0, tr( "Weight:" ) );
DataTable->setText( 1,0, tr( "Block" )) ;
DataTable->setText( 2,0, tr( "Group" )) ;
DataTable->setText( 3,0, tr( "Electronegativity" )) ;
DataTable->setText( 4,0, tr( "Atomic radius" )) ;
DataTable->setText( 5,0, tr( "Ionizationenergie" )) ;
DataTable->setText( 6,0, tr( "Density" )) ;
DataTable->setText( 7,0, tr( "Boilingpoint" ) );
DataTable->setText( 8,0, tr( "Meltingpoint" ) );
}
OxydataTable::OxydataTable(int numRows, int numCols, QWidget *parent,
const char *name) : QTable(numRows, numRows, parent, name)
{
this->setShowGrid( false );
this->setHScrollBarMode(QScrollView::AlwaysOff);
this->horizontalHeader()->hide();
this->verticalHeader()->hide();
this->setTopMargin( 0 );
this->setLeftMargin( 0 );
}
+int OxydataTable::alignment() const
+{
+ return AlignLeft | AlignVCenter;
+};
+
+
+
void OxydataTable::paintCell( QPainter *p, int row, int col, const QRect &cr, bool selected)
{
if ( cr.width() == 0 || cr.height() == 0 )
return;
selected = FALSE;
QTableItem *itm = item( row, col );
QColorGroup colgrp = colorGroup();
if ( itm )
{
if ( row%2 )
colgrp.setColor( QColorGroup::Base, QColor( 180,200,210 ) );
else
colgrp.setColor( QColorGroup::Base, QColor( 230,235,235 ) );
p->save();
itm->paint( p, colgrp, cr, selected );
p->restore();
}
}
diff --git a/noncore/apps/oxygen/dataTable.h b/noncore/apps/oxygen/dataTable.h
index ccc4300..00063d4 100644
--- a/noncore/apps/oxygen/dataTable.h
+++ b/noncore/apps/oxygen/dataTable.h
@@ -1,70 +1,81 @@
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
#ifndef _DATATABLE_H
#define _DATATABLE_H
#include <qwidget.h>
#include <qtable.h>
class QLabel;
class OxydataTable;
+class QTableItem;
/*
* A OxydataWidget shows all known data of an element. It can
* be used for both the PSE and the pure Data-Dialog. It is
* a simple QHBox with 2 QStrings in it plus a OxydataTable
* which contains the rest of the data.
*
* Author: Carsten Niehaus <cniehaus@handhelds.org>
*/
class OxydataWidget : public QWidget
{
Q_OBJECT
public:
OxydataWidget(QWidget *parent=0);
QLabel *left, *middle, *right;
private:
OxydataTable *DataTable;
void setTable() const;
public slots:
void setElement( int );
};
/*
* A OxydataTable is derived from QTable. I recoded the paintCell to have
* different colors in the backgound. Furthermore this widget never has a
* grid, thus I removed that code in paintCell.
*
* Author: Carsten Niehaus <cniehaus@handhelds.org>
*/
class OxydataTable : public QTable
{
Q_OBJECT
public:
OxydataTable( int numRows, int numCols,
QWidget *parent = 0, const char *name = 0 );
+ virtual int alignment() const;
+// virtual QTableItem *item( int row, int col ) const;
+
protected:
/*
* This method is reimplemented form QTable. It implements the colourisation
* of every second row.
*/
virtual void paintCell( QPainter *p, int row, int col, const QRect &cr, bool selected );
};
+//X class OxydataQTI : QTableItem
+//X {
+//X Q_OBJECT
+//X
+//X public:
+//X OxydataQTI(
+
#endif
diff --git a/noncore/apps/oxygen/datawidgetui.cpp b/noncore/apps/oxygen/datawidgetui.cpp
index 2e99c0b..4dab109 100644
--- a/noncore/apps/oxygen/datawidgetui.cpp
+++ b/noncore/apps/oxygen/datawidgetui.cpp
@@ -1,42 +1,51 @@
/***************************************************************************
+ application: : Oxygen
+
+ begin : September 2002
+ copyright : ( C ) 2002 by Carsten Niehaus
+ email : cniehaus@handhelds.org
+ **************************************************************************/
+
+/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
#include "datawidgetui.h"
+#include "dataTable.h"
#include <qpe/config.h>
#include <qstring.h>
#include <qcombobox.h>
#include <qlayout.h>
#include <qhbox.h>
#include <qlabel.h>
dataWidgetUI::dataWidgetUI() : QWidget()
{
this->setCaption( tr( "Chemical Data" ));
-
QGridLayout *qgrid = new QGridLayout( this, 2,1 );
dataCombo = new QComboBox( this );
- OxydataWidget *oxyDW = new OxydataWidget(this);
- oxyDW->setElement( 1 );
- qgrid->addWidget( dataCombo, 0,0);
- qgrid->addWidget( oxyDW , 1,0 );
-
- connect ( dataCombo, SIGNAL( activated(int) ), oxyDW, SLOT( setElement(int) ) );
- Config configobj( "oxygendata" );
//read in all names of the 118 elements
+ Config configobj( "oxygendata" );
for ( int i = 1 ; i < 119 ; i++ )
{
configobj.setGroup( QString::number( i ) );
QString foo = configobj.readEntry( "Name" );
dataCombo->insertItem( foo );
}
+
+ OxydataWidget *oxyDW = new OxydataWidget(this);
+ connect ( dataCombo, SIGNAL( activated(int) ), oxyDW, SLOT( setElement(int) ) );
+ oxyDW->setElement( 1 );
+
+ qgrid->addWidget( dataCombo, 0,0);
+ qgrid->addWidget( oxyDW , 1,0 );
}
diff --git a/noncore/apps/oxygen/datawidgetui.h b/noncore/apps/oxygen/datawidgetui.h
index 5399c81..cd716ad 100644
--- a/noncore/apps/oxygen/datawidgetui.h
+++ b/noncore/apps/oxygen/datawidgetui.h
@@ -1,25 +1,41 @@
+#ifndef DATAWIDGETUI_H
+#define DATAWIDGETUI_H
+
+
+/***************************************************************************
+ application: : Oxygen
+
+ begin : September 2002
+ copyright : ( C ) 2002 by Carsten Niehaus
+ email : cniehaus@handhelds.org
+ **************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
-#include "dataTable.h"
+
+
+class OxydataWidget;
+class OxydataTable;
class QComboBox;
+#include <qwidget.h>
class dataWidgetUI : public QWidget
{
Q_OBJECT
public:
dataWidgetUI();
private:
OxydataTable *DataTable;
QComboBox *dataCombo;
OxydataWidget *oxyDW;
};
+#endif
diff --git a/noncore/apps/oxygen/main.cpp b/noncore/apps/oxygen/main.cpp
index 31e44dc..c8fcdb4 100644
--- a/noncore/apps/oxygen/main.cpp
+++ b/noncore/apps/oxygen/main.cpp
@@ -1,21 +1,29 @@
/***************************************************************************
+ application: : Oxygen
+
+ begin : September 2002
+ copyright : ( C ) 2002 by Carsten Niehaus
+ email : cniehaus@handhelds.org
+ **************************************************************************/
+
+/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
#include <qpe/qpeapplication.h>
#include "oxygen.h"
int main(int argc, char **argv)
{
QPEApplication app(argc, argv);
Oxygen *oxi = new Oxygen();
app.setMainWidget(oxi);
oxi->showMaximized();
return app.exec();
}
diff --git a/noncore/apps/oxygen/oxyframe.cpp b/noncore/apps/oxygen/oxyframe.cpp
index a5f262e..c61c8e5 100644
--- a/noncore/apps/oxygen/oxyframe.cpp
+++ b/noncore/apps/oxygen/oxyframe.cpp
@@ -1,25 +1,33 @@
/***************************************************************************
+ application: : Oxygen
+
+ begin : September 2002
+ copyright : ( C ) 2002 by Carsten Niehaus
+ email : cniehaus@handhelds.org
+ **************************************************************************/
+
+/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
#include "oxygen.h"
#include <qpe/config.h>
#include "oxyframe.h"
OxyFrame::OxyFrame(QWidget *parent, const char *name) : QFrame(parent,name)
{
N = name;
this->setFrameStyle( QFrame::Box );
this->setLineWidth( 0 );
this->setMidLineWidth( 1 );
this->setFrameShadow( QFrame::Sunken );
}
void OxyFrame::mousePressEvent ( QMouseEvent * e ){
emit num( N );
};
diff --git a/noncore/apps/oxygen/oxyframe.h b/noncore/apps/oxygen/oxyframe.h
index a19f13c..4543504 100644
--- a/noncore/apps/oxygen/oxyframe.h
+++ b/noncore/apps/oxygen/oxyframe.h
@@ -1,34 +1,41 @@
+/***************************************************************************
+ application: : Oxygen
+
+ begin : September 2002
+ copyright : ( C ) 2002 by Carsten Niehaus
+ email : cniehaus@handhelds.org
+ **************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
#ifndef _OXYFRAME_H
#define _OXYFRAME_H
#include <qframe.h>
class OxyFrame : public QFrame
{
Q_OBJECT
public:
OxyFrame( QWidget *parent=0, const char *name=0);
void mousePressEvent( QMouseEvent *);
QString N;
signals:
/*
* this signal emits the name ( the elemen-number )
*/
void num(QString);
};
#endif
diff --git a/noncore/apps/oxygen/oxygen.cpp b/noncore/apps/oxygen/oxygen.cpp
index 4e293c7..b3392e1 100644
--- a/noncore/apps/oxygen/oxygen.cpp
+++ b/noncore/apps/oxygen/oxygen.cpp
@@ -1,59 +1,67 @@
/***************************************************************************
+ application: : Oxygen
+
+ begin : September 2002
+ copyright : ( C ) 2002 by Carsten Niehaus
+ email : cniehaus@handhelds.org
+ **************************************************************************/
+
+/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
#include "oxygen.h"
#include <qlabel.h>
#include <qapplication.h>
#include <qpushbutton.h>
#include <qvbox.h>
#include "calcdlg.h"
#include "calcdlgui.h"
#include "datawidgetui.h"
#include "psewidget.h"
Oxygen::Oxygen()
: QMainWindow()
{
this->setCaption( tr( "Oxygen" ) );
vbox = new QVBox( this );
QPushButton *dataButton = new QPushButton( "Data", vbox );
connect ( dataButton, SIGNAL( clicked() ), this, SLOT( slotData() ) );
QPushButton *calcButton = new QPushButton( "Calculations", vbox );
connect ( calcButton, SIGNAL( clicked() ), this, SLOT( slotCalculations() ) );
QPushButton *pseButton = new QPushButton( "PSE", vbox );
connect ( pseButton, SIGNAL( clicked() ), this, SLOT( slotPSE() ) );
setCentralWidget( vbox );
}
void Oxygen::close() const
{
QApplication::exit();
}
//SLOTS
void Oxygen::slotCalculations() const{
calcDlgUI *CalcDlgUI = new calcDlgUI();
CalcDlgUI->show();
};
void Oxygen::slotData() const{
dataWidgetUI *DataWidgetUI = new dataWidgetUI();
DataWidgetUI->showMaximized();
DataWidgetUI->show();
};
void Oxygen::slotPSE() const{
PSEWidget *pse = new PSEWidget();
pse->showMaximized();
pse->show();
};
diff --git a/noncore/apps/oxygen/psewidget.cpp b/noncore/apps/oxygen/psewidget.cpp
index 78e54d5..a3bb505 100644
--- a/noncore/apps/oxygen/psewidget.cpp
+++ b/noncore/apps/oxygen/psewidget.cpp
@@ -1,166 +1,174 @@
/***************************************************************************
+ application: : Oxygen
+
+ begin : September 2002
+ copyright : ( C ) 2002 by Carsten Niehaus
+ email : cniehaus@handhelds.org
+ **************************************************************************/
+
+/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
#include <qpe/config.h>
#include <qlayout.h>
#include <qlist.h>
#include "dataTable.h"
#include "psewidget.h"
#include "oxyframe.h"
PSEWidget::PSEWidget() : QWidget()
{
this->setCaption( tr( "Periodic System" ) );
QVBoxLayout *vlay = new QVBoxLayout( this );
QGridLayout *grid = new QGridLayout( 18,10 );
int h=0, v=0;
Config configobj( "oxygendata" );
for( int n = 0 ; n < 118 ; n++ )
{
configobj.setGroup( QString::number( n+1 ));
position( n+1,h,v );
QList<OxyFrame> PSEframe;
PSEframe.append( new OxyFrame( this , QString::number(n) ) );
grid->addWidget( PSEframe.current() , v/40+1 , h/40 );
PSEframe.current()->setMinimumHeight( 11 );
PSEframe.current()->setPalette( QPalette( PSEColor( configobj.readEntry( "Block" ) ) ) );
connect( PSEframe.current(), SIGNAL( num(QString) ), this, SLOT( slotShowElement(QString) ));
}
oxyDW = new OxydataWidget(this);
oxyDW->setElement( 1 );
vlay->addLayout( grid );
vlay->addWidget( oxyDW );
}
QColor PSEWidget::PSEColor( QString block )
{
QColor c;
if ( block == "s" ) c.setRgb( 213 , 233 , 231 );
else if ( block == "d" ) c.setRgb( 200,230,160 );
else if ( block == "p" ) c.setRgb( 238,146,138 );
else if ( block == "f" ) c.setRgb( 190 , 190 , 190 );
return c;
};
void PSEWidget::slotShowElement(QString number)
{
oxyDW->setElement( number.toInt() );
};
void PSEWidget::position(int n, int& h, int& v)
{
//Hydrogen
if (n == 1)
{
h=0; v=0;
}
//Helium
if (n == 2)
{
h=680; v=0;
}
//Lithium
if (n == 3)
{
h=0; v=40;
}
//Beryllium
if (n == 4)
{
h=40; v=40;
}
//Boron-->Neon or Aluminum --> Argon
if ((n >= 5 && n <= 10) || (n >= 13 && n <= 18))
for (int i = 1; i <= (6-(10-n)); i++)
{
h=((i*40)+440);
v = 40;
if (n >= 13)
{
v=80;
h=(h-320);
}
}
//Sodium
if (n == 11)
{
h=0; v=80;
}
//Magnesium
if (n == 12)
{
h=40; v=80;
}
//Potassium --> Uuo without La and Ac
if ((n >= 19 && n <= 56) || (n >= 72 && n <= 88) || n >= 104)
for (int i = 1; i <= 18; i++)
{
int f = n;
if (n > 18)
f = n-18;
if (n > 36)
f = n-36;
if (n > 54)
f = n-54;
if (n > 71)
f = n-68;
if (n > 86)
f = n-86;
if (n > 103)
f = n-100;
h=((f*40)-40);
v = 120;
if (n >= 37)
v=160;
if (n >= 55)
v=200;
if (n >= 87)
v=240;
}
//Lanthanum --> Lutetium and Actinum --> Lawrencium
if ((n >= 57 && n <= 71) || (n >= 89 && n <= 103))
for (int i = 1; i <= 14; i++)
{
int f = n;
if (n > 56)
f = n-55;
if (n > 88)
f = n-87;
h=(f*40);
v = 290;
if (n >= 89)
v=330;
}
v += 10;
}
diff --git a/noncore/apps/oxygen/psewidget.h b/noncore/apps/oxygen/psewidget.h
index f69eeb3..fdf838e 100644
--- a/noncore/apps/oxygen/psewidget.h
+++ b/noncore/apps/oxygen/psewidget.h
@@ -1,38 +1,45 @@
+/***************************************************************************
+ application: : Oxygen
+
+ begin : September 2002
+ copyright : ( C ) 2002 by Carsten Niehaus
+ email : cniehaus@handhelds.org
+ **************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* ( at your option ) any later version. *
* *
**************************************************************************/
#ifndef _PSEWIDGET_H
#define _PSEWIDGET_H
#include <qwidget.h>
class QGridLayout;
class OxydataWidget;
class PSEWidget : public QWidget
{
Q_OBJECT
public:
PSEWidget();
QGridLayout *bottom_grid;
OxydataWidget *oxyDW;
private:
QGridLayout *maingrid;
void position( int, int&, int& );
QColor PSEColor( QString );
public slots:
void slotShowElement(QString);
};
#endif