File indexing completed on 2024-04-21 03:41:37
0001 /* 0002 SPDX-FileCopyrightText: 2009 Kashyap R Puranik <kashthealien@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "calculator.h" 0008 0009 #include "kalzium_debug.h" 0010 #include <QDialogButtonBox> 0011 #include <QIcon> 0012 #include <QPushButton> 0013 #include <QVBoxLayout> 0014 0015 #include <KHelpClient> 0016 #include <KLocalizedString> 0017 0018 calculator::calculator(QWidget *parent) 0019 : QDialog(parent) 0020 { 0021 setWindowTitle(i18nc("@title:window", "Chemical Calculator")); 0022 auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Help | QDialogButtonBox::Close, this); 0023 auto mainWidget = new QWidget(this); 0024 auto mainLayout = new QVBoxLayout(this); 0025 mainLayout->addWidget(mainWidget); 0026 connect(buttonBox, &QDialogButtonBox::accepted, this, &calculator::accept); 0027 connect(buttonBox, &QDialogButtonBox::rejected, this, &calculator::reject); 0028 mainLayout->addWidget(buttonBox); 0029 buttonBox->button(QDialogButtonBox::Close)->setDefault(true); 0030 0031 ui.setupUi(mainWidget); 0032 0033 int maxTextWidth = 0; 0034 QStyleOptionViewItem option; 0035 option.initFrom(ui.tree); 0036 for (int i = 0; i < ui.tree->topLevelItemCount(); ++i) { 0037 maxTextWidth = qMax(maxTextWidth, ui.tree->itemDelegate()->sizeHint(option, ui.tree->model()->index(i, 0)).width()); 0038 } 0039 // 20 because we want some margins, not a too tight text 0040 ui.tree->setMaximumWidth(qMax(ui.tree->maximumWidth(), maxTextWidth + 20)); 0041 0042 // Add the nuclear calculator to the user interface 0043 m_nuclearCalculator = new nuclearCalculator(this); 0044 ui.stack->addWidget(m_nuclearCalculator); 0045 // Add the gas calculator to the user interface 0046 m_gasCalculator = new gasCalculator(this); 0047 ui.stack->addWidget(m_gasCalculator); 0048 // Add the concentration calculator to the user interface 0049 m_concCalculator = new concCalculator(this); 0050 ui.stack->addWidget(m_concCalculator); 0051 // Add the molecular mass Calculator widget to the user interface 0052 m_moleCalculator = new MolcalcWidget(this); 0053 ui.stack->addWidget(m_moleCalculator); 0054 // Add the molecular mass Calculator widget to the user interface 0055 m_titraCalculator = new titrationCalculator(this); 0056 ui.stack->addWidget(m_titraCalculator); 0057 0058 #ifdef HAVE_FACILE 0059 // Add the equation balancer widget to the user interface 0060 QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui.tree); 0061 treeItem->setText(0, i18n("Equation Balancer")); 0062 0063 m_equationBalancer = new EQChemDialog(this); 0064 ui.stack->addWidget(m_equationBalancer); 0065 #endif 0066 // Add an image to the file 0067 ui.pic->setPixmap((QIcon::fromTheme(QStringLiteral("calculate"))).pixmap(128, 128)); 0068 0069 // Connect the tree item selection signal to the corresponding slot 0070 connect(ui.tree, &QTreeWidget::itemClicked, this, &calculator::slotItemSelection); 0071 0072 ui.tree->setCurrentItem(ui.tree->topLevelItem(0), 0, QItemSelectionModel::ToggleCurrent); 0073 0074 // help clicked 0075 connect(buttonBox->button(QDialogButtonBox::Help), &QPushButton::clicked, this, &calculator::slotHelp); 0076 } 0077 0078 calculator ::~calculator() = default; 0079 0080 void calculator::slotItemSelection(QTreeWidgetItem *item) 0081 { 0082 if (item == nullptr) { 0083 return; 0084 } 0085 0086 // DEBUG 0087 qCDebug(KALZIUM_LOG) << "Item clicked: " << item->text(0); 0088 0089 QString s = item->text(0); 0090 0091 if (!(s.compare(i18n("Introduction")))) { 0092 ui.stack->setCurrentWidget(ui.intro); 0093 } else if (!(s.compare(i18n("Nuclear Calculator")))) { 0094 // if nuclear calculator is selected, show the widget in the user interface 0095 ui.stack->setCurrentWidget(m_nuclearCalculator); 0096 } else if (!(s.compare(i18n("Gas Calculator")))) { 0097 // if gas calculator is selected, show the widget in the user interface 0098 ui.stack->setCurrentWidget(m_gasCalculator); 0099 } else if (!(s.compare(i18n("Concentration Calculator")))) { 0100 // if the concentration calculator is selected, show the widget in the UI 0101 ui.stack->setCurrentWidget(m_concCalculator); 0102 0103 // The equation balancer needs FACILE library, if it's present HAVE_FACILE = 1 0104 #ifdef HAVE_FACILE 0105 } else if (!(s.compare(i18n("Equation Balancer")))) { 0106 // If the equation balancer was selected, open it in the UI. 0107 ui.stack->setCurrentWidget(m_equationBalancer); 0108 #endif 0109 0110 } else if (!(s.compare(i18n("Molecular mass Calculator")))) { 0111 ui.stack->setCurrentWidget(m_moleCalculator); 0112 } else if (!(s.compare(i18n("Titration Calculator")))) { 0113 ui.stack->setCurrentWidget(m_titraCalculator); 0114 } 0115 } 0116 0117 void calculator::slotHelp() 0118 { 0119 KHelpClient::invokeHelp(QStringLiteral("tools.html#perf_calculation"), QStringLiteral("kalzium")); 0120 } 0121 0122 #include "moc_calculator.cpp"