summaryrefslogtreecommitdiffstats
path: root/src/widgets/unitcombobox.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2024-10-13 11:56:14 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2024-10-29 21:58:42 +0900
commit2879ff70be9271550477982a1a6371714db38562 (patch)
treec2054149dba923ab080fe7093432c7663a990111 /src/widgets/unitcombobox.cpp
parent3eb38d2556f676d1027746f20bf12a1dd74451ef (diff)
downloadkrecipes-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.cpp145
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"