summaryrefslogtreecommitdiffstats
path: root/krecipes/src/widgets/amountunitinput.cpp
blob: 2461240238f2ab7dce5a68e37fccfe3cdfdf01ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/***************************************************************************
*   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 "amountunitinput.h"

#include <ntqheader.h>
#include <ntqlistview.h>

#include "fractioninput.h"
#include "unitcombobox.h"
#include "backends/recipedb.h"
#include "datablocks/mixednumber.h"

AmountUnitInput::AmountUnitInput( TQWidget *parent, RecipeDB *database, Unit::Type type, MixedNumber::Format format ) : TQHBox(parent),
  m_item(0), m_database(database)
{
	amountInput = new FractionInput(this,format);
	unitBox = new UnitComboBox(this,database,type);
	unitBox->reload();

	connect( amountInput, TQ_SIGNAL(valueChanged(const MixedNumber &)), TQ_SLOT(emitValueChanged()) );
	connect( unitBox, TQ_SIGNAL(activated(int)), TQ_SLOT(emitValueChanged()) );
	connect( amountInput, TQ_SIGNAL(returnPressed()), TQ_SIGNAL(doneEditing()) );
}

void AmountUnitInput::emitValueChanged()
{
	emit valueChanged( amount(), unit() );
}

void AmountUnitInput::setAmount( const MixedNumber &amount )
{
	amountInput->disconnect( this );
	if ( amount.toDouble() < 0 )
		amountInput->clear();
	else
		amountInput->setValue( amount, 0 );
	connect( amountInput, TQ_SIGNAL(valueChanged(const MixedNumber &)), TQ_SLOT(emitValueChanged()) );
}

void AmountUnitInput::setUnit( const Unit &unit )
{
	if ( unit.id == -1 )
		unitBox->setCurrentItem(0);
	else
		unitBox->setSelected( unit.id );

}

MixedNumber AmountUnitInput::amount() const
{
	return amountInput->value();
}

Unit AmountUnitInput::unit() const
{
	//TODO Potential for optimization here... avoid the database call
	return m_database->unitName( unitBox->id( unitBox->currentItem() ) );
}

#include "amountunitinput.moc"