src/EditProduct.h

Fri, 20 Jan 2023 16:44:08 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 20 Jan 2023 16:44:08 +0100
changeset 467
c5f6f3f1b714
parent 465
8fc909360552
child 468
b21da6f583be
permissions
-rw-r--r--

Added more buttons to the images tab. Load images from the database and display thumbnails added. Added support for jpeg files. Rename pictures in the database to .png. Added temporary images_list, images_count and images_current variables to the product record.

#ifndef _EDITPRODUCT_H
#define _EDITPRODUCT_H

#include "MainWindow.h"

#include <QDialog>
#include <QStringList>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDoubleSpinBox>
#include <QCheckBox>
#include <QComboBox>
#include <QRadioButton>
#include <QLineEdit>
#include <QDialogButtonBox>
#include <QList>
#include <QLabel>
#include <QCalendarWidget>
#include <QClipboard>
#include <QTableWidget>

#include "global.h"

class Callout;

struct StepResult {
    double	svol;
    double	irate;
    double	ncells;
    double	totcells;
    double	growf;
};

namespace Ui {
class EditProduct;
}

class EditProduct : public QDialog
{
    Q_OBJECT

signals:
    void entry_changed();

public:
    explicit EditProduct(int id, QWidget *parent = 0);
    ~EditProduct();

public slots:
    void tooltip(QPointF point, bool state);

private slots:
    void on_saveButton_clicked();
    void on_quitButton_clicked();
    void on_deleteButton_clicked();
    void on_exportButton_clicked();
    void on_printButton_clicked();
    void is_changed();
    void tab_changed();
    void code_changed(QString);
    void name_changed(QString);
    void notes_changed();
    void style_changed(int val);
    void colormethod_changed(int val);
    void ibumethod_changed(int val);
    void est_og_changed(double val);
    void efficiency_changed(double val);
    void boil_time_changed(int val);
    void batch_size_changed(double val);
    void brew_type_changed(int val);
    void locked_changed(bool val);
    void eq_changed(int val);
    void refreshFermentables();
    void refreshHops();
    void refreshMiscs();
    void refreshYeasts();
    void refreshMashs();
    void refreshWaters();
    void refreshAll();
    void ferment_amount_changed(double val);
    void ferment_pct_changed(double val);
    void ferment_to100_changed(bool val);
    void ferment_select_changed(int val);
    void ferment_instock_changed(bool val);
    void ferment_added_changed(int val);
    void hop_amount_changed(double val);
    void hop_time_changed(int val);
    void hop_select_changed(int val);
    void hop_instock_changed(bool val);
    void hop_useat_changed(int val);
    void misc_amount_changed(double val);
    void misc_time_changed(int val);
    void misc_select_changed(int val);
    void misc_instock_changed(bool val);
    void misc_useat_changed(int val);
    void yeast_prod_date_clear();
    void yeast_prod_date_today();
    void yeast_prod_date_changed(QDate val);
    void yeast_method_changed(int val);
    void yeast_starter_sg_changed(double val);
    void yeast_starter_edit_clicked();
    void yeast_pitchrate_button_clicked();
    void yeast_retry_button_clicked();
    void yeast_amount_changed(double val);
    void yeast_select_changed(int val);
    void yeast_instock_changed(bool val);
    void yeast_useat_changed(int val);
    void pitchindex_changed(int val);
    void pitchrate_changed(double val);
    void addFermentRow_clicked();
    void deleteFermentRow_clicked();
    void editFermentRow_clicked();
    void addHopRow_clicked();
    void deleteHopRow_clicked();
    void editHopRow_clicked();
    void addMiscRow_clicked();
    void deleteMiscRow_clicked();
    void editMiscRow_clicked();
    void addYeastRow_clicked();
    void deleteYeastRow_clicked();
    void editYeastRow_clicked();
    void addMashRow_clicked();
    void deleteMashRow_clicked();
    void editMashRow_clicked();
    void upMashRow_clicked();
    void downMashRow_clicked();
    void split_add_clicked();
    void split_del_clicked();
    void split_splitat_changed(int val);
    void split_table_changed(int nRow, int nCol);

    void w1_name_changed(int val);
    void w2_name_changed(int val);
    void w2_volume_changed(double val);
    void wb_cacl2_changed(double val);
    void wb_caso4_changed(double val);
    void wb_mgso4_changed(double val);
    void wb_nacl_changed(double val);
    void wb_mgcl2_changed(double val);
    void wb_nahco3_changed(double val);
    void wb_caco3_changed(double val);
    void sp_cacl2_changed(double val);
    void sp_caso4_changed(double val);
    void sp_mgso4_changed(double val);
    void sp_nacl_changed(double val);
    void sp_mgcl2_changed(double val);
    void mw_calc_acid_clicked();
    void wt_target_changed(int val);
    void mw_ph_changed(double val);
    void mw_acid_changed(double val);
    void mw_type_changed(int val);
    void sp_volume_changed(double val);
    void sp_temp_changed(double val);
    void sp_group_changed(int val);
    void sp_type_changed(int val);
    void sp_ph_changed(double val);
    void sp_acid_changed(double val);
    void step_name_changed(QString val);
    void step_type_changed(int val);
    void step_temp_changed(double val);
    void end_temp_changed(double val);
    void step_time_changed(double val);
    void ramp_time_changed(double val);
    void infuse_changed(double val);
    void mash_select_changed(int val);
    void mash_name_changed(QString);
    void stepph_changed(double val);
    void stepsg_changed(double val);
    void stepbrix_changed(double val);
    void brew_date_clear();
    void brew_date_today();
    void brew_start_date_changed(QDate val);
    void brew_start_time_changed(QTime val);
    void brew_end_today();
    void brew_end_date_changed(QDate val);
    void brew_end_time_changed(QTime val);
    void brew_date_ack();
    void brew_mashph_changed(double val);
    void brew_mashsg_changed(double val);
    void brew_spargeph_changed(double val);
    void brew_preboilph_changed(double val);
    void brew_preboilsg_changed(double val);
    void brew_preboilvol_changed(double val);
    void brew_preboil_cm_changed(double val);
    void brew_preboil_brix_button();
    void brew_preboil_button();
    void brew_aboilph_changed(double val);
    void brew_aboilsg_changed(double val);
    void brew_aboilvol_changed(double val);
    void brew_aboil_cm_changed(double val);
    void brew_aboil_brix_button();
    void brew_aboil_button();
    void brew_cooling_to_changed(double val);
    void brew_cooling_time_changed(double val);
    void brew_whirlpool9_changed(double val);
    void brew_whirlpool7_changed(double val);
    void brew_whirlpool6_changed(double val);
    void brew_whirlpool2_changed(double val);
    void brew_aerwith_changed(int val);
    void brew_aerspeed_changed(double val);
    void brew_aertime_changed(double val);
    void brew_trubloss_changed(double val);
    void brew_topupwater_changed(double val);
    void brew_brix_changed(double val);
    void brew_log_button();
    void savePNG();
    void brix_changed(double val);
    void primary_start_changed(double val);
    void primary_peak_changed(double val);
    void primary_end_changed(double val);
    void primary_sg_changed(double val);
    void primary_sg_button();
    void primary_date_changed(QDate val);
    void primary_date_button();
    void primary_date_ack();
    void secondary_temp_changed(double val);
    void secondary_sg_changed(double val);
    void secondary_sg_button();
    void secondary_date_changed(QDate val);
    void secondary_date_button();
    void secondary_date_ack();
    void tertiary_temp_changed(double val);
    void tertiary_sg_changed(double val);
    void tertiary_sg_button();
    void ferm_log1_button();
    void ferm_log2_button();
    void pack_date_changed(QDate val);
    void pack_date_button();
    void pack_date_ack();
    void pack_volume_changed(double val);
    void pack_ph_changed(double val);
    void pack_infusion_vol_changed(double val);
    void pack_infusion_abv_changed(double val);
    void pack_infusion_txt_changed(QString val);
    void pack_abv_changed(double val);
    void bottle_volume_changed(double val);
    void bottle_co2_changed(double val);
    void bottle_sugar_changed(int val);
    void bottle_water_changed(double val);
    void bottle_temp_changed(double val);
    void kegs_volume_changed(double val);
    void kegs_co2_changed(double val);
    void kegs_sugar_changed(int val);
    void kegs_water_changed(double val);
    void kegs_forced_changed(bool val);
    void kegs_temp_changed(double val);
    void carb_log_button();
    void taste_date_changed(QDate val);
    void taste_date_button();
    void taste_date_ack();
    void taste_rate_changed(double val);
    void taste_color_changed(QString val);
    void taste_transparency_changed(QString val);
    void taste_head_changed(QString val);
    void taste_aroma_changed(QString val);
    void taste_taste_changed(QString val);
    void taste_mouthfeel_changed(QString val);
    void taste_aftertaste_changed(QString val);
    void taste_notes_changed();

    void addImage_clicked();
    void delImage_clicked();
    void nextImage_clicked();
    void prevImage_clicked();
    void downloadImage_clicked();
    void printImage_clicked();
    void selectImage_clicked(int val);

    /* Modified progress bars */
    void ferment_perc_mash_valueChanged(int value);
    void ferment_perc_sugars_valueChanged(int value);
    void ferment_perc_cara_valueChanged(int value);
    void ferment_lintner_valueChanged(int value);
    void hop_Flavour_valueChanged(int value);
    void hop_Aroma_valueChanged(int value);

private:
    Ui::EditProduct *ui;
    QString bar_red = "QProgressBar::chunk {background: #FF0000;}";
    QString bar_green = "QProgressBar::chunk {background: #008C00;}";
    QString bar_20 = "QProgressBar::chunk {background: #004D00;}";
    int recno;
    bool textIsChanged = false;
    double ret_fg, sg_return;
    /*
     * Variables for popup ingredients editing.
     */
    QComboBox *fselectEdit, *faddedEdit, *hselectEdit,*haddedEdit, *useatEdit, *mselectEdit, *yselectEdit, *splitatEdit;
    QLineEdit *fnameEdit, *fsupplierEdit, *hnameEdit, *horiginEdit, *mnameEdit, *ynameEdit, *ylaboratoryEdit, *yproduct_idEdit, *stepnameEdit;
    QDoubleSpinBox *famountEdit, *pctEdit, *fmaxEdit, *hamountEdit, *ibuEdit, *mamountEdit, *yamountEdit, *stepphEdit, *stepsgEdit;
    QDoubleSpinBox *steptempEdit, *endtempEdit, *steptimeEdit, *ramptimeEdit, *stepivolEdit, *stepitmpEdit, *brixEdit;
    QDoubleSpinBox *vol_leftEdit, *vol_availEdit;
    QSpinBox *htimeEdit, *mtimeEdit;
    QCheckBox *to100Edit, *finstockEdit, *hinstockEdit, *minstockEdit, *yinstockEdit;
    QLabel *htimeLabel, *mtimeLabel, *mamountLabel, *yamountLabel, *ivolLabel, *itmpLabel;
    QTableWidget *splitTable;
    QPushButton *split_addButton, *split_delButton;
    QChart *chart;
    QChartView *chartView;
    Callout *t_tooltip = 0;

    void to100Fermentables(int row);
    static bool ferment_sort_test(const Fermentables &D1, const Fermentables &D2);
    static bool hop_sort_test(const Hops &D1, const Hops &D2);
    static bool misc_sort_test(const Miscs &D1, const Miscs &D2);
    static bool yeast_sort_test(const Yeasts &D1, const Yeasts &D2);
    void WindowTitle();
    void calcSupplies();
    void showEquipment();
    void initEquipment();
    void setStage();
    void brewing_salt_sub(QString salt, double val, int use);
    void set_brewing_salt(QString salt, double val, int use);
    void calcMiscs();
    void calcFermentables();
    void calcFermentablesFromOG(double og);
    void calcIBUs();
    void calcStyle();
    void calcBU();
    void adjustHops(double factor);
    void adjustMiscs(double factor);
    double ZAlkalinity(double pHZ);
    double ZRA(double pHZ);
    double BufferCapacity(Fermentables F);
    double AcidRequired(double ZpH, Fermentables F);
    double ProtonDeficit(double pHZ);
    double MashpH();
    void setButtons(bool locked);
    void calcWater();
    void calcSparge();
    double GetBUGU();
    double GetOptSO4Clratio();
    double getGrowthRate(int stype, double totcells, double egrams);
    StepResult calcStep(double svol, int stype, double start);
    void calcSteps(int stype, double start, double needed);
    void initYeast();
    void calcViability();
    void calcYeast();
    void adjustYeasts(double factor);
    double infusionVol(double step_infused, double step_mashkg, double infuse_temp, double step_temp, double last_temp);
    double decoctionVol(double step_volume, double step_temp, double prev_temp);
    void calcMash();
    void adjustWaters(double factor);
    void updateBrewday();
    void calcEfficiencyBeforeBoil();
    void calcEfficiencyAfterBoil();

    /**
     * @brief Popup to enter a brix value to get SG before fermentation.
     * @param sg The SG is known, else 0.
     * @param sg_default Use this if sg is 0.
     * @return The sg calculated from the brix value.
     */
    double brew_brix_edit(double sg, double sg_default);

    /**
     * @brief Calculate height in cm and ask for measured cm from the kettle top.
     * @param volume The known volume, or zero if initial value is to be used.
     * @param kettle_volume The volume of the kettle.
     * @param kettle_height The internal height of the kettle.
     * @param est_volume The default estimated volume.
     * @param aboil True if after boil volume is asked, else preboil. Selects destination of result.
     * @param chiller True if an immersion chiller is in the kettle, give a extra remark.
     */
    void brew_volume_calc(double volume, double kettle_volume, double kettle_height, double est_volume, bool aboil, bool chiller);
    double get_fg(double gravity);
    double GetPressure(double CO2, double T);
    double CarbCO2ToPressure(double CO2, double T);
    void calcPack();
    void exportBeerXML();
    void copyProduct();
    void copyRecipe();
    void toforumProduct();
    void splitProduct();
    void split_show();
    void reduce_fermentable(int i);
    void reduce_hop(int i);
    void reduce_misc(int i);
    void reduce_yeast(int i);
    void inventory_reduce();
    bool block_fermentable(int stage, int added);
    bool block_hop(int stage, int useat);
    bool block_misc(int stage, int use_use);
    bool block_yeast(int stage, int use);
    void check_waters();
    void images_Init();
    void images_Thumbnails();
    void images_Main(int id);
};

#endif

mercurial