summaryrefslogtreecommitdiffabout
path: root/korganizer/filtereditdialog.cpp
authorzautrix <zautrix>2004-06-26 19:01:18 (UTC)
committer zautrix <zautrix>2004-06-26 19:01:18 (UTC)
commitb9aad1f15dc600e4dbe4c62d3fcced6363188ba3 (patch) (side-by-side diff)
tree2c3d4004fb21c72cba65793859f9bcd8ffd3a49c /korganizer/filtereditdialog.cpp
downloadkdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.zip
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.gz
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.bz2
Initial revision
Diffstat (limited to 'korganizer/filtereditdialog.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/filtereditdialog.cpp270
1 files changed, 270 insertions, 0 deletions
diff --git a/korganizer/filtereditdialog.cpp b/korganizer/filtereditdialog.cpp
new file mode 100644
index 0000000..2943e41
--- a/dev/null
+++ b/korganizer/filtereditdialog.cpp
@@ -0,0 +1,270 @@
+/*
+ This file is part of KOrganizer.
+ Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qcombobox.h>
+#include <qcheckbox.h>
+#include <qradiobutton.h>
+#include <qlistbox.h>
+#include <qapplication.h>
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <klineeditdlg.h>
+#include <kmessagebox.h>
+
+#include <libkdepim/categoryselectdialog.h>
+
+#include "koprefs.h"
+#include "filteredit_base.h"
+
+#include "filtereditdialog.h"
+#include "filtereditdialog.moc"
+
+// TODO: Make dialog work on a copy of the filters objects.
+
+class ComboFilterBox: public QComboBox
+{
+public:
+ ComboFilterBox( QWidget *parent=0, const char *name=0) :
+ QComboBox( parent,name ) { }
+ void popupBox() { popup(); }
+
+};
+
+FilterEditDialog::FilterEditDialog(QPtrList<CalFilter> *filters,QWidget *parent,
+ const char *name) :
+ KDialogBase(parent,name,true,i18n("Edit Calendar Filters"),
+ Ok|Apply|Cancel)
+{
+ mFilters = filters;
+
+ QWidget *mainWidget = new QWidget(this);
+ setMainWidget(mainWidget);
+
+ mSelectionCombo = new ComboFilterBox(mainWidget);
+ connect(mSelectionCombo,SIGNAL(activated(int)),SLOT(filterSelected()));
+ // mSelectionCombo->setEditable ( true );
+ QPushButton *addButton = new QPushButton(i18n("Add Filter"),mainWidget);
+ connect(addButton,SIGNAL(clicked()),SLOT(slotAdd()));
+ addButton->setMaximumSize( addButton->sizeHint());
+ mRemoveButton = new QPushButton( i18n("Remove"), mainWidget );
+ connect( mRemoveButton, SIGNAL( clicked() ), SLOT( slotRemove() ) );
+ mRemoveButton->setMaximumSize( mRemoveButton->sizeHint());
+
+ QPushButton *upButton = new QPushButton(i18n("Up"),mainWidget);
+ upButton->setMaximumSize( upButton->sizeHint());
+ connect(upButton,SIGNAL(clicked()),SLOT(slotUp()));
+
+
+ mEditor = new FilterEdit_base(mainWidget);
+
+ QGridLayout *topLayout = new QGridLayout(mainWidget,2,2);
+ topLayout->setSpacing(spacingHint());
+ topLayout->addWidget(mSelectionCombo,0,0);
+ topLayout->addWidget(upButton,0,1);
+ topLayout->addWidget(addButton,0,2);
+ topLayout->addWidget(mRemoveButton,0,3);
+ topLayout->addMultiCellWidget(mEditor,1,1,0,3);
+ mSelectionCombo->setMaximumWidth ( QApplication::desktop()->width() -
+ addButton->maximumWidth() -
+ mRemoveButton->maximumWidth() -
+ upButton->maximumWidth() -
+ spacingHint() * 5 );
+ connect(mEditor->mCatEditButton,SIGNAL(clicked()),
+ SLOT(editCategorySelection()));
+
+ // Clicking cancel exits the dialog without saving
+ connect(this,SIGNAL(cancelClicked()),SLOT(reject()));
+ updateFilterList();
+}
+
+FilterEditDialog::~FilterEditDialog()
+{
+}
+void FilterEditDialog::slotUp()
+{
+
+ if ( mFilters->count() <= 1 ) return;
+ if ( mSelectionCombo->currentItem() == 0 ) return;
+ int num = mSelectionCombo->currentItem();
+ CalFilter* f = new CalFilter( );
+ *f = *(mFilters->at( num ));
+ mFilters->remove( num );
+ mFilters->insert( num-1, f );
+ updateFilterList();
+ mSelectionCombo->setCurrentItem( num-1 );
+ readFilter(f);
+ //qApp->processEvents();
+ //mSelectionCombo->popupBox();
+}
+void FilterEditDialog::updateFilterList()
+{
+ mSelectionCombo->clear();
+
+ CalFilter *filter = mFilters->first();
+
+ if (!filter) {
+ enableButtonOK(false);
+ enableButtonApply(false);
+ } else {
+ while(filter) {
+ mSelectionCombo->insertItem(filter->name());
+ filter = mFilters->next();
+ }
+ CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
+ if (f) readFilter(f);
+
+ enableButtonOK(true);
+ enableButtonApply(true);
+ }
+
+ mRemoveButton->setEnabled( mFilters->count() > 1 );
+}
+
+void FilterEditDialog::slotDefault()
+{
+}
+
+void FilterEditDialog::slotApply()
+{
+ CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
+ writeFilter(f);
+ emit filterChanged();
+}
+void FilterEditDialog::accept()
+{
+ slotOk();
+}
+void FilterEditDialog::slotOk()
+{
+ CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
+ writeFilter(f);
+ emit filterChanged();
+ QDialog::accept();
+}
+
+void FilterEditDialog::slotAdd()
+{
+ KLineEditDlg dlg(i18n("Enter filter name:"), "New Filter", this);
+ dlg.setCaption(i18n("Add Filter"));
+ if (dlg.exec()) {
+ if ( dlg.text().length() > 0 ) {
+ mFilters->append(new CalFilter(dlg.text()));
+ updateFilterList();
+ int num = mSelectionCombo->count() -1 ;
+ mSelectionCombo->setCurrentItem( num );
+ readFilter(mFilters->at( num ) );
+ }
+ }
+}
+
+void FilterEditDialog::slotRemove()
+{
+ int currentItem = mSelectionCombo->currentItem();
+ if ( currentItem < 0 ) return;
+
+ // We need at least a default filter object.
+ if ( mFilters->count() <= 1 ) return;
+
+ int result = KMessageBox::questionYesNo( this,
+ i18n("This item will be\npermanently deleted.") );
+
+ if ( result != KMessageBox::Yes ) {
+ return;
+ }
+
+ mFilters->remove( currentItem );
+ updateFilterList();
+ emit filterChanged();
+}
+
+void FilterEditDialog::editCategorySelection()
+{
+ KPIM::CategorySelectDialog *dlg = new KPIM::CategorySelectDialog(
+ KOPrefs::instance(), this, "filterCatSelect", true );
+ dlg->setSelected(mCategories);
+
+ connect(dlg,SIGNAL(categoriesSelected(const QStringList &)),
+ SLOT(updateCategorySelection(const QStringList &)));
+
+ dlg->exec();
+}
+
+void FilterEditDialog::updateCategorySelection(const QStringList &categories)
+{
+ mCategories = categories;
+
+ mEditor->mCatList->clear();
+ mEditor->mCatList->insertStringList(mCategories);
+}
+
+void FilterEditDialog::filterSelected()
+{
+ CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
+ if (f) readFilter(f);
+}
+
+void FilterEditDialog::readFilter(CalFilter *filter)
+{
+ int c = filter->criteria();
+
+ mEditor->mCompletedCheck->setChecked(c & CalFilter::HideCompleted);
+ mEditor->mRecurringCheck->setChecked(c & CalFilter::HideRecurring);
+ mEditor->mPublicCheck->setChecked(c & CalFilter::ShowPublic);
+ mEditor->mPrivateCheck->setChecked(c & CalFilter::ShowPrivate);
+ mEditor->mConfidentialCheck->setChecked(c & CalFilter::ShowConfidential);
+
+ if (c & CalFilter::ShowCategories) {
+ mEditor->mCatShowCheck->setChecked(true);
+ } else {
+ mEditor->mCatHideCheck->setChecked(true);
+ }
+
+ mEditor->mCatList->clear();
+ mEditor->mCatList->insertStringList(filter->categoryList());
+ mCategories = filter->categoryList();
+
+ setCaption( i18n("Filter position: ") + QString::number ( mSelectionCombo->currentItem()+1 ));
+}
+
+void FilterEditDialog::writeFilter(CalFilter *filter)
+{
+ int c = 0;
+
+ if (mEditor->mCompletedCheck->isChecked()) c |= CalFilter::HideCompleted;
+ if (mEditor->mRecurringCheck->isChecked()) c |= CalFilter::HideRecurring;
+ if (mEditor->mCatShowCheck->isChecked()) c |= CalFilter::ShowCategories;
+ if (mEditor->mPublicCheck->isChecked()) c |= CalFilter::ShowPublic;
+ if (mEditor->mPrivateCheck->isChecked()) c |= CalFilter::ShowPrivate;
+ if (mEditor->mConfidentialCheck->isChecked()) c |= CalFilter::ShowConfidential;
+
+ filter->setCriteria(c);
+
+ QStringList categoryList;
+ for(uint i=0;i<mEditor->mCatList->count();++i) {
+ categoryList.append(mEditor->mCatList->text(i));
+ }
+ filter->setCategoryList(categoryList);
+}