summaryrefslogtreecommitdiffstats
path: root/src/widgets/propertylistview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/propertylistview.cpp')
-rw-r--r--src/widgets/propertylistview.cpp289
1 files changed, 289 insertions, 0 deletions
diff --git a/src/widgets/propertylistview.cpp b/src/widgets/propertylistview.cpp
new file mode 100644
index 0000000..29a3321
--- /dev/null
+++ b/src/widgets/propertylistview.cpp
@@ -0,0 +1,289 @@
+/***************************************************************************
+* Copyright (C) 2004 by *
+* Jason Kivlighn ([email protected]) *
+* *
+* 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 "propertylistview.h"
+
+#include <tdelocale.h>
+#include <tdemessagebox.h>
+#include <tdeconfig.h>
+#include <tdeglobal.h>
+#include <kiconloader.h>
+#include <tdepopupmenu.h>
+#include <kdebug.h>
+
+#include "backends/recipedb.h"
+#include "dialogs/createpropertydialog.h"
+
+PropertyCheckListItem::PropertyCheckListItem( TQListView* klv, const IngredientProperty &property ) : TQCheckListItem( klv, TQString::null, TQCheckListItem::CheckBox ),
+ m_property( property )
+{
+ //setOn( false ); // Set unchecked by default
+}
+
+PropertyCheckListItem::PropertyCheckListItem( TQListViewItem* it, const IngredientProperty &property ) : TQCheckListItem( it, TQString::null, TQCheckListItem::CheckBox ),
+ m_property( property )
+{
+ //setOn( false ); // Set unchecked by default
+}
+
+TQString PropertyCheckListItem::text( int column ) const
+{
+ switch ( column ) {
+ case 0:
+ return m_property.name;
+ break;
+ case 1:
+ return m_property.units;
+ break;
+ case 2:
+ return TQString::number( m_property.id );
+ break;
+
+ }
+
+ return TQString::null;
+}
+
+
+HidePropertyCheckListItem::HidePropertyCheckListItem( TQListView* klv, const IngredientProperty &property, bool enable ) : PropertyCheckListItem( klv, property )
+{
+ m_holdSettings = true;
+ setOn( enable ); // Set checked by default
+ m_holdSettings = false;
+}
+
+HidePropertyCheckListItem::HidePropertyCheckListItem( TQListViewItem* it, const IngredientProperty &property, bool enable ) : PropertyCheckListItem( it, property )
+{
+ m_holdSettings = true;
+ setOn( enable ); // Set checked by default
+ m_holdSettings = false;
+}
+
+void HidePropertyCheckListItem::stateChange( bool on )
+{
+ if ( !m_holdSettings ) {
+ TDEConfig *config = TDEGlobal::config();
+ config->setGroup("Formatting");
+
+ config->sync();
+ TQStringList hiddenList = config->readListEntry("HiddenProperties");
+ if ( on )
+ hiddenList.remove(m_property.name);
+ else if ( !hiddenList.contains(m_property.name) )
+ hiddenList.append(m_property.name);
+
+ config->writeEntry("HiddenProperties",hiddenList);
+ }
+}
+
+PropertyListView::PropertyListView( TQWidget *parent, RecipeDB *db ) : TDEListView( parent ),
+ database( db )
+{
+ setAllColumnsShowFocus( true );
+ setDefaultRenameAction( TQListView::Reject );
+
+ connect( db, TQ_SIGNAL( propertyCreated( const IngredientProperty & ) ), TQ_SLOT( createProperty( const IngredientProperty & ) ) );
+ connect( db, TQ_SIGNAL( propertyRemoved( int ) ), TQ_SLOT( removeProperty( int ) ) );
+}
+
+void PropertyListView::reload()
+{
+ clear(); // Clear the view
+
+ m_loading = true;
+
+ IngredientPropertyList propertyList;
+ database->loadProperties( &propertyList );
+
+ //Populate this data into the TDEListView
+ IngredientPropertyList::const_iterator prop_it;
+ for ( prop_it = propertyList.begin(); prop_it != propertyList.end(); ++prop_it )
+ createProperty( *prop_it );
+
+ m_loading = false;
+}
+
+
+
+StdPropertyListView::StdPropertyListView( TQWidget *parent, RecipeDB *db, bool editable ) : PropertyListView( parent, db )
+{
+ addColumn( i18n( "Property" ) );
+ addColumn( i18n( "Units" ) );
+
+ TDEConfig * config = TDEGlobal::config();
+ config->setGroup( "Advanced" );
+ bool show_id = config->readBoolEntry( "ShowID", false );
+ addColumn( i18n( "Id" ), show_id ? -1 : 2 );
+
+ setSorting( 0 );
+
+ if ( editable ) {
+ setRenameable( 0, true );
+
+ TDEIconLoader *il = new TDEIconLoader;
+
+ kpop = new TDEPopupMenu( this );
+ kpop->insertItem( il->loadIcon( "document-new", TDEIcon::NoGroup, 16 ), i18n( "&Create" ), this, TQ_SLOT( createNew() ), CTRL + Key_C );
+ kpop->insertItem( il->loadIcon( "edit-delete", TDEIcon::NoGroup, 16 ), i18n( "&Delete" ), this, TQ_SLOT( remove
+ () ), Key_Delete );
+ kpop->insertItem( il->loadIcon( "edit", TDEIcon::NoGroup, 16 ), i18n( "&Rename" ), this, TQ_SLOT( rename() ), CTRL + Key_R );
+ kpop->polish();
+
+ delete il;
+
+ connect( this, TQ_SIGNAL( contextMenu( TDEListView *, TQListViewItem *, const TQPoint & ) ), TQ_SLOT( showPopup( TDEListView *, TQListViewItem *, const TQPoint & ) ) );
+ connect( this, TQ_SIGNAL( doubleClicked( TQListViewItem* ) ), this, TQ_SLOT( modProperty( TQListViewItem* ) ) );
+ connect( this, TQ_SIGNAL( itemRenamed( TQListViewItem* ) ), this, TQ_SLOT( saveProperty( TQListViewItem* ) ) );
+ }
+}
+
+void StdPropertyListView::showPopup( TDEListView * /*l*/, TQListViewItem *i, const TQPoint &p )
+{
+ if ( i )
+ kpop->exec( p );
+}
+
+void StdPropertyListView::createNew()
+{
+ UnitList list;
+ database->loadUnits( &list );
+ CreatePropertyDialog* propertyDialog = new CreatePropertyDialog( this, &list );
+
+ if ( propertyDialog->exec() == TQDialog::Accepted ) {
+ TQString name = propertyDialog->newPropertyName();
+ TQString units = propertyDialog->newUnitsName();
+ if ( !( ( name.isEmpty() ) || ( units.isEmpty() ) ) ) // Make sure none of the fields are empty
+ {
+ //check bounds first
+ if ( checkBounds( name ) )
+ database->addProperty( name, units );
+ }
+ }
+ delete propertyDialog;
+}
+
+void StdPropertyListView::remove
+ ()
+{
+ TQListViewItem * item = currentItem();
+
+ if ( item ) {
+ switch ( KMessageBox::warningContinueCancel( this, i18n( "Are you sure you want to delete this property?" ) ) ) {
+ case KMessageBox::Continue:
+ database->removeProperty( item->text( 2 ).toInt() );
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void StdPropertyListView::rename()
+{
+ TQListViewItem * item = currentItem();
+
+ if ( item )
+ PropertyListView::rename( item, 0 );
+}
+
+void StdPropertyListView::removeProperty( int id )
+{
+ TQListViewItem * item = findItem( TQString::number( id ), 2 );
+
+ Q_ASSERT( item );
+
+ delete item;
+}
+
+void StdPropertyListView::createProperty( const IngredientProperty &property )
+{
+ ( void ) new TQListViewItem( this, property.name, property.units, TQString::number( property.id ) );
+}
+
+void StdPropertyListView::modProperty( TQListViewItem* i )
+{
+ if ( i )
+ PropertyListView::rename( i, 0 );
+}
+
+void StdPropertyListView::saveProperty( TQListViewItem* i )
+{
+ if ( !checkBounds( i->text( 0 ) ) ) {
+ reload(); //reset the changed text
+ return ;
+ }
+kdDebug() << "saveProp: " << i->text( 0 ) << endl;
+ int existing_id = database->findExistingPropertyByName( i->text( 0 ) );
+ int prop_id = i->text( 2 ).toInt();
+ if ( existing_id != -1 && existing_id != prop_id ) //category already exists with this label... merge the two
+ {
+ switch ( KMessageBox::warningContinueCancel( this, i18n( "This property already exists. Continuing will merge these two properties into one. Are you sure?" ) ) )
+ {
+ case KMessageBox::Continue: {
+ database->mergeProperties( existing_id, prop_id );
+ break;
+ }
+ default:
+ reload();
+ break;
+ }
+ }
+ else
+ database->modProperty( prop_id, i->text( 0 ) );
+}
+
+bool StdPropertyListView::checkBounds( const TQString &name )
+{
+ if ( name.length() > database->maxPropertyNameLength() ) {
+ KMessageBox::error( this, TQString( i18n( "Property name cannot be longer than %1 characters." ) ).arg( database->maxPropertyNameLength() ) );
+ return false;
+ }
+
+ return true;
+}
+
+
+
+PropertyConstraintListView::PropertyConstraintListView( TQWidget *parent, RecipeDB *db ) : PropertyListView( parent, db )
+{
+ addColumn( i18n( "Enabled" ) );
+ addColumn( i18n( "Property" ) );
+ addColumn( i18n( "Min. Value" ) );
+ addColumn( i18n( "Max. Value" ) );
+ addColumn( "Id", 0 ); //hidden, only for internal purposes
+
+ setRenameable( 0, true );
+}
+
+void PropertyConstraintListView::removeProperty( int id )
+{
+ TQListViewItem * item = findItem( TQString::number( id ), 4 );
+
+ Q_ASSERT( item );
+
+ delete item;
+}
+
+void PropertyConstraintListView::createProperty( const IngredientProperty &property )
+{
+ ( void ) new ConstraintsListItem( this, property );
+}
+
+
+CheckPropertyListView::CheckPropertyListView( TQWidget *parent, RecipeDB *db, bool editable ) : StdPropertyListView( parent, db, editable )
+{
+}
+
+void CheckPropertyListView::createProperty( const IngredientProperty &property )
+{
+ ( void ) new HidePropertyCheckListItem( this, property, (m_loading)?false:true );
+}
+
+#include "propertylistview.moc"