File indexing completed on 2024-04-21 05:50:05

0001 /*
0002     SPDX-FileCopyrightText: 2001-2013 Evan Teran <evan.teran@gmail.com>
0003     SPDX-FileCopyrightText: 2003-2005 Klaus Niederkrueger <kniederk@math.uni-koeln.de>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "kcalc_const_menu.h"
0009 
0010 #include <QDebug>
0011 #include <QDomDocument>
0012 
0013 #include <KLocalizedString>
0014 
0015 namespace
0016 {
0017 QList<science_constant> scienceConstantList;
0018 
0019 ConstantCategory stringToCategory(const QString &s)
0020 {
0021     if (s == QLatin1String("mathematics")) {
0022         return Mathematics;
0023     }
0024 
0025     if (s == QLatin1String("electromagnetism")) {
0026         return Electromagnetic;
0027     }
0028 
0029     if (s == QLatin1String("nuclear")) {
0030         return Nuclear;
0031     }
0032 
0033     if (s == QLatin1String("thermodynamics")) {
0034         return Thermodynamics;
0035     }
0036 
0037     if (s == QLatin1String("gravitation")) {
0038         return Gravitation;
0039     }
0040 
0041     qDebug() << "Invalid Category For Constant: " << s;
0042     return Mathematics;
0043 }
0044 
0045 }
0046 
0047 void KCalcConstMenu::init_consts(QDomDocument &doc)
0048 {
0049     // print out the element names of all elements that are direct children
0050     // of the outermost element.
0051     QDomElement docElem = doc.documentElement();
0052 
0053     QDomNode n = docElem.firstChild();
0054     while (!n.isNull()) {
0055         QDomElement e = n.toElement(); // try to convert the node to an element.
0056         if (!e.isNull() && e.tagName() == QLatin1String("constant")) {
0057             science_constant tmp_const;
0058 
0059             tmp_const.name = e.attributeNode(QStringLiteral("name")).value();
0060             tmp_const.label = e.attributeNode(QStringLiteral("symbol")).value();
0061             tmp_const.value = e.attributeNode(QStringLiteral("value")).value();
0062 
0063             QString tmp_str_category = e.attributeNode(QStringLiteral("category")).value();
0064 
0065             tmp_const.category = stringToCategory(tmp_str_category);
0066             tmp_const.whatsthis = e.firstChildElement(QStringLiteral("description")).text();
0067 
0068             scienceConstantList.append(tmp_const);
0069         }
0070         n = n.nextSibling();
0071     }
0072 }
0073 
0074 void KCalcConstMenu::init_all()
0075 {
0076     QMenu *math_menu = addMenu(i18n("Mathematics"));
0077     QMenu *em_menu = addMenu(i18n("Electromagnetism"));
0078     QMenu *nuclear_menu = addMenu(i18n("Atomic && Nuclear"));
0079     QMenu *thermo_menu = addMenu(i18n("Thermodynamics"));
0080     QMenu *gravitation_menu = addMenu(i18n("Gravitation"));
0081 
0082     connect(this, &KCalcConstMenu::triggered, this, &KCalcConstMenu::slotPassSignalThrough);
0083 
0084     for (int i = 0, total = scienceConstantList.size(); i < total; ++i) {
0085         const auto scienceConstantListItem = scienceConstantList.at(i);
0086         auto tmp_action = new QAction(i18n(scienceConstantListItem.name.toLatin1().data()), this);
0087         tmp_action->setData(QVariant(i));
0088         if (scienceConstantListItem.category & Mathematics)
0089             math_menu->addAction(tmp_action);
0090         if (scienceConstantListItem.category & Electromagnetic)
0091             em_menu->addAction(tmp_action);
0092         if (scienceConstantListItem.category & Nuclear)
0093             nuclear_menu->addAction(tmp_action);
0094         if (scienceConstantListItem.category & Thermodynamics)
0095             thermo_menu->addAction(tmp_action);
0096         if (scienceConstantListItem.category & Gravitation)
0097             gravitation_menu->addAction(tmp_action);
0098     }
0099 }
0100 
0101 void KCalcConstMenu::slotPassSignalThrough(QAction *chosen_const)
0102 {
0103     bool tmp_bool;
0104     int chosen_const_idx = (chosen_const->data()).toInt(&tmp_bool);
0105     Q_EMIT triggeredConstant(scienceConstantList.at(chosen_const_idx));
0106 }
0107 
0108 KCalcConstMenu::KCalcConstMenu(const QString &title, QWidget *parent)
0109     : QMenu(title, parent)
0110 {
0111     init_all();
0112 }
0113 
0114 KCalcConstMenu::KCalcConstMenu(QWidget *parent)
0115     : QMenu(parent)
0116 {
0117     init_all();
0118 }
0119 
0120 #include "moc_kcalc_const_menu.cpp"