diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2024-10-13 11:56:14 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2024-10-29 21:58:42 +0900 |
commit | 2879ff70be9271550477982a1a6371714db38562 (patch) | |
tree | c2054149dba923ab080fe7093432c7663a990111 /src/widgets/unitcombobox.cpp | |
parent | 3eb38d2556f676d1027746f20bf12a1dd74451ef (diff) | |
download | krecipes-2879ff70.tar.gz krecipes-2879ff70.zip |
Rearrange folders structure to remove unnecessary 'krecipes' second level subfolder
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit 0c8ed6c9a4000af8f48581a81c4b5c2f5b9fd502)
Diffstat (limited to 'src/widgets/unitcombobox.cpp')
-rw-r--r-- | src/widgets/unitcombobox.cpp | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/src/widgets/unitcombobox.cpp b/src/widgets/unitcombobox.cpp new file mode 100644 index 0000000..526f61a --- /dev/null +++ b/src/widgets/unitcombobox.cpp @@ -0,0 +1,145 @@ +/*************************************************************************** +* 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 "unitcombobox.h" + +#include <tqlistbox.h> + +#include <tdelocale.h> +#include <tdeconfig.h> +#include <tdeglobal.h> + +#include "backends/recipedb.h" +#include "datablocks/elementlist.h" + +UnitComboBox::UnitComboBox( TQWidget *parent, RecipeDB *db, Unit::Type type ) : KComboBox( parent ), + database( db ), m_type(type) +{ + connect( database, TQ_SIGNAL( unitCreated( const Unit & ) ), TQ_SLOT( createUnit( const Unit & ) ) ); + connect( database, TQ_SIGNAL( unitRemoved( int ) ), TQ_SLOT( removeUnit( int ) ) ); +} + +void UnitComboBox::popup() +{ + if ( count() == 1 ) + reload(); + KComboBox::popup(); +} + +Unit UnitComboBox::unit() const +{ + Unit u; + u.name = currentText(); + u.id = id(currentItem()); + return u; +} + +void UnitComboBox::reload() +{ + TQString remember_filter = currentText(); + + UnitList unitList; + database->loadUnits( &unitList, m_type ); + + clear(); + unitComboRows.clear(); + + //Now load the categories + loadUnits(unitList); + + if ( listBox()->findItem( remember_filter, TQt::ExactMatch ) ) { + setCurrentText( remember_filter ); + } +} + +void UnitComboBox::loadUnits( const UnitList &unitList ) +{ + int row = 0; + for ( UnitList::const_iterator it = unitList.begin(); it != unitList.end(); ++it ) { + insertItem( (*it).name ); + unitComboRows.insert( row, (*it).id ); // store unit id's in the combobox position to obtain the unit id later + row++; + } +} + +void UnitComboBox::setSelected( int unitID ) +{ + //do a reverse lookup on the row->id map + TQMap<int, int>::const_iterator it; + for ( it = unitComboRows.begin(); it != unitComboRows.end(); ++it ) { + if ( it.data() == unitID ) { + setCurrentItem(it.key()); + break; + } + } +} + +int UnitComboBox::id( int row ) const +{ + return unitComboRows[ row ]; +} + +void UnitComboBox::createUnit( const Unit &element ) +{ + int row = findInsertionPoint( element.name ); + + insertItem( element.name, row ); + + //now update the map by pushing everything after this item down + TQMap<int, int> new_map; + for ( TQMap<int, int>::iterator it = unitComboRows.begin(); it != unitComboRows.end(); ++it ) { + if ( it.key() >= row ) { + new_map.insert( it.key() + 1, it.data() ); + } + else + new_map.insert( it.key(), it.data() ); + } + unitComboRows = new_map; + unitComboRows.insert( row, element.id ); +} + +void UnitComboBox::removeUnit( int id ) +{ + int row = -1; + for ( TQMap<int, int>::iterator it = unitComboRows.begin(); it != unitComboRows.end(); ++it ) { + if ( it.data() == id ) { + row = it.key(); + removeItem( row ); + unitComboRows.remove( it ); + break; + } + } + + if ( row == -1 ) + return ; + + //now update the map by pushing everything after this item up + TQMap<int, int> new_map; + for ( TQMap<int, int>::iterator it = unitComboRows.begin(); it != unitComboRows.end(); ++it ) { + if ( it.key() > row ) { + new_map.insert( it.key() - 1, it.data() ); + } + else + new_map.insert( it.key(), it.data() ); + } + unitComboRows = new_map; +} + +int UnitComboBox::findInsertionPoint( const TQString &name ) +{ + for ( int i = 1; i < count(); i++ ) { + if ( TQString::localeAwareCompare( name, text( i ) ) < 0 ) + return i; + } + + return count(); +} + +#include "unitcombobox.moc" |