00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <tqstringlist.h>
00024 #include <tqlineedit.h>
00025 #include <tqlistview.h>
00026 #include <tqlayout.h>
00027 #include <tqheader.h>
00028 #include <tqpushbutton.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 TQListView *mView;
00041 TQPushButton *mAddButton;
00042 TQPushButton *mEditButton;
00043 TQPushButton *mDeleteButton;
00044 };
00045
00046 class CategoryListViewItem : public QListViewItem
00047 {
00048 public:
00049 CategoryListViewItem( TQListView *view, const TQString &text ) :
00050 TQListViewItem( view, text )
00051 {
00052 }
00053
00054 void okRename ( int col )
00055 {
00056 TQListViewItem::okRename( col );
00057 }
00058 };
00059
00060 CategoryEditDialog::CategoryEditDialog( KPimPrefs *prefs, TQWidget* 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 TQWidget *widget = new TQWidget( this );
00067 setMainWidget( widget );
00068
00069 TQGridLayout *layout = new TQGridLayout( widget, 4, 2, marginHint(), spacingHint() );
00070
00071 d->mView = new TQListView( widget );
00072 d->mView->addColumn( "" );
00073 d->mView->header()->hide();
00074 d->mView->setDefaultRenameAction( TQListView::Accept );
00075
00076 layout->addMultiCellWidget( d->mView, 0, 3, 0, 0 );
00077
00078 d->mAddButton = new TQPushButton( i18n( "Add" ), widget );
00079 layout->addWidget( d->mAddButton, 0, 1 );
00080
00081 d->mEditButton = new TQPushButton( i18n( "Edit" ), widget );
00082 layout->addWidget( d->mEditButton, 1, 1 );
00083
00084 d->mDeleteButton = new TQPushButton( i18n( "Remove" ), widget );
00085 layout->addWidget( d->mDeleteButton, 2, 1 );
00086
00087
00088 fillList();
00089
00090 connect( d->mAddButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( add() ) );
00091 connect( d->mEditButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( edit() ) );
00092 connect( d->mDeleteButton, TQT_SIGNAL( clicked() ), this, TQT_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 TQStringList::Iterator it;
00107 bool categoriesExist=false;
00108 for ( it = mPrefs->mCustomCategories.begin();
00109 it != mPrefs->mCustomCategories.end(); ++it ) {
00110
00111 TQListViewItem *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 TQListViewItem *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 TQListViewItem *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"