00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <qstringlist.h>
00024 #include <qlineedit.h>
00025 #include <qlistview.h>
00026 #include <qlayout.h>
00027 #include <qheader.h>
00028 #include <qpushbutton.h>
00029 #include <klocale.h>
00030
00031 #include "kpimprefs.h"
00032
00033 #include "categoryeditdialog.h"
00034
00035 using namespace KPIM;
00036
00037 class CategoryEditDialog::Private
00038 {
00039 public:
00040 QListView *mView;
00041 QPushButton *mAddButton;
00042 QPushButton *mEditButton;
00043 QPushButton *mDeleteButton;
00044 };
00045
00046 class CategoryListViewItem : public QListViewItem
00047 {
00048 public:
00049 CategoryListViewItem( QListView *view, const QString &text ) :
00050 QListViewItem( view, text )
00051 {
00052 }
00053
00054 void okRename ( int col )
00055 {
00056 QListViewItem::okRename( col );
00057 }
00058 };
00059
00060 CategoryEditDialog::CategoryEditDialog( KPimPrefs *prefs, QWidget* parent,
00061 const char* name, bool modal )
00062 : KDialogBase::KDialogBase( parent, name, modal,
00063 i18n("Edit Categories"), Ok|Apply|Cancel|Help, Ok, true ),
00064 mPrefs( prefs ), d( new Private )
00065 {
00066 QWidget *widget = new QWidget( this );
00067 setMainWidget( widget );
00068
00069 QGridLayout *layout = new QGridLayout( widget, 4, 2, marginHint(), spacingHint() );
00070
00071 d->mView = new QListView( widget );
00072 d->mView->addColumn( "" );
00073 d->mView->header()->hide();
00074 d->mView->setDefaultRenameAction( QListView::Accept );
00075
00076 layout->addMultiCellWidget( d->mView, 0, 3, 0, 0 );
00077
00078 d->mAddButton = new QPushButton( i18n( "Add" ), widget );
00079 layout->addWidget( d->mAddButton, 0, 1 );
00080
00081 d->mEditButton = new QPushButton( i18n( "Edit" ), widget );
00082 layout->addWidget( d->mEditButton, 1, 1 );
00083
00084 d->mDeleteButton = new QPushButton( i18n( "Remove" ), widget );
00085 layout->addWidget( d->mDeleteButton, 2, 1 );
00086
00087
00088 fillList();
00089
00090 connect( d->mAddButton, SIGNAL( clicked() ), this, SLOT( add() ) );
00091 connect( d->mEditButton, SIGNAL( clicked() ), this, SLOT( edit() ) );
00092 connect( d->mDeleteButton, SIGNAL( clicked() ), this, SLOT( remove() ) );
00093 }
00094
00095
00096
00097
00098 CategoryEditDialog::~CategoryEditDialog()
00099 {
00100 delete d;
00101 }
00102
00103 void CategoryEditDialog::fillList()
00104 {
00105 d->mView->clear();
00106 QStringList::Iterator it;
00107 bool categoriesExist=false;
00108 for ( it = mPrefs->mCustomCategories.begin();
00109 it != mPrefs->mCustomCategories.end(); ++it ) {
00110
00111 QListViewItem *item = new CategoryListViewItem( d->mView, *it );
00112 item->setRenameEnabled( 0, true );
00113
00114 categoriesExist = true;
00115 }
00116
00117 d->mEditButton->setEnabled( categoriesExist );
00118 d->mDeleteButton->setEnabled( categoriesExist );
00119 d->mView->setSelected( d->mView->firstChild(), true );
00120 }
00121
00122 void CategoryEditDialog::add()
00123 {
00124 if ( d->mView->firstChild() )
00125 d->mView->setCurrentItem( d->mView->firstChild() );
00126
00127 QListViewItem *item = new CategoryListViewItem( d->mView, i18n( "New category" ) );
00128 item->setRenameEnabled( 0, true );
00129
00130 d->mView->setSelected( item, true );
00131 d->mView->ensureItemVisible( item );
00132 item->startRename( 0 );
00133
00134 bool itemCount = d->mView->childCount() > 0;
00135 d->mEditButton->setEnabled( itemCount );
00136 d->mDeleteButton->setEnabled( itemCount );
00137 }
00138
00139 void CategoryEditDialog::edit()
00140 {
00141 if ( d->mView->currentItem() )
00142 d->mView->currentItem()->startRename( 0 );
00143 }
00144
00145 void CategoryEditDialog::remove()
00146 {
00147 if ( d->mView->currentItem() ) {
00148 delete d->mView->currentItem();
00149
00150 d->mView->setSelected( d->mView->currentItem(), true );
00151
00152 bool itemCount = d->mView->childCount() > 0;
00153 d->mEditButton->setEnabled( itemCount );
00154 d->mDeleteButton->setEnabled( itemCount );
00155 }
00156 }
00157
00158 void CategoryEditDialog::slotOk()
00159 {
00160
00161 if ( d->mView->selectedItem() )
00162 static_cast<CategoryListViewItem*>( d->mView->selectedItem() )->okRename( 0 );
00163 slotApply();
00164 accept();
00165 }
00166
00167 void CategoryEditDialog::slotApply()
00168 {
00169 mPrefs->mCustomCategories.clear();
00170
00171 QListViewItem *item = d->mView->firstChild();
00172 while ( item ) {
00173 if ( !item->text( 0 ).isEmpty() )
00174 mPrefs->mCustomCategories.append( item->text( 0 ) );
00175 item = item->nextSibling();
00176 }
00177 mPrefs->writeConfig();
00178
00179 emit categoryConfigChanged();
00180 }
00181
00182 void CategoryEditDialog::slotCancel()
00183 {
00184 reload();
00185 KDialogBase::slotCancel();
00186 }
00187
00188 void CategoryEditDialog::reload()
00189 {
00190 fillList();
00191 }
00192
00193 #include "categoryeditdialog.moc"