summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kofilterview.cpp86
-rw-r--r--korganizer/kofilterview.h59
2 files changed, 101 insertions, 44 deletions
diff --git a/korganizer/kofilterview.cpp b/korganizer/kofilterview.cpp
index 105028a..36ee2eb 100644
--- a/korganizer/kofilterview.cpp
+++ b/korganizer/kofilterview.cpp
@@ -18,73 +18,40 @@
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 <qcheckbox.h>
#include <qcombobox.h>
#include <qpushbutton.h>
#include <qlayout.h>
#include <qlabel.h>
#include <qdialog.h>
+#include <qtextstream.h>
+#include <qtextcodec.h>
#include <libkcal/calfilter.h>
#include "kofilterview.h"
#include "koprefs.h"
#include <kiconloader.h>
#include <kglobal.h>
#include <kcolorbutton.h>
#include <kmessagebox.h>
-#include <kurlrequester.h>
-#include <klineedit.h>
-
-class KONewCalPrefs : public QDialog
-{
- public:
- KONewCalPrefs( QWidget *parent=0, const char *name=0 ) :
- QDialog( parent, name, true )
- {
- setCaption( i18n("Add new Calendar") );
- QVBoxLayout* lay = new QVBoxLayout( this );
- lay->setSpacing( 3 );
- lay->setMargin( 3 );
- QLabel * lab = new QLabel( i18n("<b>Name of new calendar:</b>"), this );
- lay->addWidget( lab );
- nameE = new KLineEdit( this );
- lay->addWidget( nameE );
- lab = new QLabel( i18n("Local ical (*.ics) file:"), this );
- lay->addWidget( lab );
- url = new KURLRequester ( this );
- lay->addWidget( url );
- QPushButton * ok = new QPushButton( i18n("OK"), this );
- lay->addWidget( ok );
- QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
- lay->addWidget( cancel );
- connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
- connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
- //resize( 200, 200 );
- }
-
- QString calName() { return nameE->text(); }
- QString calFileName() { return url->url(); }
-private:
- KLineEdit* nameE;
- KURLRequester *url;
-};
+
KOFilterView::KOFilterView(QPtrList<CalFilter> *filterList,QWidget* parent,
const char* name,WFlags fl )
: KOFilterView_base(parent,name,fl)
{
mFilters = filterList;
connect(mSelectionCombo,SIGNAL(activated(int)),SIGNAL(filterChanged()));
connect(mEnabledCheck,SIGNAL(clicked()),SIGNAL(filterChanged()));
connect(mEditButton,SIGNAL(clicked()),SIGNAL(editFilters()));
}
@@ -233,25 +200,25 @@ void KOCalEditView::deleteCal( int id )
if ( kkf->isStandard )
selectStdCal( 1, true );
emit removeCalendar ( id );
KOPrefs::instance()->mCalendars.remove ( kkf );
emit needsUpdate();
QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
}
void KOCalEditView::infoCal( int id )
{
QString name = KOPrefs::instance()->getCalendar( id )->mName;
QString file = KOPrefs::instance()->getCalendar( id )->mFileName;
if ( KOPrefs::instance()->getCalendar( id )->mErrorOnLoad ) {
- if ( KMessageBox::Yes == KMessageBox::questionYesNo( this, i18n("The calendar <tr><b>%1</b><tr> is not loaded! Loading of file <tr><b>%2</b><tr> failed! <tr><b>Try again to load the calendar?</b>").arg(name).arg(file) ) ) {
+ if ( KMessageBox::Yes == KMessageBox::questionYesNo( this, i18n("The calendar <tr><b>%1</b><tr> is not loaded! Loading of file <tr><b>%2</b><tr>failed!<tr><b>Try again to load the calendar?</b>").arg(name).arg(file) ) ) {
emit calendarAdded( id );
emit needsUpdate();
QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
}
}
else
KMessageBox::information( this, i18n("The calendar <tr><b>%1</b><tr>is displaying file<tr><b>%2</b>").arg(name).arg(file) );
}
void KOCalEditView::readConfig()
{
mStdandardB.clear();
@@ -364,33 +331,64 @@ void KOCalEditView::readConfig()
//calb->setMaximumSize( hei*9/10, hei*9/10 );
}
++row;
kkf = KOPrefs::instance()->mCalendars.next();
}
lab = new QLabel ( "", mw );
mainLayout->addWidget( lab,row,0 );
mw->show();
}
void KOCalEditView::addCal()
{
- KONewCalPrefs prefs ( this );
- if ( ! prefs.exec() )
- return;
- QString name = prefs.calName();
- QString file = prefs.calFileName();
+ bool tryagain = true;
+ QString name, file;
+ while ( tryagain ) {
+ KONewCalPrefs prefs ( this );
+ if ( !name.isEmpty() ) prefs.nameE->setText( name );
+ if ( !file.isEmpty() ) prefs.url->setURL( file );
+ if ( ! prefs.exec() )
+ return;
+ name = prefs.calName();
+ file = prefs.calFileName();
+ tryagain = false;
+ KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
+ while ( kkf ) {
+ if ( kkf->mName == name ) {
+ KMessageBox::information( this, i18n("Sorry, the calendar name already exists!\nPlease choose another name!") );
+ name = "";
+ break;
+ tryagain = true;
+ }
+ if ( kkf->mFileName == file ) {
+
+ break;
+ tryagain = true;
+ }
+ kkf = KOPrefs::instance()->mCalendars.next();
+ }
+ }
QFileInfo fi ( file );
if (!fi.exists() ) {
- KMessageBox::information( this, i18n("File does not exist!\nNo calendar added!"));
- return;
+ if ( KMessageBox::questionYesNo(this, i18n("The file does not exist!\nShall I create it for you?")) == KMessageBox::No )
+ return;
+ QFile fileIn( file );
+ if (!fileIn.open( IO_WriteOnly ) ) {
+ KMessageBox::sorry( this, i18n("Sorry, cannot create the file!\nNo calendar added!") );
+ return;
+ }
+ QTextStream tsIn( &fileIn );
+ tsIn.setCodec( QTextCodec::codecForName("utf8") );
+ tsIn << "BEGIN:VCALENDAR\nPRODID:-//KDE-Pim//Platform-independent 2.1.0\nVERSION:2.0\nEND:VCALENDAR\n";
+ fileIn.close();
}
KopiCalendarFile * kkf = KOPrefs::instance()->getNewCalendar();
kkf->mName = name;
kkf->mFileName = file;
emit calendarAdded( kkf->mCalNumber );
emit needsUpdate();
QTimer::singleShot( 0, this, SLOT ( readConfig() ) );
}
void KOCalEditView::enableAll()
{
toggleList( mEnabledB );
}
diff --git a/korganizer/kofilterview.h b/korganizer/kofilterview.h
index 3ab316f..945947a 100644
--- a/korganizer/kofilterview.h
+++ b/korganizer/kofilterview.h
@@ -16,34 +16,93 @@
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.
*/
#ifndef KOFILTERVIEW_H
#define KOFILTERVIEW_H
#include <qstring.h>
#include <qcheckbox.h>
+#include <qlayout.h>
+#include <qlabel.h>
#include <qscrollview.h>
#include <qpushbutton.h>
#include <kconfig.h>
#include "kofilterview_base.h"
#include <libkcal/calfilter.h>
+#include <kurlrequester.h>
+#include <klineedit.h>
+#include <kglobal.h>
+#include <kmessagebox.h>
+
class QGridLayout;
using namespace KCal;
+
+class KONewCalPrefs : public QDialog
+{
+ Q_OBJECT
+ public:
+ KONewCalPrefs( QWidget *parent=0, const char *name=0 ) :
+ QDialog( parent, name, true )
+ {
+ setCaption( i18n("Add new Calendar") );
+ QVBoxLayout* lay = new QVBoxLayout( this );
+ lay->setSpacing( 3 );
+ lay->setMargin( 3 );
+ QLabel * lab = new QLabel( i18n("<b>Name of new calendar:</b>"), this );
+ lay->addWidget( lab );
+ nameE = new KLineEdit( this );
+ lay->addWidget( nameE );
+ lab = new QLabel( i18n("<b>Local ical (*.ics) file:</b>"), this );
+ lay->addWidget( lab );
+ url = new KURLRequester ( this );
+ lay->addWidget( url );
+ QPushButton * ok = new QPushButton( i18n("OK"), this );
+ lay->addWidget( ok );
+ QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
+ lay->addWidget( cancel );
+ connect ( ok,SIGNAL(clicked() ),this , SLOT ( checkValid() ) );
+ connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
+ setMinimumWidth( 220 );
+ resize(sizeHint() );
+ }
+
+ QString calName() { return nameE->text(); }
+ QString calFileName() { return url->url(); }
+
+public slots:
+void checkValid() {
+ if ( nameE->text().isEmpty() ) {
+ KMessageBox::information( this, i18n("Sorry, the calendar name is empty!") );
+ nameE->setText( "LPQJ_"+ QString::number( QTime::currentTime().msec () ));
+ return;
+ }
+ if ( url->url().isEmpty() ) {
+ KMessageBox::information( this, i18n("Sorry, the file name is empty!") );
+ return;
+ }
+ accept();
+}
+
+public:
+ KLineEdit* nameE;
+ KURLRequester *url;
+};
+
class KOCalButton : public QPushButton
{
Q_OBJECT
public:
KOCalButton( QWidget *parent=0, const char *name=0 ) :
QPushButton( parent, name)
{
connect( this, SIGNAL( clicked() ),
SLOT( bottonClicked() ));
mNumber = -1;
setFocusPolicy(NoFocus);
}