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"