diff options
Diffstat (limited to 'src/dialogs/conversiondialog.cpp')
-rw-r--r-- | src/dialogs/conversiondialog.cpp | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/src/dialogs/conversiondialog.cpp b/src/dialogs/conversiondialog.cpp new file mode 100644 index 0000000..c9e3f51 --- /dev/null +++ b/src/dialogs/conversiondialog.cpp @@ -0,0 +1,166 @@ +/*************************************************************************** +* Copyright (C) 2006 by * +* Jason Kivlighn ([email protected]) * +* * +* 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 "conversiondialog.h" + +#include <tqvariant.h> +#include <tqpushbutton.h> +#include <kcombobox.h> +#include <tqlabel.h> +#include <klineedit.h> +#include <tqlayout.h> +#include <tqtooltip.h> +#include <tqwhatsthis.h> +#include <tqvbox.h> + +#include <kcombobox.h> +#include <klineedit.h> +#include <tdelocale.h> + +#include "backends/recipedb.h" +#include "widgets/unitcombobox.h" +#include "widgets/ingredientcombobox.h" +#include "widgets/prepmethodcombobox.h" +#include "widgets/fractioninput.h" + +ConversionDialog::ConversionDialog( TQWidget* parent, RecipeDB *db, const char* name ) + : KDialogBase( parent, name, false, i18n( "Measurement Converter" ), + KDialogBase::Close | KDialogBase::User1 | KDialogBase::Help, KDialogBase::Close ), + m_database(db) +{ + setHelp("measure-converter"); + setButtonText( KDialogBase::User1, i18n("Convert") ); + + setSizeGripEnabled( TRUE ); + + TQVBox *page = makeVBoxMainWidget(); + + TQHBox *vbox = new TQVBox(page); + + TQHBox *fromTopBox = new TQHBox(vbox); + convertLabel = new TQLabel( fromTopBox, "convertLabel" ); + + amountEdit = new FractionInput( fromTopBox ); + + fromUnitBox = new UnitComboBox( fromTopBox, db ); + fromUnitBox->reload(); + fromTopBox->setStretchFactor( fromUnitBox, 2 ); + fromTopBox->setSpacing(3); + + TQHBox *fromBottomBox = new TQHBox(vbox); + + ingredientBox = new IngredientComboBox( FALSE, fromBottomBox, db, i18n( "--Ingredient (optional)--" ) ); + ingredientBox->reload(); + + prepMethodBox = new PrepMethodComboBox( false, fromBottomBox, db, i18n( "-No Preparation-" ) ); + prepMethodBox->reload(); + fromBottomBox->setSpacing(3); + + TQHBox *toBox = new TQHBox(vbox); + + toLabel = new TQLabel( toBox, "toLabel" ); + + toUnitBox = new UnitComboBox( toBox, db ); + toUnitBox->reload(); + toBox->setStretchFactor( toUnitBox, 2 ); + toBox->setSpacing(8); + + TQHBox *resultBox = new TQHBox(vbox); + resultLabel = new TQLabel( resultBox, "resultLabel" ); + resultText = new TQLabel( resultBox, "resultText" ); + resultBox->setStretchFactor( resultText, 2 ); + + languageChange(); + + setInitialSize( TQSize(300, 200).expandedTo(minimumSizeHint()) ); + + // signals and slots connections + connect ( this, TQ_SIGNAL( closeClicked() ), this, TQ_SLOT( accept() ) ); +} + +ConversionDialog::~ConversionDialog() +{ +} + +void ConversionDialog::languageChange() +{ + convertLabel->setText( i18n( "Convert" ) ); + toLabel->setText( i18n( "To" ) ); + resultLabel->setText( i18n( "<b>Result:</b>" ) ); + resultText->setText( TQString::null ); +} + +void ConversionDialog::show() +{ + reset(); + KDialogBase::show(); +} + +void ConversionDialog::reset() +{ + resultText->setText( TQString::null ); + ingredientBox->setCurrentItem( 0 ); + prepMethodBox->setCurrentItem( 0 ); + toUnitBox->setCurrentItem( 0 ); + fromUnitBox->setCurrentItem( 0 ); + amountEdit->clear(); +} + +void ConversionDialog::slotUser1() +{ + convert(); +} + +void ConversionDialog::convert() +{ + Ingredient result, ing; + Unit unit = m_database->unitName(toUnitBox->id(toUnitBox->currentItem())); + + ing.amount = amountEdit->value().toDouble(); + ing.ingredientID = ingredientBox->id(ingredientBox->currentItem()); + ing.units = m_database->unitName(fromUnitBox->id(fromUnitBox->currentItem())); + + int prepID = prepMethodBox->id(prepMethodBox->currentItem()); + if ( prepID != -1 ) + ing.prepMethodList.append(Element(TQString::null,prepID)); + + switch ( m_database->convertIngredientUnits( ing, unit, result ) ) { + case RecipeDB::Success: + resultLabel->setText( i18n( "<b>Result:</b>" ) ); + resultText->setText(TQString::number(result.amount)+" "+((result.amount>1)?result.units.plural:result.units.name)); + break; + case RecipeDB::MismatchedPrepMethodUsingApprox: + resultLabel->setText( i18n( "<b>Approximated result:</b>" ) ); + resultText->setText(TQString::number(result.amount)+" "+((result.amount>1)?result.units.plural:result.units.name)); + break; + case RecipeDB::MissingUnitConversion: + resultLabel->setText( i18n( "<b>Error:</b>" ) ); + resultText->setText( i18n("Missing unit conversion") ); + break; + case RecipeDB::MissingIngredientWeight: + resultLabel->setText( i18n( "<b>Error:</b>" ) ); + resultText->setText( i18n("No ingredient weight available") ); + break; + case RecipeDB::MismatchedPrepMethod: + resultLabel->setText( i18n( "<b>Error:</b>" ) ); + resultText->setText( i18n("No ingredient weight available for this method of preparation") ); + break; + case RecipeDB::MissingIngredient: + resultLabel->setText( i18n( "<b>Error:</b>" ) ); + resultText->setText( i18n("Ingredient required for conversion") ); + break; + case RecipeDB::InvalidTypes: + resultLabel->setText( i18n( "<b>Error:</b>" ) ); + resultText->setText( i18n("Impossible unit conversion based on unit types") ); + break; + } +} + +#include "conversiondialog.moc" |