diff options
author | Michele Calgaro <[email protected]> | 2024-10-13 11:56:14 +0900 |
---|---|---|
committer | Michele Calgaro <[email protected]> | 2024-10-29 21:58:42 +0900 |
commit | 2879ff70be9271550477982a1a6371714db38562 (patch) | |
tree | c2054149dba923ab080fe7093432c7663a990111 /src/widgets/authorlistview.cpp | |
parent | 3eb38d2556f676d1027746f20bf12a1dd74451ef (diff) | |
download | krecipes-2879ff70be9271550477982a1a6371714db38562.tar.gz krecipes-2879ff70be9271550477982a1a6371714db38562.zip |
Rearrange folders structure to remove unnecessary 'krecipes' second level subfolder
Signed-off-by: Michele Calgaro <[email protected]>
(cherry picked from commit 0c8ed6c9a4000af8f48581a81c4b5c2f5b9fd502)
Diffstat (limited to 'src/widgets/authorlistview.cpp')
-rw-r--r-- | src/widgets/authorlistview.cpp | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/src/widgets/authorlistview.cpp b/src/widgets/authorlistview.cpp new file mode 100644 index 0000000..7ef696d --- /dev/null +++ b/src/widgets/authorlistview.cpp @@ -0,0 +1,275 @@ +/*************************************************************************** +* 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 "authorlistview.h" + +#include <tdemessagebox.h> +#include <tdeconfig.h> +#include <tdelocale.h> +#include <tdeglobal.h> +#include <kiconloader.h> +#include <tdepopupmenu.h> + +#include "backends/recipedb.h" +#include "dialogs/createelementdialog.h" +#include "dialogs/dependanciesdialog.h" + +AuthorListView::AuthorListView( TQWidget *parent, RecipeDB *db ) : DBListViewBase( parent, db, db->authorCount() ) +{ + setAllColumnsShowFocus( true ); + setDefaultRenameAction( TQListView::Reject ); +} + +void AuthorListView::init() +{ + connect( database, TQ_SIGNAL( authorCreated( const Element & ) ), TQ_SLOT( checkCreateAuthor( const Element & ) ) ); + connect( database, TQ_SIGNAL( authorRemoved( int ) ), TQ_SLOT( removeAuthor( int ) ) ); +} + +void AuthorListView::load( int limit, int offset ) +{ + ElementList authorList; + database->loadAuthors( &authorList, limit, offset ); + + setTotalItems(authorList.count()); + + for ( ElementList::const_iterator ing_it = authorList.begin(); ing_it != authorList.end(); ++ing_it ) + createAuthor( *ing_it ); +} + +void AuthorListView::checkCreateAuthor( const Element &el ) +{ + if ( handleElement(el.name) ) { //only create this author if the base class okays it + createAuthor(el); + } +} + + +StdAuthorListView::StdAuthorListView( TQWidget *parent, RecipeDB *db, bool editable ) : AuthorListView( parent, db ) +{ + addColumn( i18n( "Author" ) ); + + TDEConfig * config = TDEGlobal::config(); + config->setGroup( "Advanced" ); + bool show_id = config->readBoolEntry( "ShowID", false ); + addColumn( i18n( "Id" ), show_id ? -1 : 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_N ); + 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( modAuthor( TQListViewItem* ) ) ); + connect( this, TQ_SIGNAL( itemRenamed( TQListViewItem* ) ), this, TQ_SLOT( saveAuthor( TQListViewItem* ) ) ); + } +} + +void StdAuthorListView::showPopup( TDEListView * /*l*/, TQListViewItem *i, const TQPoint &p ) +{ + if ( i ) + kpop->exec( p ); +} + +void StdAuthorListView::createNew() +{ + CreateElementDialog * elementDialog = new CreateElementDialog( this, i18n( "New Author" ) ); + + if ( elementDialog->exec() == TQDialog::Accepted ) { + TQString result = elementDialog->newElementName(); + + //check bounds first + if ( checkBounds( result ) ) + database->createNewAuthor( result ); // Create the new author in the database + } +} + +void StdAuthorListView::remove + () +{ + TQListViewItem * item = currentItem(); + + if ( item ) { + int id = item->text( 1 ).toInt(); + + ElementList recipeDependancies; + database->findUseOfAuthorInRecipes( &recipeDependancies, id ); + + if ( recipeDependancies.isEmpty() ) { + switch ( KMessageBox::warningContinueCancel( this, i18n( "Are you sure you want to delete this author?" ) ) ) { + case KMessageBox::Continue: + database->removeAuthor( id ); + break; + } + return; + } + else { // need warning! + ListInfo info; + info.list = recipeDependancies; + info.name = i18n("Recipes"); + + DependanciesDialog warnDialog( this, info, false ); + if ( warnDialog.exec() == TQDialog::Accepted ) + database->removeAuthor( id ); + } + } +} + +void StdAuthorListView::rename() +{ + TQListViewItem * item = currentItem(); + + if ( item ) + AuthorListView::rename( item, 0 ); +} + +void StdAuthorListView::createAuthor( const Element &author ) +{ + createElement(new TQListViewItem( this, author.name, TQString::number( author.id ) )); +} + +void StdAuthorListView::removeAuthor( int id ) +{ + TQListViewItem * item = findItem( TQString::number( id ), 1 ); + removeElement(item); +} + +void StdAuthorListView::modAuthor( TQListViewItem* i ) +{ + if ( i ) + AuthorListView::rename( i, 0 ); +} + +void StdAuthorListView::saveAuthor( TQListViewItem* i ) +{ + if ( !checkBounds( i->text( 0 ) ) ) { + reload(ForceReload); //reset the changed text + return ; + } + + int existing_id = database->findExistingAuthorByName( i->text( 0 ) ); + int author_id = i->text( 1 ).toInt(); + if ( existing_id != -1 && existing_id != author_id ) //category already exists with this label... merge the two + { + switch ( KMessageBox::warningContinueCancel( this, i18n( "This author already exists. Continuing will merge these two authors into one. Are you sure?" ) ) ) + { + case KMessageBox::Continue: { + database->mergeAuthors( existing_id, author_id ); + break; + } + default: + reload(ForceReload); + break; + } + } + else { + database->modAuthor( ( i->text( 1 ) ).toInt(), i->text( 0 ) ); + } +} + +bool StdAuthorListView::checkBounds( const TQString &name ) +{ + if ( name.length() > uint(database->maxAuthorNameLength()) ) { + KMessageBox::error( this, TQString( i18n( "Author name cannot be longer than %1 characters." ) ).arg( database->maxAuthorNameLength() ) ); + return false; + } + + return true; +} + + +AuthorCheckListItem::AuthorCheckListItem( AuthorCheckListView* qlv, const Element &author ) : TQCheckListItem( qlv, TQString::null, TQCheckListItem::CheckBox ), + authorStored(author), + m_listview(qlv) +{ +} + +AuthorCheckListItem::AuthorCheckListItem( AuthorCheckListView* qlv, TQListViewItem *after, const Element &author ) : TQCheckListItem( qlv, after, TQString::null, TQCheckListItem::CheckBox ), + authorStored(author), + m_listview(qlv) +{ +} + +Element AuthorCheckListItem::author() const +{ + return authorStored; +} + +TQString AuthorCheckListItem::text( int column ) const +{ + switch ( column ) { + case 0: + return ( authorStored.name ); + case 1: + return ( TQString::number( authorStored.id ) ); + default: + return TQString::null; + } +} + +void AuthorCheckListItem::stateChange( bool on ) +{ + m_listview->stateChange(this,on); +} + + +AuthorCheckListView::AuthorCheckListView( TQWidget *parent, RecipeDB *db ) : AuthorListView( parent, db ) +{ + addColumn( i18n( "Author" ) ); + + TDEConfig *config = TDEGlobal::config(); + config->setGroup( "Advanced" ); + bool show_id = config->readBoolEntry( "ShowID", false ); + addColumn( i18n( "Id" ), show_id ? -1 : 0 ); +} + +void AuthorCheckListView::createAuthor( const Element &author ) +{ + createElement(new AuthorCheckListItem( this, author )); +} + +void AuthorCheckListView::removeAuthor( int id ) +{ + TQListViewItem * item = findItem( TQString::number( id ), 1 ); + removeElement(item); +} + +void AuthorCheckListView::load( int limit, int offset ) +{ + AuthorListView::load(limit,offset); + + for ( TQValueList<Element>::const_iterator author_it = m_selections.begin(); author_it != m_selections.end(); ++author_it ) { + TQCheckListItem * item = ( TQCheckListItem* ) findItem( TQString::number( (*author_it).id ), 1 ); + if ( item ) { + item->setOn(true); + } + } +} + +void AuthorCheckListView::stateChange(AuthorCheckListItem *it,bool on) +{ + if ( !reloading() ) { + if ( on ) + m_selections.append(it->author()); + else + m_selections.remove(it->author()); + } +} + +#include "authorlistview.moc" |