Exemplo n.º 1
0
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;
	}
}
Exemplo n.º 2
0
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';
}