/*************************************************************************** * Copyright (C) 2006 by * * Jason Kivlighn (jkivlighn@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. * ***************************************************************************/ #include "conversiondialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #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( "Result:" ) ); 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( "Result:" ) ); resultText->setText(TQString::number(result.amount)+" "+((result.amount>1)?result.units.plural:result.units.name)); break; case RecipeDB::MismatchedPrepMethodUsingApprox: resultLabel->setText( i18n( "Approximated result:" ) ); resultText->setText(TQString::number(result.amount)+" "+((result.amount>1)?result.units.plural:result.units.name)); break; case RecipeDB::MissingUnitConversion: resultLabel->setText( i18n( "Error:" ) ); resultText->setText( i18n("Missing unit conversion") ); break; case RecipeDB::MissingIngredientWeight: resultLabel->setText( i18n( "Error:" ) ); resultText->setText( i18n("No ingredient weight available") ); break; case RecipeDB::MismatchedPrepMethod: resultLabel->setText( i18n( "Error:" ) ); resultText->setText( i18n("No ingredient weight available for this method of preparation") ); break; case RecipeDB::MissingIngredient: resultLabel->setText( i18n( "Error:" ) ); resultText->setText( i18n("Ingredient required for conversion") ); break; case RecipeDB::InvalidTypes: resultLabel->setText( i18n( "Error:" ) ); resultText->setText( i18n("Impossible unit conversion based on unit types") ); break; } } #include "conversiondialog.moc"