diff --git a/CMakeLists.txt b/CMakeLists.txt index 73179d11..4c860414 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,117 +1,116 @@ project(kalzium) cmake_minimum_required(VERSION 2.8.12) set(QT_MIN_VERSION "5.9.0") set(KF5_VERSION "5.42.0") find_package(ECM ${KF5_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${kalzium_SOURCE_DIR}/cmake/modules) include(KDEInstallDirs) include(KDECompilerSettings NO_POLICY_SCOPE) include(KDECMakeSettings) include(FeatureSummary) include(ECMInstallIcons) include(ECMMarkNonGuiExecutable) include(CheckIncludeFiles) include(ECMSetupVersion) find_package(Gettext REQUIRED) find_package(PythonInterp REQUIRED) find_package(PkgConfig) find_package(OpenBabel2) find_package(AvogadroLibs) find_package(Eigen3) find_package(OCaml) find_package(Libfacile) pkg_check_modules(CHEMICAL_MIME_DATA chemical-mime-data) check_include_files(ieeefp.h HAVE_IEEEFP_H) # create configuration file set(HAVE_FACILE ${LIBFACILE_FOUND}) set(HAVE_OPENBABEL2 ${OPENBABEL2_FOUND}) set(HAVE_EIGEN ${EIGEN3_FOUND}) set(HAVE_AVOGADRO ${AvogadroLibs_FOUND}) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config-kalzium.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kalzium.h ) include_directories(${AvogadroLibs_INCLUDE_DIRS}) find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS Widgets Script Core Gui OpenGL Svg ) find_package(KF5 ${KF5_VERSION} REQUIRED COMPONENTS Archive Config CoreAddons DocTools I18n - KDELibs4Support KHtml Parts Plotting Solid UnitConversion WidgetsAddons ) ecm_setup_version("5.0.0" VARIABLE_PREFIX KALZIUMLIB ) # search packages used by KDE if(WIN32) find_package(KDEWIN32 REQUIRED) # detect oxygen icon dir at configure time based on KDEDIRS - there may be different package installation locations #execute_process(COMMAND "${KDE4_KDECONFIG_EXECUTABLE}" --path icon OUTPUT_VARIABLE _dir #ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) #file(TO_CMAKE_PATH "${_dir}" __dir) #find_path(KDE4_ICON_DIR oxygen PATHS # ${__dir}) # message(STATUS "using oxygen application icons from ${KDE4_ICON_DIR}") else(WIN32) # set (KDE4_ICON_DIR ${CMAKE_INSTALL_PREFIX}/share/icons) endif(WIN32) add_definitions( -DQT_NO_URL_CAST_FROM_STRING ) #include_directories (${QDBUS_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES} libscience) if(MSVC) # for correctly linking openbabel: # see http://www.mail-archive.com/openbabel-devel@lists.sourceforge.net/msg01975.html add_definitions(-DUSING_DYNAMIC_LIBS) endif(MSVC) if (OPENBABEL2_FOUND AND AvogadroLibs_FOUND AND EIGEN3_FOUND) find_package(KF5NewStuff REQUIRED) # avoid compilerwarnings about redefinitions # todo: use check_function_exits() ? message(STATUS "Kalzium molecular editor enabled") if (WIN32) add_definitions(-DHAVE_SNPRINTF -DHAVE_STRCASECMP -DHAVE_STRNCASECMP) endif (WIN32) add_subdirectory(compoundviewer) else (OPENBABEL2_FOUND AND AvogadroLibs_FOUND AND EIGEN3_FOUND) message(STATUS "Kalzium molecular editor disabled") endif (OPENBABEL2_FOUND AND AvogadroLibs_FOUND AND EIGEN3_FOUND) add_subdirectory(doc) add_subdirectory(src) add_subdirectory(data) # add_subdirectory(plasmoid) add_subdirectory(libscience) # add_subdirectory(qml) install(FILES org.kde.kalzium.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/compoundviewer/CMakeLists.txt b/compoundviewer/CMakeLists.txt index b2bf7c2e..d6f6f4ab 100644 --- a/compoundviewer/CMakeLists.txt +++ b/compoundviewer/CMakeLists.txt @@ -1,36 +1,35 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR}/.. ${EIGEN3_INCLUDE_DIR} ${OPENBABEL2_INCLUDE_DIR} ${OPENGL_INCLUDE_DIRS} ${AvogadroLibs_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/compoundviewer ) set(compoundviewer_SRCS iowrapper.cpp kalziumglwidget.cpp ) #add_subdirectory(widgets) add_library(compoundviewer ${compoundviewer_SRCS}) target_link_libraries(compoundviewer KF5::I18n KF5::WidgetsAddons KF5::CoreAddons - KF5::KDELibs4Support Qt5::OpenGL Qt5::Gui ${OPENBABEL2_LIBRARIES} AvogadroQtGui AvogadroQtOpenGL AvogadroQtPlugins ) set_target_properties(compoundviewer PROPERTIES VERSION ${KALZIUMLIB_VERSION} SOVERSION ${KALZIUMLIB_SOVERSION} ) install(TARGETS compoundviewer ${INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/compoundviewer/kalziumglwidget.cpp b/compoundviewer/kalziumglwidget.cpp index a4d31cd8..95416c8d 100644 --- a/compoundviewer/kalziumglwidget.cpp +++ b/compoundviewer/kalziumglwidget.cpp @@ -1,111 +1,112 @@ /*************************************************************************** * Copyright (C) 2006 by Carsten Niehaus * Copyright (C) 2007-2008 by Marcus D. Hanwell * Copyright (C) 2016 by Andreas Cord-Landwehr ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "kalziumglwidget.h" #include "iowrapper.h" #include #include #include #include #include #include -#include +#include #include +#include #include KalziumGLWidget::KalziumGLWidget(QWidget *parent) : Avogadro::QtOpenGL::GLWidget(parent) { // work around a bug in OpenBabel: the chemical data files parsing // is dependent on the LC_NUMERIC locale. m_lc_numeric = QByteArray(setlocale(LC_NUMERIC, nullptr)); setlocale(LC_NUMERIC, "C"); // Prevent What's this from intercepting right mouse clicks setContextMenuPolicy(Qt::PreventContextMenu); // Load the tools and set navigate as the default // first set the Avogadro plugin directory, // avoiding overwriting an already set envvar static bool s_pluginDirSet = false; if (!s_pluginDirSet) { if (qgetenv("AVOGADRO_PLUGINS").isEmpty()) { qputenv("AVOGADRO_PLUGINS", AVOGADRO_PLUGIN_DIR); } s_pluginDirSet = true; } Avogadro::QtPlugins::PluginManager *manager = Avogadro::QtPlugins::PluginManager::instance(); manager->load(); // load render engines QList scenePluginFactories = manager->pluginFactories(); foreach (auto *factory, scenePluginFactories) { auto *scenePlugin = factory->createInstance(); // enable Ball-and-Sticks if (scenePlugin->objectName() == "BallStick") { scenePlugin->setEnabled(true); } sceneModel().addItem(scenePlugin); } // load tools if (!tools().isEmpty()) { qCritical() << "Updating non-empty toolset, erasing first."; qDeleteAll(tools()); } auto toolPluginFactories = manager->pluginFactories(); foreach (auto *factory, toolPluginFactories) { auto *tool = factory->createInstance(); if (tool) { addTool(tool); if (factory->identifier() == QStringLiteral("Navigator")) { setDefaultTool(tool); setActiveTool(tool); } } } setMolecule(new Avogadro::QtGui::Molecule(this)); update(); } KalziumGLWidget::~KalziumGLWidget() { //restore the LC_NUMERIC locale. setlocale(LC_NUMERIC, m_lc_numeric.constData()); } bool KalziumGLWidget::openFile(const QString &file) { // workaround for missing copy-constructor: fixed in Avogadra2 > 0.9 Avogadro::QtGui::Molecule temp; temp = *IoWrapper::readMolecule(file); auto mol = new Avogadro::QtGui::Molecule(temp); if (!mol) { return false; } Avogadro::QtGui::Molecule* oldmol = molecule(); if (oldmol) { oldmol->deleteLater(); } setMolecule(mol); update(); return true; } diff --git a/data/icons/hi16-actions-calculate.png b/data/icons/16-actions-calculate.png similarity index 100% rename from data/icons/hi16-actions-calculate.png rename to data/icons/16-actions-calculate.png diff --git a/data/icons/hi16-actions-chemical.png b/data/icons/16-actions-chemical.png similarity index 100% rename from data/icons/hi16-actions-chemical.png rename to data/icons/16-actions-chemical.png diff --git a/data/icons/hi16-actions-elempic.png b/data/icons/16-actions-elempic.png similarity index 100% rename from data/icons/hi16-actions-elempic.png rename to data/icons/16-actions-elempic.png diff --git a/data/icons/hi16-actions-energies.png b/data/icons/16-actions-energies.png similarity index 100% rename from data/icons/hi16-actions-energies.png rename to data/icons/16-actions-energies.png diff --git a/data/icons/hi16-actions-eqchem.png b/data/icons/16-actions-eqchem.png similarity index 100% rename from data/icons/hi16-actions-eqchem.png rename to data/icons/16-actions-eqchem.png diff --git a/data/icons/hi16-actions-glossary.png b/data/icons/16-actions-glossary.png similarity index 100% rename from data/icons/hi16-actions-glossary.png rename to data/icons/16-actions-glossary.png diff --git a/data/icons/hi16-actions-isotopemap.png b/data/icons/16-actions-isotopemap.png similarity index 100% rename from data/icons/hi16-actions-isotopemap.png rename to data/icons/16-actions-isotopemap.png diff --git a/data/icons/hi16-actions-kalzium_molviewer.png b/data/icons/16-actions-kalzium_molviewer.png similarity index 100% rename from data/icons/hi16-actions-kalzium_molviewer.png rename to data/icons/16-actions-kalzium_molviewer.png diff --git a/data/icons/hi16-actions-kalzium_rs.png b/data/icons/16-actions-kalzium_rs.png similarity index 100% rename from data/icons/hi16-actions-kalzium_rs.png rename to data/icons/16-actions-kalzium_rs.png diff --git a/data/icons/hi16-actions-kalzium_tables.png b/data/icons/16-actions-kalzium_tables.png similarity index 100% rename from data/icons/hi16-actions-kalzium_tables.png rename to data/icons/16-actions-kalzium_tables.png diff --git a/data/icons/hi16-actions-legend.png b/data/icons/16-actions-legend.png similarity index 100% rename from data/icons/hi16-actions-legend.png rename to data/icons/16-actions-legend.png diff --git a/data/icons/hi16-actions-misc.png b/data/icons/16-actions-misc.png similarity index 100% rename from data/icons/hi16-actions-misc.png rename to data/icons/16-actions-misc.png diff --git a/data/icons/hi16-actions-numbers.png b/data/icons/16-actions-numbers.png similarity index 100% rename from data/icons/hi16-actions-numbers.png rename to data/icons/16-actions-numbers.png diff --git a/data/icons/hi16-actions-orbits.png b/data/icons/16-actions-orbits.png similarity index 100% rename from data/icons/hi16-actions-orbits.png rename to data/icons/16-actions-orbits.png diff --git a/data/icons/hi16-actions-overview.png b/data/icons/16-actions-overview.png similarity index 100% rename from data/icons/hi16-actions-overview.png rename to data/icons/16-actions-overview.png diff --git a/data/icons/hi16-actions-plot.png b/data/icons/16-actions-plot.png similarity index 100% rename from data/icons/hi16-actions-plot.png rename to data/icons/16-actions-plot.png diff --git a/data/icons/hi16-actions-sidebar.png b/data/icons/16-actions-sidebar.png similarity index 100% rename from data/icons/hi16-actions-sidebar.png rename to data/icons/16-actions-sidebar.png diff --git a/data/icons/hi16-actions-spectrum.png b/data/icons/16-actions-spectrum.png similarity index 100% rename from data/icons/hi16-actions-spectrum.png rename to data/icons/16-actions-spectrum.png diff --git a/data/icons/hi16-actions-statematter.png b/data/icons/16-actions-statematter.png similarity index 100% rename from data/icons/hi16-actions-statematter.png rename to data/icons/16-actions-statematter.png diff --git a/data/icons/hi16-actions-timeline.png b/data/icons/16-actions-timeline.png similarity index 100% rename from data/icons/hi16-actions-timeline.png rename to data/icons/16-actions-timeline.png diff --git a/data/icons/hi16-actions-tooltip.png b/data/icons/16-actions-tooltip.png similarity index 100% rename from data/icons/hi16-actions-tooltip.png rename to data/icons/16-actions-tooltip.png diff --git a/data/icons/hi22-actions-calculate.png b/data/icons/22-actions-calculate.png similarity index 100% rename from data/icons/hi22-actions-calculate.png rename to data/icons/22-actions-calculate.png diff --git a/data/icons/hi22-actions-chemical.png b/data/icons/22-actions-chemical.png similarity index 100% rename from data/icons/hi22-actions-chemical.png rename to data/icons/22-actions-chemical.png diff --git a/data/icons/hi22-actions-elempic.png b/data/icons/22-actions-elempic.png similarity index 100% rename from data/icons/hi22-actions-elempic.png rename to data/icons/22-actions-elempic.png diff --git a/data/icons/hi22-actions-energies.png b/data/icons/22-actions-energies.png similarity index 100% rename from data/icons/hi22-actions-energies.png rename to data/icons/22-actions-energies.png diff --git a/data/icons/hi22-actions-eqchem.png b/data/icons/22-actions-eqchem.png similarity index 100% rename from data/icons/hi22-actions-eqchem.png rename to data/icons/22-actions-eqchem.png diff --git a/data/icons/hi22-actions-glossary.png b/data/icons/22-actions-glossary.png similarity index 100% rename from data/icons/hi22-actions-glossary.png rename to data/icons/22-actions-glossary.png diff --git a/data/icons/hi22-actions-isotopemap.png b/data/icons/22-actions-isotopemap.png similarity index 100% rename from data/icons/hi22-actions-isotopemap.png rename to data/icons/22-actions-isotopemap.png diff --git a/data/icons/hi22-actions-kalzium_molviewer.png b/data/icons/22-actions-kalzium_molviewer.png similarity index 100% rename from data/icons/hi22-actions-kalzium_molviewer.png rename to data/icons/22-actions-kalzium_molviewer.png diff --git a/data/icons/hi22-actions-kalzium_rs.png b/data/icons/22-actions-kalzium_rs.png similarity index 100% rename from data/icons/hi22-actions-kalzium_rs.png rename to data/icons/22-actions-kalzium_rs.png diff --git a/data/icons/hi22-actions-kalzium_tables.png b/data/icons/22-actions-kalzium_tables.png similarity index 100% rename from data/icons/hi22-actions-kalzium_tables.png rename to data/icons/22-actions-kalzium_tables.png diff --git a/data/icons/hi22-actions-legend.png b/data/icons/22-actions-legend.png similarity index 100% rename from data/icons/hi22-actions-legend.png rename to data/icons/22-actions-legend.png diff --git a/data/icons/hi22-actions-numbers.png b/data/icons/22-actions-numbers.png similarity index 100% rename from data/icons/hi22-actions-numbers.png rename to data/icons/22-actions-numbers.png diff --git a/data/icons/hi22-actions-orbits.png b/data/icons/22-actions-orbits.png similarity index 100% rename from data/icons/hi22-actions-orbits.png rename to data/icons/22-actions-orbits.png diff --git a/data/icons/hi22-actions-overview.png b/data/icons/22-actions-overview.png similarity index 100% rename from data/icons/hi22-actions-overview.png rename to data/icons/22-actions-overview.png diff --git a/data/icons/hi22-actions-plot.png b/data/icons/22-actions-plot.png similarity index 100% rename from data/icons/hi22-actions-plot.png rename to data/icons/22-actions-plot.png diff --git a/data/icons/hi22-actions-sidebar.png b/data/icons/22-actions-sidebar.png similarity index 100% rename from data/icons/hi22-actions-sidebar.png rename to data/icons/22-actions-sidebar.png diff --git a/data/icons/hi22-actions-spectrum.png b/data/icons/22-actions-spectrum.png similarity index 100% rename from data/icons/hi22-actions-spectrum.png rename to data/icons/22-actions-spectrum.png diff --git a/data/icons/hi22-actions-statematter.png b/data/icons/22-actions-statematter.png similarity index 100% rename from data/icons/hi22-actions-statematter.png rename to data/icons/22-actions-statematter.png diff --git a/data/icons/hi22-actions-timeline.png b/data/icons/22-actions-timeline.png similarity index 100% rename from data/icons/hi22-actions-timeline.png rename to data/icons/22-actions-timeline.png diff --git a/data/icons/hi22-actions-tooltip.png b/data/icons/22-actions-tooltip.png similarity index 100% rename from data/icons/hi22-actions-tooltip.png rename to data/icons/22-actions-tooltip.png diff --git a/data/icons/hi32-actions-calculate.png b/data/icons/32-actions-calculate.png similarity index 100% rename from data/icons/hi32-actions-calculate.png rename to data/icons/32-actions-calculate.png diff --git a/data/icons/hi32-actions-chemical.png b/data/icons/32-actions-chemical.png similarity index 100% rename from data/icons/hi32-actions-chemical.png rename to data/icons/32-actions-chemical.png diff --git a/data/icons/hi32-actions-elempic.png b/data/icons/32-actions-elempic.png similarity index 100% rename from data/icons/hi32-actions-elempic.png rename to data/icons/32-actions-elempic.png diff --git a/data/icons/hi32-actions-energies.png b/data/icons/32-actions-energies.png similarity index 100% rename from data/icons/hi32-actions-energies.png rename to data/icons/32-actions-energies.png diff --git a/data/icons/hi32-actions-eqchem.png b/data/icons/32-actions-eqchem.png similarity index 100% rename from data/icons/hi32-actions-eqchem.png rename to data/icons/32-actions-eqchem.png diff --git a/data/icons/hi32-actions-glossary.png b/data/icons/32-actions-glossary.png similarity index 100% rename from data/icons/hi32-actions-glossary.png rename to data/icons/32-actions-glossary.png diff --git a/data/icons/hi32-actions-isotopemap.png b/data/icons/32-actions-isotopemap.png similarity index 100% rename from data/icons/hi32-actions-isotopemap.png rename to data/icons/32-actions-isotopemap.png diff --git a/data/icons/hi32-actions-kalzium_molviewer.png b/data/icons/32-actions-kalzium_molviewer.png similarity index 100% rename from data/icons/hi32-actions-kalzium_molviewer.png rename to data/icons/32-actions-kalzium_molviewer.png diff --git a/data/icons/hi32-actions-kalzium_rs.png b/data/icons/32-actions-kalzium_rs.png similarity index 100% rename from data/icons/hi32-actions-kalzium_rs.png rename to data/icons/32-actions-kalzium_rs.png diff --git a/data/icons/hi32-actions-kalzium_tables.png b/data/icons/32-actions-kalzium_tables.png similarity index 100% rename from data/icons/hi32-actions-kalzium_tables.png rename to data/icons/32-actions-kalzium_tables.png diff --git a/data/icons/hi32-actions-legend.png b/data/icons/32-actions-legend.png similarity index 100% rename from data/icons/hi32-actions-legend.png rename to data/icons/32-actions-legend.png diff --git a/data/icons/hi32-actions-misc.png b/data/icons/32-actions-misc.png similarity index 100% rename from data/icons/hi32-actions-misc.png rename to data/icons/32-actions-misc.png diff --git a/data/icons/hi32-actions-numbers.png b/data/icons/32-actions-numbers.png similarity index 100% rename from data/icons/hi32-actions-numbers.png rename to data/icons/32-actions-numbers.png diff --git a/data/icons/hi32-actions-orbits.png b/data/icons/32-actions-orbits.png similarity index 100% rename from data/icons/hi32-actions-orbits.png rename to data/icons/32-actions-orbits.png diff --git a/data/icons/hi32-actions-overview.png b/data/icons/32-actions-overview.png similarity index 100% rename from data/icons/hi32-actions-overview.png rename to data/icons/32-actions-overview.png diff --git a/data/icons/hi32-actions-plot.png b/data/icons/32-actions-plot.png similarity index 100% rename from data/icons/hi32-actions-plot.png rename to data/icons/32-actions-plot.png diff --git a/data/icons/hi32-actions-sidebar.png b/data/icons/32-actions-sidebar.png similarity index 100% rename from data/icons/hi32-actions-sidebar.png rename to data/icons/32-actions-sidebar.png diff --git a/data/icons/hi32-actions-spectrum.png b/data/icons/32-actions-spectrum.png similarity index 100% rename from data/icons/hi32-actions-spectrum.png rename to data/icons/32-actions-spectrum.png diff --git a/data/icons/hi32-actions-statematter.png b/data/icons/32-actions-statematter.png similarity index 100% rename from data/icons/hi32-actions-statematter.png rename to data/icons/32-actions-statematter.png diff --git a/data/icons/hi32-actions-timeline.png b/data/icons/32-actions-timeline.png similarity index 100% rename from data/icons/hi32-actions-timeline.png rename to data/icons/32-actions-timeline.png diff --git a/data/icons/hi32-actions-tooltip.png b/data/icons/32-actions-tooltip.png similarity index 100% rename from data/icons/hi32-actions-tooltip.png rename to data/icons/32-actions-tooltip.png diff --git a/data/icons/hi48-actions-calculate.png b/data/icons/48-actions-calculate.png similarity index 100% rename from data/icons/hi48-actions-calculate.png rename to data/icons/48-actions-calculate.png diff --git a/data/icons/hi48-actions-chemical.png b/data/icons/48-actions-chemical.png similarity index 100% rename from data/icons/hi48-actions-chemical.png rename to data/icons/48-actions-chemical.png diff --git a/data/icons/hi48-actions-energies.png b/data/icons/48-actions-energies.png similarity index 100% rename from data/icons/hi48-actions-energies.png rename to data/icons/48-actions-energies.png diff --git a/data/icons/hi48-actions-eqchem.png b/data/icons/48-actions-eqchem.png similarity index 100% rename from data/icons/hi48-actions-eqchem.png rename to data/icons/48-actions-eqchem.png diff --git a/data/icons/hi48-actions-glossary.png b/data/icons/48-actions-glossary.png similarity index 100% rename from data/icons/hi48-actions-glossary.png rename to data/icons/48-actions-glossary.png diff --git a/data/icons/hi48-actions-isotopemap.png b/data/icons/48-actions-isotopemap.png similarity index 100% rename from data/icons/hi48-actions-isotopemap.png rename to data/icons/48-actions-isotopemap.png diff --git a/data/icons/hi48-actions-kalzium_molviewer.png b/data/icons/48-actions-kalzium_molviewer.png similarity index 100% rename from data/icons/hi48-actions-kalzium_molviewer.png rename to data/icons/48-actions-kalzium_molviewer.png diff --git a/data/icons/hi48-actions-kalzium_rs.png b/data/icons/48-actions-kalzium_rs.png similarity index 100% rename from data/icons/hi48-actions-kalzium_rs.png rename to data/icons/48-actions-kalzium_rs.png diff --git a/data/icons/hi48-actions-kalzium_tables.png b/data/icons/48-actions-kalzium_tables.png similarity index 100% rename from data/icons/hi48-actions-kalzium_tables.png rename to data/icons/48-actions-kalzium_tables.png diff --git a/data/icons/hi48-actions-legend.png b/data/icons/48-actions-legend.png similarity index 100% rename from data/icons/hi48-actions-legend.png rename to data/icons/48-actions-legend.png diff --git a/data/icons/hi48-actions-misc.png b/data/icons/48-actions-misc.png similarity index 100% rename from data/icons/hi48-actions-misc.png rename to data/icons/48-actions-misc.png diff --git a/data/icons/hi48-actions-numbers.png b/data/icons/48-actions-numbers.png similarity index 100% rename from data/icons/hi48-actions-numbers.png rename to data/icons/48-actions-numbers.png diff --git a/data/icons/hi48-actions-orbits.png b/data/icons/48-actions-orbits.png similarity index 100% rename from data/icons/hi48-actions-orbits.png rename to data/icons/48-actions-orbits.png diff --git a/data/icons/hi48-actions-overview.png b/data/icons/48-actions-overview.png similarity index 100% rename from data/icons/hi48-actions-overview.png rename to data/icons/48-actions-overview.png diff --git a/data/icons/hi48-actions-plot.png b/data/icons/48-actions-plot.png similarity index 100% rename from data/icons/hi48-actions-plot.png rename to data/icons/48-actions-plot.png diff --git a/data/icons/hi48-actions-sidebar.png b/data/icons/48-actions-sidebar.png similarity index 100% rename from data/icons/hi48-actions-sidebar.png rename to data/icons/48-actions-sidebar.png diff --git a/data/icons/hi48-actions-spectrum.png b/data/icons/48-actions-spectrum.png similarity index 100% rename from data/icons/hi48-actions-spectrum.png rename to data/icons/48-actions-spectrum.png diff --git a/data/icons/hi48-actions-statematter.png b/data/icons/48-actions-statematter.png similarity index 100% rename from data/icons/hi48-actions-statematter.png rename to data/icons/48-actions-statematter.png diff --git a/data/icons/hi48-actions-timeline.png b/data/icons/48-actions-timeline.png similarity index 100% rename from data/icons/hi48-actions-timeline.png rename to data/icons/48-actions-timeline.png diff --git a/data/icons/hi48-actions-tooltip.png b/data/icons/48-actions-tooltip.png similarity index 100% rename from data/icons/hi48-actions-tooltip.png rename to data/icons/48-actions-tooltip.png diff --git a/data/icons/hi64-actions-kalzium_molviewer.png b/data/icons/64-actions-kalzium_molviewer.png similarity index 100% rename from data/icons/hi64-actions-kalzium_molviewer.png rename to data/icons/64-actions-kalzium_molviewer.png diff --git a/data/icons/hi64-actions-kalzium_rs.png b/data/icons/64-actions-kalzium_rs.png similarity index 100% rename from data/icons/hi64-actions-kalzium_rs.png rename to data/icons/64-actions-kalzium_rs.png diff --git a/data/icons/hi64-actions-kalzium_tables.png b/data/icons/64-actions-kalzium_tables.png similarity index 100% rename from data/icons/hi64-actions-kalzium_tables.png rename to data/icons/64-actions-kalzium_tables.png diff --git a/data/icons/hi64-actions-numbers.png b/data/icons/64-actions-numbers.png similarity index 100% rename from data/icons/hi64-actions-numbers.png rename to data/icons/64-actions-numbers.png diff --git a/data/icons/CMakeLists.txt b/data/icons/CMakeLists.txt index b3f48c89..6391f3f0 100644 --- a/data/icons/CMakeLists.txt +++ b/data/icons/CMakeLists.txt @@ -1,3 +1,110 @@ -ecm_install_icons(${DATA_INSTALL_DIR}/kalzium/icons) +ecm_install_icons(ICONS + 16-actions-calculate.png + 16-actions-chemical.png + 16-actions-elempic.png + 16-actions-energies.png + 16-actions-eqchem.png + 16-actions-glossary.png + 16-actions-isotopemap.png + 16-actions-kalzium_molviewer.png + 16-actions-kalzium_rs.png + 16-actions-kalzium_tables.png + 16-actions-legend.png + 16-actions-misc.png + 16-actions-numbers.png + 16-actions-orbits.png + 16-actions-overview.png + 16-actions-plot.png + 16-actions-sidebar.png + 16-actions-spectrum.png + 16-actions-statematter.png + 16-actions-timeline.png + 16-actions-tooltip.png + 22-actions-calculate.png + 22-actions-chemical.png + 22-actions-elempic.png + 22-actions-energies.png + 22-actions-eqchem.png + 22-actions-glossary.png + 22-actions-isotopemap.png + 22-actions-kalzium_molviewer.png + 22-actions-kalzium_rs.png + 22-actions-kalzium_tables.png + 22-actions-legend.png + 22-actions-numbers.png + 22-actions-orbits.png + 22-actions-overview.png + 22-actions-plot.png + 22-actions-sidebar.png + 22-actions-spectrum.png + 22-actions-statematter.png + 22-actions-timeline.png + 22-actions-tooltip.png + 32-actions-calculate.png + 32-actions-chemical.png + 32-actions-elempic.png + 32-actions-energies.png + 32-actions-eqchem.png + 32-actions-glossary.png + 32-actions-isotopemap.png + 32-actions-kalzium_molviewer.png + 32-actions-kalzium_rs.png + 32-actions-kalzium_tables.png + 32-actions-legend.png + 32-actions-misc.png + 32-actions-numbers.png + 32-actions-orbits.png + 32-actions-overview.png + 32-actions-plot.png + 32-actions-sidebar.png + 32-actions-spectrum.png + 32-actions-statematter.png + 32-actions-timeline.png + 32-actions-tooltip.png + 48-actions-calculate.png + 48-actions-chemical.png + 48-actions-energies.png + 48-actions-eqchem.png + 48-actions-glossary.png + 48-actions-isotopemap.png + 48-actions-kalzium_molviewer.png + 48-actions-kalzium_rs.png + 48-actions-kalzium_tables.png + 48-actions-legend.png + 48-actions-misc.png + 48-actions-numbers.png + 48-actions-orbits.png + 48-actions-overview.png + 48-actions-plot.png + 48-actions-sidebar.png + 48-actions-spectrum.png + 48-actions-statematter.png + 48-actions-timeline.png + 48-actions-tooltip.png + 64-actions-kalzium_molviewer.png + 64-actions-kalzium_rs.png + 64-actions-kalzium_tables.png + 64-actions-numbers.png + sc-actions-calculate.svgz + sc-actions-chemical.svgz + sc-actions-elempic.svgz + sc-actions-energies.svgz + sc-actions-eqchem.svgz + sc-actions-glossary.svgz + sc-actions-isotopemap.svgz + sc-actions-kalzium_molviewer.svgz + sc-actions-kalzium_rs.svgz + sc-actions-kalzium_tables.svgz + sc-actions-misc.svgz + sc-actions-numbers.svgz + sc-actions-orbits.svgz + sc-actions-overview.svgz + sc-actions-plot.svgz + sc-actions-sidebar.svgz + sc-actions-spectrum.svgz + sc-actions-statematter.svgz + sc-actions-timeline.svgz + sc-actions-tooltip.svgz + DESTINATION ${DATA_INSTALL_DIR}/kalzium/icons THEME hicolor) diff --git a/data/icons/hisc-actions-calculate.svgz b/data/icons/sc-actions-calculate.svgz similarity index 100% rename from data/icons/hisc-actions-calculate.svgz rename to data/icons/sc-actions-calculate.svgz diff --git a/data/icons/hisc-actions-chemical.svgz b/data/icons/sc-actions-chemical.svgz similarity index 100% rename from data/icons/hisc-actions-chemical.svgz rename to data/icons/sc-actions-chemical.svgz diff --git a/data/icons/hisc-actions-elempic.svgz b/data/icons/sc-actions-elempic.svgz similarity index 100% rename from data/icons/hisc-actions-elempic.svgz rename to data/icons/sc-actions-elempic.svgz diff --git a/data/icons/hisc-actions-energies.svgz b/data/icons/sc-actions-energies.svgz similarity index 100% rename from data/icons/hisc-actions-energies.svgz rename to data/icons/sc-actions-energies.svgz diff --git a/data/icons/hisc-actions-eqchem.svgz b/data/icons/sc-actions-eqchem.svgz similarity index 100% rename from data/icons/hisc-actions-eqchem.svgz rename to data/icons/sc-actions-eqchem.svgz diff --git a/data/icons/hisc-actions-glossary.svgz b/data/icons/sc-actions-glossary.svgz similarity index 100% rename from data/icons/hisc-actions-glossary.svgz rename to data/icons/sc-actions-glossary.svgz diff --git a/data/icons/hisc-actions-isotopemap.svgz b/data/icons/sc-actions-isotopemap.svgz similarity index 100% rename from data/icons/hisc-actions-isotopemap.svgz rename to data/icons/sc-actions-isotopemap.svgz diff --git a/data/icons/hisc-actions-kalzium_molviewer.svgz b/data/icons/sc-actions-kalzium_molviewer.svgz similarity index 100% rename from data/icons/hisc-actions-kalzium_molviewer.svgz rename to data/icons/sc-actions-kalzium_molviewer.svgz diff --git a/data/icons/hisc-actions-kalzium_rs.svgz b/data/icons/sc-actions-kalzium_rs.svgz similarity index 100% rename from data/icons/hisc-actions-kalzium_rs.svgz rename to data/icons/sc-actions-kalzium_rs.svgz diff --git a/data/icons/hisc-actions-kalzium_tables.svgz b/data/icons/sc-actions-kalzium_tables.svgz similarity index 100% rename from data/icons/hisc-actions-kalzium_tables.svgz rename to data/icons/sc-actions-kalzium_tables.svgz diff --git a/data/icons/hisc-actions-misc.svgz b/data/icons/sc-actions-misc.svgz similarity index 100% rename from data/icons/hisc-actions-misc.svgz rename to data/icons/sc-actions-misc.svgz diff --git a/data/icons/hisc-actions-numbers.svgz b/data/icons/sc-actions-numbers.svgz similarity index 100% rename from data/icons/hisc-actions-numbers.svgz rename to data/icons/sc-actions-numbers.svgz diff --git a/data/icons/hisc-actions-orbits.svgz b/data/icons/sc-actions-orbits.svgz similarity index 100% rename from data/icons/hisc-actions-orbits.svgz rename to data/icons/sc-actions-orbits.svgz diff --git a/data/icons/hisc-actions-overview.svgz b/data/icons/sc-actions-overview.svgz similarity index 100% rename from data/icons/hisc-actions-overview.svgz rename to data/icons/sc-actions-overview.svgz diff --git a/data/icons/hisc-actions-plot.svgz b/data/icons/sc-actions-plot.svgz similarity index 100% rename from data/icons/hisc-actions-plot.svgz rename to data/icons/sc-actions-plot.svgz diff --git a/data/icons/hisc-actions-sidebar.svgz b/data/icons/sc-actions-sidebar.svgz similarity index 100% rename from data/icons/hisc-actions-sidebar.svgz rename to data/icons/sc-actions-sidebar.svgz diff --git a/data/icons/hisc-actions-spectrum.svgz b/data/icons/sc-actions-spectrum.svgz similarity index 100% rename from data/icons/hisc-actions-spectrum.svgz rename to data/icons/sc-actions-spectrum.svgz diff --git a/data/icons/hisc-actions-statematter.svgz b/data/icons/sc-actions-statematter.svgz similarity index 100% rename from data/icons/hisc-actions-statematter.svgz rename to data/icons/sc-actions-statematter.svgz diff --git a/data/icons/hisc-actions-timeline.svgz b/data/icons/sc-actions-timeline.svgz similarity index 100% rename from data/icons/hisc-actions-timeline.svgz rename to data/icons/sc-actions-timeline.svgz diff --git a/data/icons/hisc-actions-tooltip.svgz b/data/icons/sc-actions-tooltip.svgz similarity index 100% rename from data/icons/hisc-actions-tooltip.svgz rename to data/icons/sc-actions-tooltip.svgz diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fd485abe..d8cb9d37 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,203 +1,203 @@ include_directories( ${CMAKE_SOURCE_DIR}/libscience/ ../compoundviewer tools calculator psetable isotopetable ${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) ########### next target ############### # The tools can only be built when OpenBabel2 is found. # The moleculeviewer needs not only OpenBabel2 but also Eigen2 and Avogadro, # so there is a nested if-check. if (OPENBABEL2_FOUND) set(kalziumtools_SRCS tools/obconverter.cpp ) ki18n_wrap_ui(kalziumtools_SRCS tools/obconverterwidget.ui ) include_directories(${OPENBABEL2_INCLUDE_DIR}) if (EIGEN3_FOUND AND AvogadroLibs_FOUND) #include(${Avogadro_USE_FILE}) set(kalziumtools_SRCS ${kalziumtools_SRCS} tools/moleculeview.cpp ../compoundviewer/kalziumglwidget.cpp ) ki18n_wrap_ui(kalziumtools_SRCS tools/moleculeviewerwidget.ui ) include_directories(${EIGEN3_INCLUDE_DIR}) endif (EIGEN3_FOUND AND AvogadroLibs_FOUND) endif (OPENBABEL2_FOUND) ## Kalzium calculator files set(kalziumtools_SRCS ${kalziumtools_SRCS} calculator/calculator.cpp calculator/nuclearCalculator.cpp calculator/gasCalculator.cpp calculator/concCalculator.cpp calculator/titrationCalculator.cpp # calculator/massCalculator.cpp ) ki18n_wrap_ui(kalziumtools_SRCS calculator/calculator.ui calculator/nuclearCalculator.ui calculator/gasCalculator.ui calculator/concCalculator.ui calculator/settings_calc.ui calculator/titrationCalculator.ui # calculator/massCalculator.ui ) set(kalzium_SRCS ${kalziumtools_SRCS} isotopetable/informationitem.cpp isotopetable/isotopeguideview.cpp isotopetable/isotopeitem.cpp isotopetable/isotopescene.cpp isotopetable/isotopetabledialog.cpp isotopetable/isotopeview.cpp psetable/elementitem.cpp psetable/numerationitem.cpp psetable/periodictableview.cpp psetable/periodictablescene.cpp psetable/periodictablestates.cpp psetable/statemachine.cpp kalzium.cpp main.cpp detailinfodlg.cpp tablesdialog.cpp detailedgraphicaloverview.cpp orbitswidget.cpp elementdataviewer.cpp molcalcwidget.cpp gradientwidget_impl.cpp kalziumdataobject.cpp kalziumutils.cpp kalziumgradienttype.cpp kalziumnumerationtype.cpp kalziumelementproperty.cpp kalziumschemetype.cpp kalziumunitcombobox.cpp unitsettingsdialog.cpp search.cpp searchwidget.cpp rsdialog.cpp legendwidget.cpp exportdialog.cpp tableinfowidget.cpp spectrumviewimpl.cpp spectrumwidget.cpp kdeeduglossary.cpp ) if (LIBFACILE_FOUND) include(CMakeOCamlInstructions.cmake) set(kalzium_SRCS ${kalzium_SRCS} eqchemview.cpp ${CMAKE_CURRENT_BINARY_DIR}/solver.o ${CMAKE_CURRENT_BINARY_DIR}/modwrap.o ) ki18n_wrap_ui(kalzium_SRCS equationview.ui ) endif (LIBFACILE_FOUND) ki18n_wrap_ui(kalzium_SRCS isotopetable/isotopedialog.ui settings_colors.ui plotsetupwidget.ui molcalcwidgetbase.ui spectrumview.ui settings_gradients.ui rswidget.ui gradientwidget.ui exportdialog.ui ) kconfig_add_kcfg_files(kalzium_SRCS prefs.kcfgc ) #kde4_add_app_icon(kalzium_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/hi*-app-kalzium.png") add_executable(kalzium ${kalzium_SRCS}) target_link_libraries(kalzium KF5::Plotting KF5::KHtml - KF5::KDELibs4Support KF5::UnitConversion + KF5::ItemViews Qt5::Script Qt5::Svg science ) if (OPENBABEL2_FOUND) target_link_libraries(kalzium ${OPENBABEL2_LIBRARIES}) if (EIGEN3_FOUND AND AvogadroLibs_FOUND) target_link_libraries(kalzium KF5::NewStuff Qt5::OpenGL compoundviewer AvogadroQtGui AvogadroQtOpenGL AvogadroQtPlugins ) endif (EIGEN3_FOUND AND AvogadroLibs_FOUND) endif (OPENBABEL2_FOUND) if (LIBFACILE_FOUND) link_directories(${OCAMLC_DIR}) set(CMAKE_LIBRARY_PATH ${OCAMLC_DIR}) set(kalzium_EXTRA_LIBS) find_library(OCAML_ASMRUN_LIBRARY NAMES asmrun) if (OCAML_ASMRUN_LIBRARY) set(kalzium_EXTRA_LIBS ${kalzium_EXTRA_LIBS} ${OCAML_ASMRUN_LIBRARY}) endif (OCAML_ASMRUN_LIBRARY) find_library(OCAML_STR_LIBRARY NAMES str) if (OCAML_STR_LIBRARY) set(kalzium_EXTRA_LIBS ${kalzium_EXTRA_LIBS} ${OCAML_STR_LIBRARY}) endif (OCAML_STR_LIBRARY) find_library(OCAML_NUMS_LIBRARY NAMES nums) if (OCAML_NUMS_LIBRARY) set(kalzium_EXTRA_LIBS ${kalzium_EXTRA_LIBS} ${OCAML_NUMS_LIBRARY}) endif (OCAML_NUMS_LIBRARY) target_link_libraries(kalzium ${kalzium_EXTRA_LIBS} m ${CMAKE_DL_LIBS}) endif (LIBFACILE_FOUND) install(TARGETS kalzium ${INSTALL_TARGETS_DEFAULT_ARGS}) ########### install files ############### install(PROGRAMS org.kde.kalzium.desktop org.kde.kalzium_cml.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) install(FILES kalzium.kcfg DESTINATION ${KCFG_INSTALL_DIR}) install(FILES kalziumui.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/kalzium) install(FILES kalzium.knsrc DESTINATION ${CONFIG_INSTALL_DIR}) ecm_install_icons(ICONS 16-apps-kalzium.png 22-apps-kalzium.png 32-apps-kalzium.png 48-apps-kalzium.png 64-apps-kalzium.png 128-apps-kalzium.png sc-apps-kalzium.svgz DESTINATION ${KDE_INSTALL_ICONDIR} THEME hicolor ) diff --git a/src/eqchemview.cpp b/src/eqchemview.cpp index 6df66e0a..40f21e05 100644 --- a/src/eqchemview.cpp +++ b/src/eqchemview.cpp @@ -1,110 +1,108 @@ /*************************************************************************** * Copyright (C) 2004, 2005, 2006 by Thomas Nagy * * Copyright (C) 2006 by Carsten Niehaus * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "eqchemview.h" #include #include #include #include "ui_equationview.h" #include #include #ifdef HAVE_FACILE extern "C" { char* solve_equation(const char *); } #else char* solve_equation(const char *) { return NULL; } #endif void EQChemDialog::compute() { QString equation(ui.lineEdit->text()); equation.replace("->", " -> "); equation.append(' '); equation.prepend(' '); char * result = solve_equation(equation.toLatin1().constData()); QString answer = QString(result); qDebug() << "Answer: " << answer; ui.answer_label->setText(answer); // mem leak ? free(result); } EQChemDialog::EQChemDialog(QWidget *parent) : QWidget(parent) { ui.setupUi(this); LineEditUrlDropEventFilter *dropUrlEventFilter = new LineEditUrlDropEventFilter(parent); dropUrlEventFilter->installEventFilter(ui.lineEdit); ui.lblHelp->setText(getHelpText()); connect(ui.calculateButton, SIGNAL(clicked()), this, SLOT(compute())); connect(ui.btnCopy, SIGNAL(clicked()), this, SLOT(copyAnswer())); } void EQChemDialog::copyAnswer() { qDebug() << "EQChemDialog::copyAnswer()"; QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(ui.answer_label->text(), QClipboard::Clipboard); } const QString EQChemDialog::getHelpText() { return i18nc( "Help text for the chemical equation solver", "The equation solver allows you to balance a chemical equation.
" "
" "Using Variables
" "To express variable quantities of an element, put a single character in front " "of the element's symbol, as shown in this example:
" "aH + bO -> 5H2O (Result: 10 H + 5 O -> 5 H2O)
" "Solving this expression will give you the needed amount of Hydrogen and Oxygen.
" "
" "Defining electric charges
" "Use box brackets to specify the electric charge of an element, as shown in this example:
" "4H[+] + 2O -> cH2O[2+] (Result: 4 H+ + 2 O -> 2 H2O2+)" ); } QSize EQChemDialog::sizeHint() const { QSize size; size.setWidth(200); return size; } - -#include "eqchemview.moc" diff --git a/src/kalzium.cpp b/src/kalzium.cpp index 450faf12..04e4694e 100644 --- a/src/kalzium.cpp +++ b/src/kalzium.cpp @@ -1,653 +1,648 @@ /*************************************************************************** copyright : (C) 2003-2007 by Carsten Niehaus email : cniehaus@kde.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. * * * ***************************************************************************/ #include "kalzium.h" -#include #include #include -#include #include "prefs.h" #include "ui_settings_colors.h" #include "ui_settings_gradients.h" #include "ui_settings_calc.h" #include "detailinfodlg.h" #include "detailedgraphicaloverview.h" #include "gradientwidget_impl.h" #include "kalziumdataobject.h" #include "kalziumnumerationtype.h" #include "kalziumschemetype.h" #include "kalziumgradienttype.h" #include "legendwidget.h" #include "exportdialog.h" #include "search.h" #include "searchwidget.h" #include "tableinfowidget.h" #include "psetables.h" #include #ifdef HAVE_FACILE #include "eqchemview.h" #endif #ifdef HAVE_OPENBABEL2 #if defined(HAVE_EIGEN) && defined(HAVE_AVOGADRO) #include "tools/moleculeview.h" #include #endif #include "tools/obconverter.h" #endif #include -#include +#include +#include +#include #include +#include +#include #include +#include #include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include +#include #include -#include -#include -#include -#include + +#include +#include #include -#include -#include +#include +#include +#include +#include +#include #define IDS_ELEMENTINFO 7 Kalzium::Kalzium() : KXmlGuiWindow(nullptr) { setObjectName("KalziumMainWindow"); // Init pointers with null m_infoDialog = nullptr; m_isotopeDialog = nullptr; m_elementDataPlotter = nullptr; m_tablesDialog = nullptr; m_rsDialog = nullptr; m_calculator = nullptr; m_exportDialog = nullptr; m_glossarydlg = nullptr; m_elementInfo = nullptr; // reading the elements from file KalziumDataObject::instance(); Search *newsearch = new Search(); KalziumDataObject::instance()->setSearch(newsearch); // Main pse-Table Tablewidget QWidget *pseTempWidget = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(pseTempWidget); layout->setMargin(0); layout->setSpacing(2); SearchWidget *searchWidget = new SearchWidget(pseTempWidget); searchWidget->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); // Creating the periodic table m_periodicTable = new PeriodicTableView(pseTempWidget); // Connecting the search to the periodic table connect(newsearch, SIGNAL(searchChanged()), KalziumElementProperty::instance(), SIGNAL(propertyChanged())); connect(newsearch, SIGNAL(searchReset()), KalziumElementProperty::instance(), SIGNAL(propertyChanged())); layout->addWidget(searchWidget); layout->addWidget(m_periodicTable); setCentralWidget(pseTempWidget); connect(m_periodicTable->pseScene(), SIGNAL(elementChanged(int)), this, SLOT(openInformationDialog(int))); connect(m_periodicTable->pseScene(), SIGNAL(elementHovered(int)), this, SLOT(elementHover(int))); connect(this, SIGNAL(numerationChanged(int)), m_periodicTable, SIGNAL(numerationChange(int))); // layouting setupSidebars(); setupActions(); setupStatusBar(); } void Kalzium::setupActions() { export_action = actionCollection()->add("file_exporter"); export_action->setText(i18n("&Export Data...")); connect(export_action, SIGNAL(triggered(bool)), this, SLOT(slotShowExportDialog())); // the action for swiching look: color schemes and gradients QStringList schemes = KalziumElementProperty::instance()->schemeList(); /*KalziumSchemeTypeFactory::instance()->schemes();*/ QStringList gradients = KalziumElementProperty::instance()->gradientList(); // the action for swiching look: schemes look_action_schemes = actionCollection()->add("view_look_onlyschemes"); look_action_schemes->setText(i18n("&Scheme")); look_action_schemes->setItems(schemes); look_action_schemes->setToolBarMode(KSelectAction::MenuMode); look_action_schemes->setToolButtonPopupMode(QToolButton::InstantPopup); connect(look_action_schemes, SIGNAL(triggered(int)), this, SLOT(slotSwitchtoLookScheme(int))); // the action for swiching look: gradients look_action_gradients = actionCollection()->add("view_look_onlygradients"); look_action_gradients->setText(i18n("&Gradients")); look_action_gradients->setItems(gradients); look_action_gradients->setToolBarMode(KSelectAction::MenuMode); look_action_gradients->setToolButtonPopupMode(QToolButton::InstantPopup); connect(look_action_gradients, SIGNAL(triggered(int)), this, SLOT(slotSwitchtoLookGradient(int))); // the action for swiching tables QStringList table_schemes = pseTables::instance()->tables(); table_action = actionCollection()->add("view_table"); table_action->setText(i18n("&Tables")); table_action->setItems(table_schemes); table_action->setCurrentItem(Prefs::table()); connect(table_action, SIGNAL(triggered(int)), this, SLOT(slotSwitchtoTable(int))); // the actions for switching numeration numeration_action = actionCollection()->add("view_numerationtype"); numeration_action->setText(i18n("&Numeration")); numeration_action->setItems(KalziumNumerationTypeFactory::instance()->numerations()); numeration_action->setCurrentItem(Prefs::numeration()); connect(numeration_action, SIGNAL(triggered(int)), this, SLOT(slotSwitchtoNumeration(int))); // tools actions m_pPlotAction = actionCollection()->addAction("tools_plotdata"); m_pPlotAction->setText(i18n("&Plot Data...")); m_pPlotAction->setIcon(QIcon::fromTheme("plot")); connect(m_pPlotAction, SIGNAL(triggered()), this, SLOT(slotPlotData())); // calculator actions m_pcalculator = actionCollection()->addAction("tools_calculate"); m_pcalculator->setText(i18n("Perform &Calculations...")); m_pcalculator->setIcon(QIcon::fromTheme("calculate")); m_pcalculator->setWhatsThis(i18nc("WhatsThis Help", "This is the calculator, it performs basic chemical calculations.")); connect(m_pcalculator, SIGNAL(triggered()), this, SLOT(showCalculator())); m_pIsotopeTableAction= actionCollection()->addAction("tools_isotopetable"); m_pIsotopeTableAction->setText(i18n("&Isotope Table...")); m_pIsotopeTableAction->setIcon(QIcon::fromTheme("isotopemap")); m_pIsotopeTableAction->setWhatsThis(i18nc("WhatsThis Help", "This table shows all of the known isotopes of the chemical elements.")); connect(m_pIsotopeTableAction, SIGNAL(triggered()), this, SLOT(slotIsotopeTable())); m_pGlossaryAction = actionCollection()->addAction("tools_glossary"); m_pGlossaryAction->setText(i18n("&Glossary...")); m_pGlossaryAction->setIcon(QIcon::fromTheme("glossary")); connect(m_pGlossaryAction, SIGNAL(triggered()), this, SLOT(slotGlossary())); m_pRSAction = actionCollection()->addAction("tools_rs"); m_pRSAction->setText(i18n("&R/S Phrases...")); m_pRSAction->setIcon(QIcon::fromTheme("kalzium_rs")); connect(m_pRSAction, SIGNAL(triggered()), this, SLOT(slotRS())); m_pOBConverterAction = actionCollection()->addAction("tools_obconverter"); m_pOBConverterAction->setText(i18n("Convert chemical files...")); m_pOBConverterAction->setIcon(QIcon::fromTheme("edit-copy")); m_pOBConverterAction->setWhatsThis(i18nc("WhatsThis Help", "With this tool, you can convert files containing chemical data between various file formats.")); connect(m_pOBConverterAction, SIGNAL(triggered()), this, SLOT(slotOBConverter())); #ifndef HAVE_OPENBABEL2 m_pOBConverterAction->setEnabled(false); #endif m_pMoleculesviewer = actionCollection()->addAction("tools_moleculeviewer"); m_pMoleculesviewer->setText(i18n("Molecular Editor...")); m_pMoleculesviewer->setIcon(QIcon::fromTheme("kalzium_molviewer")); m_pMoleculesviewer->setWhatsThis(i18nc("WhatsThis Help", "This tool allows you to view and edit 3D molecular structures.")); connect(m_pMoleculesviewer, SIGNAL(triggered()), this, SLOT(slotMoleculeviewer())); #if !defined(HAVE_OPENBABEL2) || !defined(HAVE_EIGEN) || !defined(HAVE_AVOGADRO) m_pMoleculesviewer->setEnabled(false); #endif m_pTables = actionCollection()->addAction("tools_tables"); m_pTables->setText(i18n("&Tables...")); m_pTables->setIcon(QIcon::fromTheme("kalzium_tables")); m_pTables->setWhatsThis(i18nc("WhatsThis Help", "This will open a dialog with listings of symbols and numbers related to chemistry.")); connect(m_pTables, SIGNAL(triggered()), this, SLOT(slotTables())); // other period view options m_pLegendAction = m_legendDock->toggleViewAction(); actionCollection()->addAction("view_legend", m_pLegendAction); m_pLegendAction->setIcon(QIcon::fromTheme("legend")); m_pLegendAction->setWhatsThis(i18nc("WhatsThis Help", "This will show or hide the legend for the periodic table.")); m_SidebarAction = m_dockWin->toggleViewAction(); actionCollection()->addAction("view_sidebar", m_SidebarAction); m_SidebarAction->setIcon(QIcon::fromTheme("sidebar")); m_SidebarAction->setWhatsThis(i18nc("WhatsThis Help", "This will show or hide a sidebar with additional information and a set of tools.")); m_SidebarAction = m_tableDock->toggleViewAction(); actionCollection()->addAction("view_tablebar", m_SidebarAction); m_SidebarAction->setIcon(QIcon::fromTheme("kalzium_tables")); m_SidebarAction->setWhatsThis(i18nc("WhatsThis Help", "This will show or hide a sidebar with additional information about the table.")); // the standard actions actionCollection()->addAction("saveAs", KStandardAction::saveAs(this, SLOT(slotExportTable()), actionCollection())); KStandardAction::preferences(this, SLOT(showSettingsDialog()), actionCollection()); actionCollection()->addAction("quit", KStandardAction::quit(qApp, SLOT(quit()), actionCollection())); m_legendWidget->LockWidget(); slotSwitchtoLookGradient(KalziumElementProperty::instance()->gradientId()); slotSwitchtoLookScheme(KalziumElementProperty::instance()->schemeId()); slotSwitchtoNumeration(Prefs::numeration()); slotSwitchtoTable(Prefs::table()); m_legendWidget->UnLockWidget(); m_legendWidget->updateContent(); // set the shell's ui resource file setXMLFile("kalziumui.rc"); setupGUI(); } void Kalzium::setupSidebars() { setDockNestingEnabled(true); m_legendWidget = new LegendWidget(this); m_legendDock = new QDockWidget(i18n("Legend"), this); m_legendDock->setObjectName(QLatin1String("kalzium-legend")); m_legendDock->setFeatures(QDockWidget::AllDockWidgetFeatures); m_legendDock->setWidget(m_legendWidget); connect(m_legendDock, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), m_legendWidget, SLOT(setDockArea(Qt::DockWidgetArea))); connect(m_legendWidget, SIGNAL(elementMatched(int)), m_periodicTable, SLOT(slotSelectAdditionalElement(int))); connect(m_legendWidget, SIGNAL(resetElementMatch()), m_periodicTable, SLOT(slotUnSelectElements())); m_TableInfoWidget = new TableInfoWidget(this); m_tableDock = new QDockWidget(i18n("Table Information"), this); m_tableDock->setWidget(m_TableInfoWidget); m_tableDock->setObjectName(QLatin1String("kalzium-tableinfo")); m_tableDock->setFeatures(QDockWidget::AllDockWidgetFeatures); m_dockWin = new QDockWidget(i18n("Information"), this); m_dockWin->setObjectName(QLatin1String("kalzium-sidebar")); m_dockWin->setFeatures(QDockWidget::AllDockWidgetFeatures); m_dockWin->setMinimumWidth(250); m_toolbox = new QToolBox(m_dockWin); m_dockWin->setWidget(m_toolbox); m_detailWidget = new DetailedGraphicalOverview(m_toolbox); m_detailWidget->setObjectName("DetailedGraphicalOverview"); m_detailWidget->setMinimumSize(200, m_detailWidget->minimumSize().height()); m_toolbox->addItem(m_detailWidget, QIcon::fromTheme("overview"), i18n("Overview")); m_gradientWidget = new GradientWidgetImpl(m_toolbox); m_gradientWidget->setObjectName("viewtWidget"); connect(m_gradientWidget, SIGNAL(gradientValueChanged(double)), KalziumElementProperty::instance(), SLOT(setSliderValue(double))); connect(m_gradientWidget->scheme_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(slotSwitchtoLookScheme(int))); connect(m_gradientWidget->gradient_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(slotSwitchtoLookGradient(int))); m_toolbox->addItem(m_gradientWidget, QIcon::fromTheme("statematter"), i18n("View")); addDockWidget(Qt::LeftDockWidgetArea, m_dockWin); addDockWidget(Qt::BottomDockWidgetArea, m_tableDock, Qt::Horizontal); addDockWidget(Qt::BottomDockWidgetArea, m_legendDock, Qt::Horizontal); m_tableDock->setVisible(false); } void Kalzium::slotExportTable() { QString fileName = QFileDialog::getSaveFileName(this, i18n("Save Kalzium's Table In"), QString(), i18n("Image files (*.png *.xpm *.jpg *.svg)")); if (fileName.endsWith(QLatin1String(".svg"))) { m_periodicTable->generateSvg(fileName); } else { QPixmap pix = QPixmap::grabWidget(m_periodicTable); pix.save(fileName); } } void Kalzium::slotGlossary() { if (!m_glossarydlg) { // creating the glossary dialog and loading the glossaries we have m_glossarydlg = new GlossaryDialog(this); m_glossarydlg->setObjectName(QLatin1String("glossary")); QString dir = QStandardPaths::locate(QStandardPaths::DataLocation, "data/", QStandardPaths::LocateDirectory); dir = QFileInfo(dir).absolutePath(); QString picturepath = dir + "/bg.jpg"; QUrl u = QUrl::fromLocalFile(dir + "/knowledge.xml"); Glossary *g = new Glossary(u); g->setName(i18n("Knowledge")); g->setBackgroundPicture(picturepath); m_glossarydlg->addGlossary(g, true); u = QUrl::fromLocalFile(dir + "/tools.xml"); g = new Glossary(u, dir + "/toolpics/"); g->setName(i18n("Tools")); g->setBackgroundPicture(picturepath); m_glossarydlg->addGlossary(g, true); } m_glossarydlg->show(); } void Kalzium::slotRS() { if (!m_rsDialog) { m_rsDialog = new RSDialog(this); } m_rsDialog->show(); } void Kalzium::slotOBConverter() { #ifdef HAVE_OPENBABEL2 KOpenBabel * d = new KOpenBabel(this); d->setAttribute(Qt::WA_DeleteOnClose); d->show(); #endif } MoleculeDialog *Kalzium::slotMoleculeviewer() { #if defined(HAVE_OPENBABEL2) && defined(HAVE_EIGEN) && defined(HAVE_AVOGADRO) if (!QGLFormat::hasOpenGL()) { QMessageBox::critical(Q_NULLPTR, i18n("Kalzium Error"), i18n("This system does not support OpenGL.")); return nullptr; } MoleculeDialog * d = new MoleculeDialog(this); d->show(); return d; #if 0 KPluginLoader loader("libkalziumglpart"); KPluginFactory* factory = loader.factory(); if (factory) { KParts::ReadOnlyPart *part = 0; part = static_cast(factory->create(this, "KalziumGLPart")); part->widget()->show(); } #endif #endif return nullptr; } void Kalzium::slotTables() { if (!m_tablesDialog) { m_tablesDialog = new TablesDialog(this); } m_tablesDialog->show(); } void Kalzium::slotIsotopeTable() { if (!m_isotopeDialog) { m_isotopeDialog = new IsotopeTableDialog(this); } m_isotopeDialog->show(); } void Kalzium::slotPlotData() { if (!m_elementDataPlotter) { m_elementDataPlotter = new ElementDataViewer(this); } m_elementDataPlotter->show(); } void Kalzium::showCalculator() { if (!m_calculator) { m_calculator = new calculator(this); } m_calculator -> show(); } void Kalzium::slotSwitchtoTable(int index) { m_periodicTable->slotChangeTable(index); m_TableInfoWidget->setTableType(index); if (m_infoDialog) { m_infoDialog->setTableType(m_periodicTable->table()); } Prefs::setTable(index); Prefs::self()->save(); } void Kalzium::slotSwitchtoNumeration(int index) { emit numerationChanged(index); Prefs::setNumeration(index); Prefs::self()->save(); } void Kalzium::slotSwitchtoLookGradient(int which) { qDebug() << "slotSwitchtoLookGradient Kalzium"; KalziumElementProperty::instance()->setGradient(which); look_action_gradients->blockSignals(true); m_gradientWidget->gradient_combo->blockSignals(true); look_action_gradients->setCurrentItem(which); m_gradientWidget->gradient_combo->setCurrentIndex(which); look_action_gradients->blockSignals(false); m_gradientWidget->gradient_combo->blockSignals(false); m_gradientWidget->slotGradientChanged(); m_legendWidget->updateContent(); } void Kalzium::slotSwitchtoLookScheme(int which) { qDebug() << "slotSwitchtoLookScheme Kalzium"; KalziumElementProperty::instance()->setScheme(which); m_gradientWidget->scheme_combo->blockSignals(true); look_action_schemes->blockSignals(true); look_action_schemes->setCurrentItem(which); m_gradientWidget->scheme_combo->setCurrentIndex(which); look_action_schemes->blockSignals(false); m_gradientWidget->scheme_combo->blockSignals(false); m_legendWidget->updateContent(); } void Kalzium::showSettingsDialog() { if (KConfigDialog::showDialog("settings")) { return; } //KConfigDialog didn't find an instance of this dialog, so lets create it : KConfigDialog *dialog = new KConfigDialog(this,"settings", Prefs::self()); // colors page Ui_setupColors ui_colors; QWidget *w_colors = new QWidget(this); w_colors->setObjectName("colors_page"); ui_colors.setupUi(w_colors); dialog->addPage(w_colors, i18n("Schemes"), "preferences-desktop-color"); // gradients page Ui_setupGradients ui_gradients; QWidget *w_gradients = new QWidget(this); w_gradients->setObjectName("gradients_page"); ui_gradients.setupUi(w_gradients); dialog->addPage(w_gradients, i18n("Gradients"), "preferences-desktop-color"); // units page m_unitsDialog = new UnitSettingsDialog(this); m_unitsDialog->setObjectName("units_page"); dialog->addPage(m_unitsDialog, i18n("Units"), "system-run"); Ui_setupCalc ui_calc; QWidget *w_calc = new QWidget(this); ui_calc.setupUi(w_calc); dialog->addPage(w_calc, i18n("Calculator"), "accessories-calculator"); connect(dialog, SIGNAL(settingsChanged(QString)), this, SLOT(slotUpdateSettings())); connect(dialog, SIGNAL(settingsChanged(QString)), m_gradientWidget, SLOT(slotGradientChanged())); dialog->show(); } void Kalzium::slotUpdateSettings() { Prefs::setLengthUnit(m_unitsDialog->getLenghtUnitId()); Prefs::setEnergiesUnit(m_unitsDialog->getEnergyUnitId()); Prefs::setTemperatureUnit(m_unitsDialog->getTemperatureUnitId()); Prefs::self()->save(); /*This slot function calls change the color of pse elements immideately after prefs change*/ slotSwitchtoLookGradient(Prefs::colorgradientbox()); slotSwitchtoLookScheme(Prefs::colorschemebox()); } void Kalzium::slotShowExportDialog() { if (!m_exportDialog) { m_exportDialog = new ExportDialog(this); } m_exportDialog->show(); } void Kalzium::setupStatusBar() { QStatusBar *statusBar = new QStatusBar(this); setStatusBar(statusBar); m_elementInfo = new QLabel(""); m_elementInfo->setAlignment(Qt::AlignRight); statusBar->addWidget(m_elementInfo, 1); statusBar->show(); } void Kalzium::elementHover(int num) { // extractIconicInformationAboutElement(num); Element *e = KalziumDataObject::instance()->element(num); m_elementInfo->setText(i18nc("For example: \"Carbon (6), Mass: 12.0107 u\"", "%1 (%2), Mass: %3 u", e->dataAsString(ChemicalDataObject::name), e->dataAsString(ChemicalDataObject::atomicNumber), e->dataAsString(ChemicalDataObject::mass))); qDebug() << "change item in status bar"; m_detailWidget->setElement(num); } // FIXME What is that function for? Does not seem to do anything useful... yet? void Kalzium::extractIconicInformationAboutElement(int elementNumber) { QString setname = "school"; QString pathname = QStandardPaths::locate(QStandardPaths::DataLocation, "data/iconsets/", QStandardPaths::LocateDirectory); pathname = QFileInfo(pathname).absolutePath(); QString filename = pathname + setname + '/' + "iconinformation.txt"; QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return; } QString infoline; QTextStream in(&file); while (!in.atEnd()) { QString tmp = in.readLine(); if (tmp.startsWith(QString::number(elementNumber))) { infoline = tmp; } } QString realText = "Moin dies ist ein test!"; //X QString realText = infoline.remove(QRegExp("\\d+ ")); } void Kalzium::openInformationDialog(int number) { if (m_infoDialog) { m_infoDialog->setElement(number); } else { m_infoDialog = new DetailedInfoDlg(number, this); // Remove the selection when this dialog finishes or hides. connect(m_infoDialog, SIGNAL(elementChanged(int)), m_periodicTable, SLOT(slotSelectOneElement(int))); connect(m_infoDialog, SIGNAL(elementChanged(int)), this, SLOT(elementHover(int))); } m_infoDialog->setTableType(m_periodicTable->table()); m_infoDialog->show(); } Kalzium::~Kalzium() { delete m_periodicTable; delete m_infoDialog; delete m_TableInfoWidget; delete m_legendWidget; delete m_gradientWidget; delete m_dockWin; delete m_legendDock; delete m_tableDock; } void Kalzium::loadMolecule(const QString &moleculeFile) { #if defined(HAVE_OPENBABEL2) && defined(HAVE_EIGEN) && defined(HAVE_AVOGADRO) MoleculeDialog *d = slotMoleculeviewer(); if (d) { d->loadMolecule(moleculeFile); } #endif } QSize Kalzium::sizeHint() const { return QSize(700, 500); } diff --git a/src/molcalcwidget.cpp b/src/molcalcwidget.cpp index 0d8ce77d..643dd57b 100644 --- a/src/molcalcwidget.cpp +++ b/src/molcalcwidget.cpp @@ -1,332 +1,331 @@ /*************************************************************************** * Copyright (C) 2003-2005, 2006 by Carsten Niehaus, cniehaus@kde.org * * Copyright (C) 2005 by Inge Wallin, inge@lysator.liu.se * * Copyright (C) 2009 by Kashyap. R. Puranik, kashthealien@gmail.com * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * * ***************************************************************************/ #include "molcalcwidget.h" //libscience #include #include "kalziumdataobject.h" #include "kalziumutils.h" #include "search.h" #include "prefs.h" #include -#include -#include -#include -#include - -#include -#include #include +#include +#include +#include #include +#include + +#include MolcalcWidget::MolcalcWidget(QWidget *parent) : QWidget(parent) { m_parser = new MoleculeParser(KalziumDataObject::instance()->ElementList); m_timer = new QTimer(this); m_timer->setSingleShot(true); ui.setupUi(this); connect(ui.calcButton, SIGNAL(clicked()), this, SLOT(slotCalculate())); connect(ui.formulaEdit, SIGNAL(returnPressed()), this, SLOT(slotCalculate())); connect(m_timer, SIGNAL(timeout()), this, SLOT(slotCalculate())); ui.formulaEdit->setClearButtonEnabled(true); clear(); if (!Prefs::addAlias()) { hideExtra(); ui.details->show(); } if (!Prefs::alias()) { ui.details->hide(); } if (Prefs::addAlias()) { connect(ui.alias, SIGNAL(clicked()), this, SLOT(addAlias())); QString shortForm, fullForm; // short form (symbol) and full form (expansion) QList shortList, fullList; // Used to store the short and full forms int i = 0; // loop counter // Search in User defined aliases. QString fileName = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "libkdeedu/data/symbols2.csv"); QFile file(fileName); // Check file validity if (!(!file.open(QIODevice::ReadOnly | QIODevice::Text))) { qDebug() << fileName << " opened"; QTextStream in(&file); // Get all shortForms and fullForms in the file. // eg the short form and full form extracted from ("Me","CH3") // are (Me) and (CH3) respectively while (!in.atEnd()) { QString line = in.readLine(); shortForm = line.section(',', 0, 0); shortForm.remove(QChar('\"')); fullForm = line.section(',', 1, 1); fullForm.remove(QChar('\"')); shortList << shortForm; fullList << fullForm; } int length = shortList.length(); ui.user_defined->setRowCount(length); // Put all the aliases on to the table in the user interface for (i = 0; i < length; ++i) { shortForm = shortList.takeFirst (); fullForm = fullList.takeFirst (); ui.user_defined->setItem((int)i, 0, new QTableWidgetItem (i18n("%1",shortForm + " : " + fullForm))); } } else { qDebug() << fileName << " could not be opened!"; } // Find the system defined aliases // Open the file fileName = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "libkdeedu/data/symbols.csv"); QFile file2(fileName); shortList.clear(); fullList.clear(); // Check file validity if (!(!file2.open(QIODevice::ReadOnly | QIODevice::Text))) { qDebug() << fileName << " opened"; QTextStream in(&file2); // Get all shortForms and fullForms in the file. while (!in.atEnd()) { QString line = in.readLine(); shortForm = line.section(',', 0, 0); shortForm.remove(QChar('\"')); fullForm = line.section(',', 1, 1); fullForm.remove(QChar('\"')); shortList << shortForm; fullList << fullForm; } int length = shortList.length(); ui.pre_defined->setRowCount(length); // Put all the aliases on to the table in the user interface for (i = 0; i < length; ++i) { shortForm = shortList.takeFirst(); fullForm = fullList.takeFirst(); ui.pre_defined->setItem((int)i, 0, new QTableWidgetItem (i18n("%1",shortForm + " : " + fullForm))); } } else { qDebug() << fileName << " could not be opened!"; } } } MolcalcWidget::~MolcalcWidget() { delete m_parser; } void MolcalcWidget::clear() { // Clear the data. m_mass = 0; m_elementMap.clear(); //stop the selection in the periodic table KalziumDataObject::instance()->search()->resetSearch(); // Clear the widgets. ui.resultLabel->clear(); ui.resultMass->clear(); ui.resultValue->hide(); ui.resultComposition->setText(i18n("Enter a formula in the\nwidget above and\nclick on 'Calc'.\nE.g. #Et#OH")); ui.resultMass->setToolTip(QString()); ui.resultComposition->setToolTip(QString()); ui.resultLabel->setToolTip(QString()); } void MolcalcWidget::updateUI() { qDebug() << "MolcalcWidget::updateUI()"; if (m_validInput) { qDebug() << "m_validInput == true"; // The complexString stores the whole molecule like this: // 1 Seaborgium. Cumulative Mass: 263.119 u (39.2564 %) QString complexString; if (Prefs::alias()) { double mass; QString str; int i = 0; // counter int rows = m_elementMap.elements().count(); // number of columns ui.table->setRowCount(rows); foreach (ElementCount *count, m_elementMap.map()) { // Update the resultLabel mass = count->element()->dataAsVariant(ChemicalDataObject::mass).toDouble(); ui.table->setItem(i, 0, new QTableWidgetItem (i18n("%1", count->element()->dataAsString(ChemicalDataObject::name)))); ui.table->setItem(i, 1, new QTableWidgetItem (i18n("%1", count->count()))); ui.table->setItem(i, 2, new QTableWidgetItem (i18n("%1", count->element()->dataAsString(ChemicalDataObject::mass)))); ui.table->setItem(i, 3, new QTableWidgetItem (i18n("%1", mass * count->count()))); ui.table->setItem(i, 4, new QTableWidgetItem (i18n("%1", mass * count->count()/ m_mass *100))); ++i; } // The alias list i = 0; rows = m_aliasList.count(); ui.alias_list->setRowCount(rows); foreach (const QString &alias, m_aliasList) { ui.alias_list->setItem(i++, 0, new QTableWidgetItem(alias)); } } // The composition ui.resultComposition->setText(compositionString(m_elementMap)); // The mass ui.resultMass->setText(i18n("Molecular mass: ")); ui.resultValue->setText(QString::number(m_mass) + " u"); ui.resultValue->show(); ui.resultMass->setToolTip(complexString); ui.resultComposition->setToolTip(complexString); #if 0 // FIXME //select the elements in the table QList list = m_elementMap.elements(); KalziumDataObject::instance()->findElements(list); #endif } else { //the input was invalid, so tell this the user qDebug() << "m_validInput == false"; ui.resultComposition->setText(i18n("Invalid input")); ui.resultLabel->setText(QString()); ui.resultMass->setText(QString()); ui.resultMass->setToolTip(i18n("Invalid input")); ui.resultComposition->setToolTip(i18n("Invalid input")); ui.resultLabel->setToolTip(i18n("Invalid input")); } } QString MolcalcWidget::compositionString(ElementCountMap &_map) { QString str; foreach (ElementCount * count, _map.map()) { str += i18n("%1%2 ", count->element()->dataAsString(ChemicalDataObject::symbol), count->count()); } return str; } // ---------------------------------------------------------------- // slots void MolcalcWidget::slotCalculate() { qDebug() << "MolcalcWidget::slotCalcButtonClicked()"; QString molecule = ui.formulaEdit->text(); // Parse the molecule, and at the same time calculate the total // mass, and the composition of it. if (!molecule.isEmpty()) { m_validInput = m_parser->weight(molecule, &m_mass, &m_elementMap); m_aliasList = m_parser->aliasList(); } qDebug() << "done calculating."; updateUI(); } void MolcalcWidget::keyPressEvent(QKeyEvent * /* e */) { m_timer->start(500); } void MolcalcWidget::addAlias() { QString shortForm = ui.shortForm->text(); QString fullForm = ui.fullForm ->text(); // Validate the alias double x; ElementCountMap y; ui.aliasMessage->setText(""); if (shortForm.length() < 2) { ui.aliasMessage->setText(i18n ("Symbol should consist of two or more letters.")); return; } if (m_parser->weight(shortForm, &x, &y)) { ui.aliasMessage->setText(i18n ("Symbol already being used")); return; } if (fullForm.isEmpty() || ! m_parser->weight(fullForm, & x, & y)) { ui.aliasMessage->setText(i18n ("Expansion is invalid, please specify a valid expansion")); return; } // Open the file to write QString fileName = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "libkdeedu/data/symbols2.csv"); QFile file(fileName); if (!(!file.open(QIODevice::WriteOnly| QIODevice::Append | QIODevice::Text))) { QTextStream out(&file); out << "\"" + shortForm + "\",\"" + fullForm + "\"\n"; qDebug() << fileName << "is the file."; qDebug() << "\"" + shortForm + "\",\"" + fullForm + "\"\n"; ui.aliasMessage->setText(i18n("done!")); return; } else { ui.aliasMessage->setText((i18n ("Unable to find the user defined alias file."))+fileName); return; } } void MolcalcWidget::hideExtra() { ui.details->hide(); ui.tabWidget->removeTab(1); } diff --git a/src/psetable/elementitem.cpp b/src/psetable/elementitem.cpp index 043817d0..9262145f 100644 --- a/src/psetable/elementitem.cpp +++ b/src/psetable/elementitem.cpp @@ -1,156 +1,157 @@ /********************************************************************** ElementItem - Element Item, part of the Periodic Table Graphics View for Avogadro Copyright (C) 2007-2009 by Marcus D. Hanwell marcus@cryos.org Some portions (C) 2010 by Konstantin Tokarev Copyright (C) 2010 by Etienne Rebetez etienne.rebetez@oberwallis.ch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Avogadro 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "elementitem.h" #include #include #include #include #include #include #include #include ElementItem::ElementItem(KalziumElementProperty *elProperty, int elementNumber) : m_width(40), m_height(40), m_element(elementNumber), m_property(elProperty) { // Want these items to be selectable setFlags(QGraphicsItem::ItemIsSelectable); - setAcceptsHoverEvents(true); + setAcceptHoverEvents(true); m_symbol = KalziumDataObject::instance()->element(m_element)->dataAsString(ChemicalDataObject::symbol); // Set some custom data to make it easy to figure out which element we are setData(0, m_element); } ElementItem::~ElementItem() { } QRectF ElementItem::boundingRect() const { return QRectF(0, 0, m_width, m_height); } QPainterPath ElementItem::shape() const { QPainterPath path; path.addRect(0, 0, m_width, m_height); return path; } void ElementItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) { QPen pen; pen.setColor(m_borderColor); pen.setWidth(1); painter->setPen(pen); painter->setBrush(m_brush); painter->drawRoundedRect(boundingRect(), m_width / 10, m_width / 10); if (isSelected()) { QColor selectedBackgroundColor = m_borderColor; selectedBackgroundColor.setAlpha(160); painter->setBrush(QBrush(QColor(selectedBackgroundColor))); painter->drawRoundedRect(boundingRect(), m_width / 10, m_width / 10); } pen.setColor(m_textColor); painter->setPen(pen); QFont symbolFont; switch (m_property->getMode()) { case KalziumElementProperty::NORMAL: symbolFont.setPointSize(12); symbolFont.setBold(true); painter->setFont(symbolFont); painter->drawText(boundingRect(), Qt::AlignCenter, m_symbol); symbolFont.setPointSize(7); symbolFont.setBold(false); painter->setFont(symbolFont); painter->drawText(QRectF(m_width / 14, m_height / 20, m_width, m_height / 2), Qt::AlignLeft, QString::number(m_element)); break; case KalziumElementProperty::GRADIENTVALUE: painter->drawText(QRectF(0, m_height / 20, m_width, m_height / 2), Qt::AlignCenter, m_symbol); symbolFont.setPointSize(7); painter->setFont(symbolFont); painter->drawText(QRectF(0, m_height / 2 - m_height / 20, m_width, m_height / 2), Qt::AlignCenter, m_textValue); break; } } void ElementItem::redraw() { m_brush = m_property->getElementBrush(m_element); m_textColor = m_property->getTextColor(m_element); m_borderColor = m_property->getBorderColor(m_element); m_textValue = getCurrentElementValue(); update(); } QString ElementItem::getCurrentElementValue() { double value = m_property->getValue(m_element); if (value == -1) { return i18n("n/a"); } return QString::number(value); } void ElementItem::hoverEnterEvent(QGraphicsSceneHoverEvent* event) { setZValue(200); moveBy(-m_width / 4, -m_height / 4); - scale(1.5, 1.5); + setScale(1.5); QGraphicsItem::hoverEnterEvent(event); } void ElementItem::hoverLeaveEvent(QGraphicsSceneHoverEvent* event) { resetTransform(); moveBy(m_width / 4, m_height / 4); setZValue(100); + setScale(1); QGraphicsItem::hoverLeaveEvent(event); } diff --git a/src/psetable/periodictablescene.cpp b/src/psetable/periodictablescene.cpp index 37e6cc35..2296e6de 100644 --- a/src/psetable/periodictablescene.cpp +++ b/src/psetable/periodictablescene.cpp @@ -1,141 +1,141 @@ /********************************************************************** PeriodicTableScene - Periodic Table Graphics Scene for Kalzium Copyright (C) 2005-2006 by Pino Toscano, toscano.pino@tiscali.it Copyright (C) 2003-2006 by Carsten Niehaus, cniehaus@kde.org Copyright (C) 2007-2009 by Marcus D. Hanwell, marcus@cryos.org Copyright (C) 2010 by Etienne Rebetez, etienne.rebetez@oberwallis.ch This file is part of the Kalzium molecular editor project. Kalzium is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Kalzium 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "periodictablescene.h" #include #include #include #include #include #include #include #include PeriodicTableScene::PeriodicTableScene(QObject *parent) : QGraphicsScene(parent), m_prevHoverElement(-1) { QPalette widgetPalette = palette(); setBackgroundBrush(QBrush(widgetPalette.window())); setItemIndexMethod(QGraphicsScene::NoIndex); m_hoverTimer.setSingleShot(true); - connect(&m_hoverTimer, SIGNAL(timeout()), this, SLOT(slotMouseover())); + connect(&m_hoverTimer, &QTimer::timeout, this, &PeriodicTableScene::slotMouseover); } PeriodicTableScene::~PeriodicTableScene() {} bool PeriodicTableScene::event(QEvent *e) { return QGraphicsScene::event(e); } void PeriodicTableScene::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (event->button() != Qt::LeftButton) { return; } - QGraphicsItem *item = QGraphicsScene::itemAt(event->scenePos()); + QGraphicsItem *item = QGraphicsScene::itemAt(event->scenePos(), QTransform()); if (item->data(0).toInt() > 0 && item->data(0).toInt() < 119) { m_eventPos = event->scenePos(); } else { emit freeSpaceClick(); } QGraphicsScene::mousePressEvent(event); } void PeriodicTableScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - QGraphicsItem *item = QGraphicsScene::itemAt(m_eventPos); + QGraphicsItem *item = QGraphicsScene::itemAt(m_eventPos, QTransform()); if ((QApplication::mouseButtons() & Qt::LeftButton) && (event->pos() - m_eventPos).manhattanLength() > QApplication::startDragDistance() && item->data(0).toInt() > 0) { Element* pointedElement = KalziumDataObject::instance()->element(item->data(0).toInt()); QDrag *drag = new QDrag(event->widget()); QMimeData *mimeData = new QMimeData; mimeData->setText(pointedElement->dataAsString(ChemicalDataObject::name)); drag->setMimeData(mimeData); QPixmap pix(item->boundingRect().width() + 1, item->boundingRect().height() + 1); pix.fill(palette().color(QPalette::Window)); QPainter painter(&pix); item->paint(&painter, new QStyleOptionGraphicsItem()); drag->setPixmap(pix); drag->start(Qt::CopyAction | Qt::MoveAction); m_eventPos = QPoint(); } else { m_eventPos = event->scenePos(); if (m_hoverTimer.isActive()) { m_hoverTimer.stop(); } m_hoverTimer.start(100); } QGraphicsScene::mouseMoveEvent(event); } void PeriodicTableScene::slotMouseover() { - QGraphicsItem *item = QGraphicsScene::itemAt(m_eventPos); + QGraphicsItem *item = QGraphicsScene::itemAt(m_eventPos, QTransform()); if (item->data(0).toInt() > 0 && item->data(0).toInt() < 119) { int num = item->data(0).toInt(); if ((num > 0) && (num != m_prevHoverElement)) { emit elementHovered(num); } m_prevHoverElement = num; } } void PeriodicTableScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (event->button() != Qt::LeftButton) { return; } - QGraphicsItem *item = QGraphicsScene::itemAt(event->scenePos()); + QGraphicsItem *item = QGraphicsScene::itemAt(event->scenePos(), QTransform()); if (item->data(0).toInt() > 0 && item->data(0).toInt() < 119) { emit(elementChanged(item->data(0).toInt())); } QGraphicsScene::mouseReleaseEvent(event); }