File: kcalc_const_menu.cpp

package info (click to toggle)
kcalc 4%3A25.04.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,740 kB
  • sloc: cpp: 13,605; xml: 699; python: 49; makefile: 6; sh: 4
file content (121 lines) | stat: -rw-r--r-- 3,752 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
    SPDX-FileCopyrightText: 2001-2013 Evan Teran <evan.teran@gmail.com>
    SPDX-FileCopyrightText: 2003-2005 Klaus Niederkrueger <kniederk@math.uni-koeln.de>

    SPDX-License-Identifier: GPL-2.0-or-later
*/

#include "kcalc_const_menu.h"
#include "kcalc_debug.h"

#include <QDebug>
#include <QDomDocument>

#include <KLocalizedString>

namespace
{
QList<science_constant> scienceConstantList;

ConstantCategory stringToCategory(const QString &s)
{
    if (s == QLatin1String("mathematics")) {
        return Mathematics;
    }

    if (s == QLatin1String("electromagnetism")) {
        return Electromagnetic;
    }

    if (s == QLatin1String("nuclear")) {
        return Nuclear;
    }

    if (s == QLatin1String("thermodynamics")) {
        return Thermodynamics;
    }

    if (s == QLatin1String("gravitation")) {
        return Gravitation;
    }

    qCDebug(KCALC_LOG) << "Invalid Category For Constant: " << s;
    return Mathematics;
}

}

void KCalcConstMenu::init_consts(QDomDocument &doc)
{
    // print out the element names of all elements that are direct children
    // of the outermost element.
    QDomElement docElem = doc.documentElement();

    QDomNode n = docElem.firstChild();
    while (!n.isNull()) {
        QDomElement e = n.toElement(); // try to convert the node to an element.
        if (!e.isNull() && e.tagName() == QLatin1String("constant")) {
            science_constant tmp_const;

            tmp_const.name = e.attributeNode(QStringLiteral("name")).value();
            tmp_const.label = e.attributeNode(QStringLiteral("symbol")).value();
            tmp_const.value = e.attributeNode(QStringLiteral("value")).value();

            QString tmp_str_category = e.attributeNode(QStringLiteral("category")).value();

            tmp_const.category = stringToCategory(tmp_str_category);
            tmp_const.whatsthis = e.firstChildElement(QStringLiteral("description")).text();

            scienceConstantList.append(tmp_const);
        }
        n = n.nextSibling();
    }
}

void KCalcConstMenu::init_all()
{
    QMenu *math_menu = addMenu(i18n("Mathematics"));
    QMenu *em_menu = addMenu(i18n("Electromagnetism"));
    QMenu *nuclear_menu = addMenu(i18n("Atomic && Nuclear"));
    QMenu *thermo_menu = addMenu(i18n("Thermodynamics"));
    QMenu *gravitation_menu = addMenu(i18n("Gravitation"));

    connect(this, &KCalcConstMenu::triggered, this, &KCalcConstMenu::slotPassSignalThrough);

    for (int i = 0, total = scienceConstantList.size(); i < total; ++i) {
        const auto scienceConstantListItem = scienceConstantList.at(i);
        auto tmp_action = new QAction(i18n(scienceConstantListItem.name.toLatin1().data()), this);
        tmp_action->setData(QVariant(i));
        if (scienceConstantListItem.category & Mathematics)
            math_menu->addAction(tmp_action);
        if (scienceConstantListItem.category & Electromagnetic)
            em_menu->addAction(tmp_action);
        if (scienceConstantListItem.category & Nuclear)
            nuclear_menu->addAction(tmp_action);
        if (scienceConstantListItem.category & Thermodynamics)
            thermo_menu->addAction(tmp_action);
        if (scienceConstantListItem.category & Gravitation)
            gravitation_menu->addAction(tmp_action);
    }
}

void KCalcConstMenu::slotPassSignalThrough(QAction *chosen_const)
{
    bool tmp_bool;
    int chosen_const_idx = (chosen_const->data()).toInt(&tmp_bool);
    Q_EMIT triggeredConstant(scienceConstantList.at(chosen_const_idx));
}

KCalcConstMenu::KCalcConstMenu(const QString &title, QWidget *parent)
    : QMenu(title, parent)
{
    init_all();
}

KCalcConstMenu::KCalcConstMenu(QWidget *parent)
    : QMenu(parent)
{
    init_all();
}

#include "moc_kcalc_const_menu.cpp"