diff options
Diffstat (limited to 'src/dialogs/selectauthorsdialog.cpp')
-rw-r--r-- | src/dialogs/selectauthorsdialog.cpp | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/src/dialogs/selectauthorsdialog.cpp b/src/dialogs/selectauthorsdialog.cpp new file mode 100644 index 0000000..d7583d3 --- /dev/null +++ b/src/dialogs/selectauthorsdialog.cpp @@ -0,0 +1,181 @@ +/*************************************************************************** +* Copyright (C) 2003 by * +* Unai Garro ([email protected]) * +* Cyril Bosselut ([email protected]) * +* 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 "selectauthorsdialog.h" + +#include <tqmessagebox.h> +#include <tqvbox.h> + +#include <tdeconfig.h> +#include <kdialog.h> +#include <tdelocale.h> +#include <tdemessagebox.h> +#include <tdeglobal.h> + +#include "backends/recipedb.h" + +SelectAuthorsDialog::SelectAuthorsDialog( TQWidget *parent, const ElementList ¤tAuthors, RecipeDB *db ) + : KDialogBase( parent, "SelectAuthorsDialog", true, i18n("Authors"), + KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok ), + database(db) +{ + TQVBox *page = makeVBoxMainWidget(); + + //Design UI + + // Combo to Pick authors + TQHBox *topBox = new TQHBox(page); + topBox->setSpacing(6); + + authorsCombo = new KComboBox( true, topBox ); + authorsCombo->setSizePolicy( TQSizePolicy( TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding ) ); + authorsCombo->completionObject() ->setCompletionMode( TDEGlobalSettings::CompletionPopupAuto ); + authorsCombo->lineEdit() ->disconnect( authorsCombo ); //so hitting enter doesn't enter the item into the box + + // Add/Remove buttons + + il = new TDEIconLoader; + addAuthorButton = new TQPushButton( topBox ); + TQPixmap pm = il->loadIcon( "go-down", TDEIcon::NoGroup, 16 ); + addAuthorButton->setIconSet( pm ); + + removeAuthorButton = new TQPushButton( topBox ); + pm = il->loadIcon( "go-up", TDEIcon::NoGroup, 16 ); + removeAuthorButton->setIconSet( pm ); + + // Author List + + authorListView = new TDEListView( page ); + authorListView->setSizePolicy( TQSizePolicy( TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding ) ); + + TDEConfig * config = TDEGlobal::config(); + config->setGroup( "Advanced" ); + bool show_id = config->readBoolEntry( "ShowID", false ); + authorListView->addColumn( i18n( "Id" ), show_id ? -1 : 0 ); + authorListView->addColumn( i18n( "Author" ) ); + authorListView->setAllColumnsShowFocus( true ); + + // Load the list + loadAuthors( currentAuthors ); + + adjustSize(); + resize(450, height()); + + // Connect signals & Slots + connect ( addAuthorButton, TQ_SIGNAL( clicked() ), this, TQ_SLOT( addAuthor() ) ); + connect ( removeAuthorButton, TQ_SIGNAL( clicked() ), this, TQ_SLOT( removeAuthor() ) ); + + authorsCombo->setEditText(TQString::null); + authorsCombo->lineEdit()->setFocus(); +} + +SelectAuthorsDialog::~SelectAuthorsDialog() +{} + +void SelectAuthorsDialog::getSelectedAuthors( ElementList *newAuthors ) +{ + + for ( TQListViewItem * it = authorListView->firstChild();it; it = it->nextSibling() ) { + Element author; + author.id = it->text( 0 ).toInt(); + author.name = it->text( 1 ); + newAuthors->append( author ); + } + +} + +void SelectAuthorsDialog::loadAuthors( const ElementList ¤tAuthors ) +{ + + // Load the combo + reloadAuthorsCombo(); + + // Load the ListView with the authors of this recipe + authorListView->clear(); + for ( ElementList::const_iterator author_it = currentAuthors.begin(); author_it != currentAuthors.end(); ++author_it ) { + ( void ) new TQListViewItem( authorListView, TQString::number( ( *author_it ).id ), ( *author_it ).name ); + } + +} + +void SelectAuthorsDialog::addAuthor( void ) +{ + //check bounds first + if ( authorsCombo->currentText().length() > uint(database->maxAuthorNameLength()) ) { + KMessageBox::error( this, TQString( i18n( "Author name cannot be longer than %1 characters." ) ).arg( database->maxAuthorNameLength() ) ); + authorsCombo->lineEdit() ->selectAll(); + return ; + } + + if ( authorsCombo->lineEdit()->text().isEmpty() ) + return; + + if ( authorsCombo->contains( authorsCombo->currentText() ) ) + authorsCombo->setCurrentItem( authorsCombo->currentText() ); + + createNewAuthorIfNecessary(); + + int currentItem = authorsCombo->currentItem(); + Element currentElement = authorList.getElement( currentItem ); + + ( void ) new TQListViewItem( authorListView, TQString::number( currentElement.id ), currentElement.name ); + +} + +void SelectAuthorsDialog::removeAuthor( void ) +{ + // Find the selected item first + TQListViewItem * it; + it = authorListView->selectedItem(); + + if ( it ) { // Check if an author is selected first + delete it; + } + +} + +void SelectAuthorsDialog::createNewAuthorIfNecessary( void ) +{ + + if ( !authorsCombo->contains( authorsCombo->currentText() ) && + !( authorsCombo->currentText().stripWhiteSpace() ).isEmpty() ) // author is not in the list and is not empty + { // Create new author + TQString newAuthorName = authorsCombo->currentText(); + database->createNewAuthor( newAuthorName ); + //List again the authors + reloadAuthorsCombo(); + + // Select the newly created author + authorsCombo->setCurrentItem( newAuthorName ); + } +} + + +void SelectAuthorsDialog::reloadAuthorsCombo( void ) +{ + + //Load the author list + database->loadAuthors( &authorList ); + + // Load combo with all the authors + authorsCombo->clear(); + authorsCombo->completionObject() ->clear(); + + for ( ElementList::const_iterator author_it = authorList.begin(); author_it != authorList.end(); ++author_it ) { + authorsCombo->insertItem( ( *author_it ).name ); + authorsCombo->completionObject() ->addItem( ( *author_it ).name ); + } + +} + + +#include "selectauthorsdialog.moc" |