Fri, 29 Jul 2022 13:12:26 +0200
First load of changes for hops. In EditHop load the dropdown buttons from the global table. Use named query fields. Added database utilisation and bu_factor fields for hop extracts. Added edit fields for these new fields. Added post boil SG, utilisation and bu_factor parameters to the toIBU function. Added hops form parameter to the hopFlavourContribution and hopAromaContribution display bars. In the hops inventory list dispay volumes instead of weight for hop extracts. Modified the TinsethIBU function to use utilisation and bu_factor parameters. Add calculations for co2 and iso hop extracts, this is work in progress. The toIBU function makes use of the preSG and postSG values to use the correct SG to caall the TinsethIBU function. This results in a bit lower IBU values mostly affecting the late additions. Added use hop at bottling for iso hop extracts like Tetra hops using the formula from BarthHaas.
# CMakeLists.txt is part of bmsapp # PROJECT(bmsapp) CMAKE_MINIMUM_REQUIRED( VERSION 3.6 ) SET(bmsapp_EXECUTABLE "bmsapp") # ===== Set application version ===== SET( bmsapp_VERSION_MAJOR 0 ) SET( bmsapp_VERSION_MINOR 2 ) SET( bmsapp_VERSION_PATCH 21 ) # Compile flags option(BUILD_DESIGNER_PLUGINS "If on, you will only build and install the designer plugins." OFF) option(UPDATE_TRANSLATIONS "Enable rescanning sources to update .ts files" OFF) IF( ${BUILD_DESIGNER_PLUGINS} ) message(STATUS "Building designer plugins" ) ELSE() message(STATUS "Building bmsapp" ) ENDIF() # Automatically run moc on source files when necessary set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) SET(CMAKE_INCLUDE_CURRENT_DIR ON) SET( CMAKE_CXX_FLAGS_RELEASE "-Wall -ansi -pedantic -Wno-long-long -O2 -pipe" ) SET( CMAKE_CXX_FLAGS_DEBUG "-Wall -g3 -pipe" ) # ===== Directories ===== IF( NOT EXEC_PREFIX ) SET( EXEC_PREFIX ${CMAKE_INSTALL_PREFIX} ) ENDIF() SET( DATAROOTDIR "${EXEC_PREFIX}/share" ) SET( BINDIR "${EXEC_PREFIX}/bin" ) IF( NOT DOCDIR ) SET( DOCDIR "${DATAROOTDIR}/doc/${CMAKE_PROJECT_NAME}" ) ENDIF() SET( DATAPATH "${DATAROOTDIR}/${CMAKE_PROJECT_NAME}" ) SET( TARGETPATH ${BINDIR} ) SET( DOCPATH ${DOCDIR} ) SET( LIBPATH "$ENV{QT5DIR}" ) SET(ROOTDIR "${CMAKE_CURRENT_SOURCE_DIR}") SET(SRCDIR "${ROOTDIR}/src") SET(UIDIR "${ROOTDIR}/ui") SET(DESIGNERDIR "${ROOTDIR}/designer") SET(DATADIR "${ROOTDIR}/data") SET(TRANSLATIONSDIR "${ROOTDIR}/translations") INCLUDE_DIRECTORIES(${SRCDIR}) INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}/src") # In case of out-of-source build. INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}/designer") # ===== Find Qt5 ===== # Minimum versio 5.13 for debug messages. find_package(Qt5 5.13 REQUIRED COMPONENTS Core Widgets Network Sql LinguistTools PrintSupport WebSockets Charts) INCLUDE_DIRECTORIES(${Qt5Core_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${Qt5Widgets_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${Qt5Network_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${Qt5Sql_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${Qt5LinguistTools_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${Qt5PrintSupport_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${Qt5WebSockets_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${Qt5Charts_INCLUDE_DIRS}) # Xml # Some extra files for the "make clean" target. SET_PROPERTY( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY ADDITIONAL_MAKE_CLEAN_FILES cmake_install.cmake compile_commands.json CMakeCache.txt ) # ===== Setup the config.h ===== SET( CONFIGDATADIR "${DATAPATH}/" ) SET( CONFIGDOCDIR "${DOCPATH}/" ) # Tell cmake where the configure file is and where # to put the output. All variables in config.in written as "${VAR}$ # will be replaced by VAR as determined by cmake in config.h. # Outputs only in the build directory. CONFIGURE_FILE( src/config.in src/config.h ) # ===== All sources ===== IF( ${BUILD_DESIGNER_PLUGINS} ) ADD_DEFINITIONS(${QT_DEFINITIONS}) ADD_DEFINITIONS(-DQT_PLUGIN) ADD_DEFINITIONS(-DQT_NO_DEBUG) ADD_DEFINITIONS(-DQT_SHARED) INCLUDE_DIRECTORIES( ${QT_INCLUDE_DIR} ${SRCDIR} ) LINK_DIRECTORIES( ${QT_LIBRARY_DIR} ) # By default only QtCore and QtGui are enabled SET( QT_USE_QTDESIGNER TRUE ) QT_WRAP_CPP( GEN_MOC_FILES1 ${SRCDIR}/RangedSlider.h designer/RangedSliderPlugin.h) add_library(bmsapp_rangeslider SHARED ${SRCDIR}/RangedSlider.cpp designer/RangedSliderPlugin.cpp ${GEN_MOC_FILES1} ) QT_WRAP_CPP( GEN_MOC_FILES2 ${SRCDIR}/NullDateEdit.h designer/NullDateEditPlugin.h) add_library(bmsapp_nulldate SHARED ${SRCDIR}/NullDateEdit.cpp designer/NullDateEditPlugin.cpp ${GEN_MOC_FILES2} ) QT_WRAP_CPP(GEN_MOC_FILES4 ${SRCDIR}/analog/thermometer.h ${SRCDIR}/analog/abstractmeter.h ${SRCDIR}/analog/widgetwithbackground.h designer/thermometer_plugin.h ) add_library(bmsapp_thermometer SHARED ${SRCDIR}/analog/thermometer.cpp ${SRCDIR}/analog/abstractmeter.cpp ${SRCDIR}/analog/widgetwithbackground.cpp designer/thermometer_plugin.cpp ${GEN_MOC_FILES4} ) QT_WRAP_CPP(GEN_MOC_FILES5 ${SRCDIR}/analog/manometer.h ${SRCDIR}/analog/abstractmeter.h ${SRCDIR}/analog/widgetwithbackground.h designer/manometer_plugin.h ) add_library(bmsapp_manometer SHARED ${SRCDIR}/analog/manometer.cpp ${SRCDIR}/analog/abstractmeter.cpp ${SRCDIR}/analog/widgetwithbackground.cpp designer/manometer_plugin.cpp ${GEN_MOC_FILES5} ) QT_WRAP_CPP(GEN_MOC_FILES6 ${SRCDIR}/analog/wallclock.h ${SRCDIR}/analog/widgetwithbackground.h designer/wallclock_plugin.h ) add_library(bmsapp_wallclock SHARED ${SRCDIR}/analog/wallclock.cpp ${SRCDIR}/analog/widgetwithbackground.cpp designer/wallclock_plugin.cpp ${GEN_MOC_FILES6} ) QT_WRAP_CPP(GEN_MOC_FILES7 ${SRCDIR}/analog/led.h ${SRCDIR}/analog/widgetwithbackground.h designer/led_plugin.h ) add_library(bmsapp_led SHARED ${SRCDIR}/analog/led.cpp ${SRCDIR}/analog/widgetwithbackground.cpp designer/led_plugin.cpp ${GEN_MOC_FILES7} ) ELSE() set( SRCS ${SRCDIR}/main.cpp ${SRCDIR}/RecipesTree.cpp ${SRCDIR}/AboutDialog.cpp ${SRCDIR}/InventorySuppliers.cpp ${SRCDIR}/EditSupplier.cpp ${SRCDIR}/InventoryFermentables.cpp ${SRCDIR}/EditFermentable.cpp ${SRCDIR}/InventoryHops.cpp ${SRCDIR}/EditHop.cpp ${SRCDIR}/InventoryYeasts.cpp ${SRCDIR}/EditYeast.cpp ${SRCDIR}/InventoryMiscs.cpp ${SRCDIR}/EditMisc.cpp ${SRCDIR}/InventoryWaters.cpp ${SRCDIR}/EditWater.cpp ${SRCDIR}/InventoryEquipments.cpp ${SRCDIR}/EditEquipment.cpp ${SRCDIR}/ProfileWaters.cpp ${SRCDIR}/EditProfileWater.cpp ${SRCDIR}/ProfileMashs.cpp ${SRCDIR}/EditProfileMash.cpp ${SRCDIR}/ProfileStyles.cpp ${SRCDIR}/EditProfileStyle.cpp ${SRCDIR}/ProfileFerments.cpp ${SRCDIR}/EditProfileFerment.cpp ${SRCDIR}/EditRecipe.cpp ${SRCDIR}/ProdInprod.cpp ${SRCDIR}/ProdOnName.cpp ${SRCDIR}/ProdOnCode.cpp ${SRCDIR}/ProdOnDate.cpp ${SRCDIR}/ProdOnTree.cpp ${SRCDIR}/MonNodes.cpp ${SRCDIR}/MonFermenters.cpp ${SRCDIR}/MonCO2meters.cpp ${SRCDIR}/MoniSpindels.cpp ${SRCDIR}/DetailNode.cpp ${SRCDIR}/DetailFermenter.cpp ${SRCDIR}/DetailCO2meter.cpp ${SRCDIR}/DetailiSpindel.cpp ${SRCDIR}/ChartCarbonate.cpp ${SRCDIR}/ChartFermenter.cpp ${SRCDIR}/ChartiSpindel.cpp ${SRCDIR}/EditProduct.cpp ${SRCDIR}/ImportXML.cpp ${SRCDIR}/Setup.cpp ${SRCDIR}/Utils.cpp ${SRCDIR}/PrinterDialog.cpp ${SRCDIR}/MainWindow.cpp ${SRCDIR}/database/database.cpp ${SRCDIR}/database/db_product.cpp ${SRCDIR}/database/db_recipe.cpp ${SRCDIR}/RangedSlider.cpp ${SRCDIR}/NullDateEdit.cpp ${SRCDIR}/callout.cpp ${SRCDIR}/analog/abstractmeter.cpp ${SRCDIR}/analog/functions.cpp ${SRCDIR}/analog/widgetwithbackground.cpp ${SRCDIR}/analog/manometer.cpp ${SRCDIR}/analog/thermometer.cpp ${SRCDIR}/analog/led.cpp ${SRCDIR}/analog/wallclock.cpp ${SRCDIR}/global.cpp ) set( HDRS ${SRCDIR}/RecipesTree.h ${SRCDIR}/AboutDialog.h ${SRCDIR}/InventorySuppliers.h ${SRCDIR}/EditSupplier.h ${SRCDIR}/InventoryFermentables.h ${SRCDIR}/EditFermentable.h ${SRCDIR}/InventoryHops.h ${SRCDIR}/EditHop.h ${SRCDIR}/InventoryYeasts.h ${SRCDIR}/EditYeast.h ${SRCDIR}/InventoryMiscs.h ${SRCDIR}/EditMisc.h ${SRCDIR}/InventoryWaters.h ${SRCDIR}/EditWater.h ${SRCDIR}/InventoryEquipments.h ${SRCDIR}/EditEquipment.h ${SRCDIR}/ProfileWaters.h ${SRCDIR}/EditProfileWater.h ${SRCDIR}/ProfileMashs.h ${SRCDIR}/EditProfileMash.h ${SRCDIR}/ProfileStyles.h ${SRCDIR}/EditProfileStyle.h ${SRCDIR}/ProfileFerments.h ${SRCDIR}/EditProfileFerment.h ${SRCDIR}/EditRecipe.h ${SRCDIR}/ProdInprod.h ${SRCDIR}/ProdOnName.h ${SRCDIR}/ProdOnCode.h ${SRCDIR}/ProdOnDate.h ${SRCDIR}/ProdOnTree.h ${SRCDIR}/MonNodes.h ${SRCDIR}/MonFermenters.h ${SRCDIR}/MonCO2meters.h ${SRCDIR}/MoniSpindels.h ${SRCDIR}/DetailNode.h ${SRCDIR}/DetailFermenter.h ${SRCDIR}/DetailCO2meter.h ${SRCDIR}/DetailiSpindel.h ${SRCDIR}/ChartCarbonate.h ${SRCDIR}/ChartFermenter.h ${SRCDIR}/ChartiSpindel.h ${SRCDIR}/EditProduct.h ${SRCDIR}/ImportXML.h ${SRCDIR}/Setup.h ${SRCDIR}/Utils.h ${SRCDIR}/PrinterDialog.h ${SRCDIR}/MainWindow.h ${SRCDIR}/database/database.h ${SRCDIR}/database/db_product.h ${SRCDIR}/database/db_recipe.h ${SRCDIR}/RangedSlider.h ${SRCDIR}/NullDateEdit.h ${SRCDIR}/callout.h ${SRCDIR}/analog/abstractmeter.h ${SRCDIR}/analog/functions.h ${SRCDIR}/analog/widgetwithbackground.h ${SRCDIR}/analog/manometer.h ${SRCDIR}/analog/thermometer.h ${SRCDIR}/analog/led.h ${SRCDIR}/analog/wallclock.h ${SRCDIR}/global.h ) set( UIS ${UIDIR}/AboutDialog.ui ${UIDIR}/EditSupplier.ui ${UIDIR}/EditFermentable.ui ${UIDIR}/EditHop.ui ${UIDIR}/EditYeast.ui ${UIDIR}/EditMisc.ui ${UIDIR}/EditWater.ui ${UIDIR}/EditEquipment.ui ${UIDIR}/EditProfileWater.ui ${UIDIR}/EditProfileMash.ui ${UIDIR}/EditProfileStyle.ui ${UIDIR}/EditProfileFerment.ui ${UIDIR}/EditRecipe.ui ${UIDIR}/EditProduct.ui ${UIDIR}/DetailNode.ui ${UIDIR}/DetailFermenter.ui ${UIDIR}/DetailCO2meter.ui ${UIDIR}/DetailiSpindel.ui ${UIDIR}/ImportXML.ui ${UIDIR}/MainWindow.ui ) set( TS_FILES ${TRANSLATIONSDIR}/bmsapp_en.ts # English ${TRANSLATIONSDIR}/bmsapp_nl.ts # Dutch ) set( SOURCE_FILES ${SRCS} ${HDRS} ${UIS} resources/icons.qrc resources/qdarkstyle/theme/style.qrc ) ENDIF() # ===== Build the application ===== IF( ${BUILD_DESIGNER_PLUGINS} ) ELSE() # Run with cmake -DUPDATE_TRANSLATIONS=ON .. # or cmake -DUPDATE_TRANSLATIONS=OFF .. if(UPDATE_TRANSLATIONS) message("** parse sources for new translations") qt5_create_translation(QM_FILES ${SOURCE_FILES} ${TS_FILES}) else() message("** update qm files") qt5_add_translation(QM_FILES ${TS_FILES}) endif() SET( bmsapp_DESKTOP ${ROOTDIR}/bmsapp.desktop ) add_executable(${bmsapp_EXECUTABLE} ${SOURCE_FILES} ${QM_FILES}) target_link_libraries(${bmsapp_EXECUTABLE} Qt5::Core Qt5::Widgets Qt5::Network Qt5::Sql Qt5::PrintSupport Qt5::WebSockets Qt5::Charts) # `make translations' add_custom_target(translations DEPENDS ${QM_FILES}) ENDIF() # ===== Install the application ===== IF( ${BUILD_DESIGNER_PLUGINS} ) INSTALL(TARGETS bmsapp_rangeslider bmsapp_nulldate bmsapp_thermometer bmsapp_manometer bmsapp_led bmsapp_wallclock DESTINATION "${LIBPATH}/plugins/designer" ) ELSE() install(TARGETS ${bmsapp_EXECUTABLE} RUNTIME DESTINATION bin ) INSTALL( FILES ${bmsapp_DESKTOP} DESTINATION "${DATAROOTDIR}/applications" ) INSTALL( FILES ${QM_FILES} DESTINATION "${DATAROOTDIR}/bmsapp/translations" ) ENDIF()