/*************************************************************************** * Copyright (C) 2005 by Niklas Knutsson * * nq@altern.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. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "qalculateperiodictabledialog.h" #include "qalculate_tde_utils.h" #include #include #include #include #include #include #include #include #include "qalculatebuttonwithdata.h" #include #include #include #include extern PrintOptions printops; extern QWidget *expressionWidget; QalculatePeriodicTableDialog::QalculatePeriodicTableDialog(QWidget *parent, const char *name) : KDialogBase(parent, name, false, i18n("Periodic Table"), Close, Close, true) { actionButton(Close)->setAutoDefault(false); actionButton(Close)->setDefault(false); grid = new QGridLayout(makeMainWidget(), 11, 20, 0, 1); grid->addWidget(new QLabel("1", mainWidget()), 0, 1, Qt::AlignHCenter); grid->addWidget(new QLabel("2", mainWidget()), 0, 2, Qt::AlignHCenter); grid->addWidget(new QLabel("3", mainWidget()), 0, 4, Qt::AlignHCenter); grid->addWidget(new QLabel("4", mainWidget()), 0, 5, Qt::AlignHCenter); grid->addWidget(new QLabel("5", mainWidget()), 0, 6, Qt::AlignHCenter); grid->addWidget(new QLabel("6", mainWidget()), 0, 7, Qt::AlignHCenter); grid->addWidget(new QLabel("7", mainWidget()), 0, 8, Qt::AlignHCenter); grid->addWidget(new QLabel("8", mainWidget()), 0, 9, Qt::AlignHCenter); grid->addWidget(new QLabel("9", mainWidget()), 0, 10, Qt::AlignHCenter); grid->addWidget(new QLabel("10", mainWidget()), 0, 11, Qt::AlignHCenter); grid->addWidget(new QLabel("11", mainWidget()), 0, 12, Qt::AlignHCenter); grid->addWidget(new QLabel("12", mainWidget()), 0, 13, Qt::AlignHCenter); grid->addWidget(new QLabel("13", mainWidget()), 0, 14, Qt::AlignHCenter); grid->addWidget(new QLabel("14", mainWidget()), 0, 15, Qt::AlignHCenter); grid->addWidget(new QLabel("15", mainWidget()), 0, 16, Qt::AlignHCenter); grid->addWidget(new QLabel("16", mainWidget()), 0, 17, Qt::AlignHCenter); grid->addWidget(new QLabel("17", mainWidget()), 0, 18, Qt::AlignHCenter); grid->addWidget(new QLabel("18", mainWidget()), 0, 19, Qt::AlignHCenter); grid->addWidget(new QLabel("1 ", mainWidget()), 1, 0, Qt::AlignRight); grid->addWidget(new QLabel("2 ", mainWidget()), 2, 0, Qt::AlignRight); grid->addWidget(new QLabel("3 ", mainWidget()), 3, 0, Qt::AlignRight); grid->addWidget(new QLabel("4 ", mainWidget()), 4, 0, Qt::AlignRight); grid->addWidget(new QLabel("5 ", mainWidget()), 5, 0, Qt::AlignRight); grid->addWidget(new QLabel("6 ", mainWidget()), 6, 0, Qt::AlignRight); grid->addWidget(new QLabel("7 ", mainWidget()), 7, 0, Qt::AlignRight); grid->addWidget(new QLabel("*", mainWidget()), 6, 3, Qt::AlignRight); grid->addWidget(new QLabel("**", mainWidget()), 7, 3, Qt::AlignRight); grid->addWidget(new QLabel("*", mainWidget()), 9, 3, Qt::AlignRight); grid->addWidget(new QLabel("**", mainWidget()), 10, 3, Qt::AlignRight); grid->addWidget(new QLabel(" ", mainWidget()), 8, 0); DataSet *dc = CALCULATOR->getDataSet("atom"); if(!dc) { return; } DataObject *e; QalculateButtonWithData *e_button; QString tip; DataProperty *p_xpos = dc->getProperty("x_pos"); DataProperty *p_ypos = dc->getProperty("y_pos"); DataProperty *p_weight = dc->getProperty("weight"); DataProperty *p_number = dc->getProperty("number"); DataProperty *p_symbol = dc->getProperty("symbol"); DataProperty *p_class = dc->getProperty("class"); DataProperty *p_name = dc->getProperty("name"); int x_pos = 0, y_pos = 0, group = 0; QString weight; int w = -1; for(size_t i = 1; i < 120; i++) { e = dc->getObject(i2s(i)); if(e) { x_pos = s2i(e->getProperty(p_xpos)); y_pos = s2i(e->getProperty(p_ypos)); } if(e && x_pos > 0 && x_pos <= 18 && y_pos > 0 && y_pos <= 10) { e_button = new QalculateButtonWithData((void*) e, e->getProperty(p_symbol).c_str(), mainWidget()); e_button->setFlat(true); group = s2i(e->getProperty(p_class)); switch(group) { case 1: { e_button->setPaletteBackgroundColor(QColor(0xee, 0xcc, 0xee)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } case 2: { e_button->setPaletteBackgroundColor(QColor(0xdd, 0xcc, 0xee)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } case 3: { e_button->setPaletteBackgroundColor(QColor(0xdd, 0xdd, 0xff)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } case 4: { e_button->setPaletteBackgroundColor(QColor(0xdd, 0xee, 0xff)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } case 5: { e_button->setPaletteBackgroundColor(QColor(0xcc, 0xee, 0xee)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } case 6: { e_button->setPaletteBackgroundColor(QColor(0xbb, 0xff, 0xbb)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } case 7: { e_button->setPaletteBackgroundColor(QColor(0xee, 0xff, 0xdd)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } case 8: { e_button->setPaletteBackgroundColor(QColor(0xff, 0xff, 0xaa)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } case 9: { e_button->setPaletteBackgroundColor(QColor(0xff, 0xdd, 0xaa)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } case 10: { e_button->setPaletteBackgroundColor(QColor(0xff, 0xcc, 0xdd)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } case 11: { e_button->setPaletteBackgroundColor(QColor(0xaa, 0xee, 0xdd)); e_button->setPaletteForegroundColor(QColor(0, 0, 0)); break; } } if(w < 0) { w = e_button->fontMetrics().width("Uuo") + 12; } e_button->setFixedWidth(w); e_button->setFixedHeight(w); if(x_pos > 2) { grid->addWidget(e_button, y_pos, x_pos + 1); } else { grid->addWidget(e_button, y_pos, x_pos); } tip = e->getProperty(p_number).c_str(); tip += " "; tip += e->getProperty(p_name).c_str(); weight = e->getPropertyDisplayString(p_weight).c_str(); if(!weight.isEmpty() && weight != "-") { tip += "\n"; tip += weight; } QToolTip::add(e_button, tip); QObject::connect(e_button, SIGNAL(clickedWithData(void*)), this, SLOT(showElementInfo(void*))); } } } QalculatePeriodicTableDialog::~QalculatePeriodicTableDialog() {} void QalculatePeriodicTableDialog::showElementInfo(void *e) { DataObject *o = (DataObject*) e; QalculateElementInfoDialog *dialog = new QalculateElementInfoDialog(o, this); dialog->show(); } QalculateElementInfoDialog::QalculateElementInfoDialog(DataObject *element, QWidget *parent, const char *name) : KDialogBase(parent, name, false, i18n("Element Data"), Close, Close, true) { setWFlags(getWFlags() | Qt::WDestructiveClose); e = element; DataSet *ds = e->parentSet(); if(!ds) { close(); return; } QVBox *vbox = makeVBoxMainWidget(); QVBox *vbox2 = new QVBox(vbox); DataProperty *p_number = ds->getProperty("number"); DataProperty *p_symbol = ds->getProperty("symbol"); DataProperty *p_class = ds->getProperty("class"); DataProperty *p_name = ds->getProperty("name"); QString str = "
"; str += e->getProperty(p_number).c_str(); str += "
"; new KActiveLabel(str, vbox2); str = ""; str += e->getProperty(p_symbol).c_str(); str += ""; new KActiveLabel(str, vbox2); str = ""; str += e->getProperty(p_name).c_str(); str += " "; new KActiveLabel(str, vbox2); QalculateButtonWithData *button; QGrid *grid = new QGrid(3, Qt::Horizontal, vbox); int group = s2i(e->getProperty(p_class)); if(group > 0) { str = ""; str += i18n("Classification"); str += ":"; str += ""; new QLabel(str, grid); switch(group) { case ALKALI_METALS: {str = i18n("Alkali Metal"); break;} case ALKALI_EARTH_METALS: {str = i18n("Alkaline-Earth Metal"); break;} case LANTHANIDES: {str = i18n("Lanthanide"); break;} case ACTINIDES: {str = i18n("Actinide"); break;} case TRANSITION_METALS: {str = i18n("Transition Metal"); break;} case METALS: {str = i18n("Metal"); break;} case METALLOIDS: {str = i18n("Metalloid"); break;} case NONMETALS: {str = i18n("Non-Metal"); break;} case HALOGENS: {str = i18n("Halogen"); break;} case NOBLE_GASES: {str = i18n("Noble Gas"); break;} case TRANSACTINIDES: {str = i18n("Transactinide"); break;} default: {str = i18n("Unknown"); break;} } new KActiveLabel(str, grid); new QFrame(grid); } DataPropertyIter it; DataProperty *dp = ds->getFirstProperty(&it); QString sval; while(dp) { if(!dp->isHidden() && dp != p_number && dp != p_class && dp != p_symbol && dp != p_name) { sval = e->getPropertyDisplayString(dp).c_str(); if(!sval.isEmpty()) { str = ""; str += dp->title().c_str(); str += ":"; str += ""; new QLabel(str, grid); new KActiveLabel(sval, grid); button = new QalculateButtonWithData((void*) dp, QIconSet(SmallIcon("editpaste")), "", grid); QObject::connect(button, SIGNAL(clickedWithData(void*)), SLOT(insertElementData(void*))); } } dp = ds->getNextProperty(&it); } } QalculateElementInfoDialog::~QalculateElementInfoDialog() {} void QalculateElementInfoDialog::insertElementData(void *data) { DataProperty *dp = (DataProperty*) data; DataSet *ds = dp->parentSet(); if(ds) { QString str = ds->preferredInputName(printops.abbreviate_names, printops.use_unicode_signs, false, false, &can_display_unicode_string_function, (void*) expressionWidget).name.c_str(); str += "("; str += e->getProperty(ds->getPrimaryKeyProperty()).c_str(); str += CALCULATOR->getComma().c_str(); str += " "; str += dp->getName().c_str(); str += ")"; insert_text_in_expression(str); } } #include "qalculateperiodictabledialog.moc"