1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
/***************************************************************************
* 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 "selectcategoriesdialog.h"
#include "createcategorydialog.h"
#include <tqvbox.h>
#include <tdelocale.h>
#include <kdebug.h>
#include <kdialog.h>
#include <tdemessagebox.h>
#include "datablocks/categorytree.h"
#include "backends/recipedb.h"
#include "widgets/categorylistview.h"
SelectCategoriesDialog::SelectCategoriesDialog( TQWidget *parent, const ElementList &items_on, RecipeDB *db )
: KDialogBase( parent, "SelectCategoriesDialog", true, i18n("Categories"),
KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok ),
database(db)
{
TQVBox *page = makeVBoxMainWidget();
//Design UI
//Category List
categoryListView = new CategoryCheckListView( page, db, true, items_on );
categoryListView->reload();
//New category button
TQPushButton *newCatButton = new TQPushButton( page );
newCatButton->setText( i18n( "&New Category..." ) );
newCatButton->setFlat( true );
// Load the list
loadCategories( items_on );
setSizeGripEnabled( true );
// Connect signals & Slots
connect ( newCatButton, TQ_SIGNAL( clicked() ), TQ_SLOT( createNewCategory() ) );
}
SelectCategoriesDialog::~SelectCategoriesDialog()
{}
void SelectCategoriesDialog::getSelectedCategories( ElementList *newSelected )
{
*newSelected = categoryListView->selections();
}
void SelectCategoriesDialog::loadCategories( const ElementList &items_on )
{
categoryListView->populateAll();
ElementList::const_iterator it;
for ( it = items_on.begin(); it != items_on.end(); ++it ) {
CategoryCheckListItem *new_item = (CategoryCheckListItem*)categoryListView->findItem(TQString::number((*it).id),1);
if ( new_item ) {
new_item->setOn(true);
}
}
}
void SelectCategoriesDialog::createNewCategory( void )
{
ElementList categories;
database->loadCategories( &categories );
CreateCategoryDialog* categoryDialog = new CreateCategoryDialog( this, categories );
if ( categoryDialog->exec() == TQDialog::Accepted ) {
TQString result = categoryDialog->newCategoryName();
int subcategory = categoryDialog->subcategory();
//check bounds first
if ( result.length() > uint(database->maxCategoryNameLength()) ) {
KMessageBox::error( this, TQString( i18n( "Category name cannot be longer than %1 characters." ) ).arg( database->maxCategoryNameLength() ) );
return ;
}
database->createNewCategory( result, subcategory ); // Create the new category in the database
//a listview item will automatically be created, but we need to turn it on
Element new_cat( result, database->lastInsertID() );
TQCheckListItem *new_item = ((TQCheckListItem*)categoryListView->findItem( TQString::number(new_cat.id), 1 ));
if ( new_item )
new_item->setOn(true);
}
delete categoryDialog;
}
#include "selectcategoriesdialog.moc"
|