void IngredientMatcherDialog::itemRenamed( Q3ListViewItem* item, const QPoint &, int col ) { if ( col == 1 ) { QPointer<KDialog> amountEditDialog = new KDialog(this); amountEditDialog->setCaption(i18nc("@title:window", "Enter amount")); amountEditDialog->setButtons(KDialog::Cancel | KDialog::Ok); amountEditDialog->setDefaultButton(KDialog::Ok); amountEditDialog->setModal( false ); Q3GroupBox *box = new Q3GroupBox( 1, Qt::Horizontal, i18nc("@title:group", "Amount"), amountEditDialog ); AmountUnitInput *amountEdit = new AmountUnitInput( box, database ); // Set the values from the item if ( !item->text(1).isEmpty() ) { MixedNumber number; MixedNumber::fromString( item->text(2), number ); amountEdit->setAmount( number ); Unit u; u.setId(item->text(3).toInt()); amountEdit->setUnit( u ); } else { amountEdit->setAmount( MixedNumber(-1) ); Unit u; u.setId(-1); amountEdit->setUnit( u ); } amountEditDialog->setMainWidget(box); amountEditDialog->adjustSize(); amountEditDialog->resize( 400, amountEditDialog->size().height() ); amountEditDialog->setFixedHeight( amountEditDialog->size().height() ); if ( amountEditDialog->exec() == QDialog::Accepted ) { MixedNumber amount = amountEdit->amount(); Unit unit = amountEdit->unit(); if ( amount.toDouble() <= 1e-5 ) { amount = MixedNumber(-1); unit.setId(-1); item->setText(1,QString()); } else { item->setText(1,amount.toString()+' '+unit.determineName(amount.toDouble(), /*useAbbrev=*/false)); } item->setText(2,amount.toString()); item->setText(3,QString::number(unit.id())); IngredientList::iterator ing_it = m_item_ing_map[item]; (*ing_it).amount = amount.toDouble(); (*ing_it).units = unit; } delete amountEditDialog; } }
void MMFExporter::writeSingleIngredient( QString &content, const Ingredient &ing, bool is_sub ) { KConfigGroup config = KConfigGroup(KGlobal::config(), "Formatting" ); MixedNumber::Format number_format = ( config.readEntry( "Fraction" ) ).isEmpty() ? MixedNumber::MixedNumberFormat : MixedNumber::DecimalFormat; //columns 1-7 if ( ing.amount > 0 ) content += MixedNumber( ing.amount ).toString( number_format, false ).rightJustified( 7, ' ', true ) + ' '; else content += " "; //columns 9-10 bool found_short_form = false; for ( int i = 0; unit_info[ i ].short_form; i++ ) { if ( unit_info[ i ].expanded_form == ing.units.name() || unit_info[ i ].plural_expanded_form == ing.units.plural() || unit_info[ i ].short_form == ing.units.name() ) { found_short_form = true; content += QString( unit_info[ i ].short_form ).leftJustified( 2 ) + ' '; break; } } if ( !found_short_form ) { kDebug() << "Warning: unable to find Meal-Master abbreviation for: " << ing.units.name() ; kDebug() << " This ingredient (" << ing.name << ") will be exported without a unit" ; content += " "; } //columns 12-39 QString ing_name( ing.name ); if ( ing.prepMethodList.count() > 0 ) ing_name += "; " + ing.prepMethodList.join(", "); if ( is_sub ) ing_name += ", or"; if ( !found_short_form ) ing_name.prepend( ing.units.determineName(ing.amount, /*useAbbrev=*/false) + ' ' ); //try and split the ingredient on a word boundary int split_index; if ( ing_name.length() > 28 ) { split_index = ing_name.left(28).lastIndexOf(" ")+1; if ( split_index == 0 ) split_index = 28; } else split_index = 28; content += ing_name.left(split_index) + '\n'; for ( int i = 0; i < ( ing_name.length() - 1 ) / 28; i++ ) //if longer than 28 chars, continue on next line(s) content += " -" + ing_name.mid( 28 * ( i ) + split_index, 28 ) + '\n'; }