korganizer Library API Documentation

exportwebdialog.cpp

00001 /*
00002     This file is part of KOrganizer.
00003     Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
00004 
00005     This program is free software; you can redistribute it and/or modify
00006     it under the terms of the GNU General Public License as published by
00007     the Free Software Foundation; either version 2 of the License, or
00008     (at your option) any later version.
00009 
00010     This program is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00013     GNU General Public License for more details.
00014 
00015     You should have received a copy of the GNU General Public License
00016     along with this program; if not, write to the Free Software
00017     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00018 
00019     As a special exception, permission is given to link this program
00020     with any edition of Qt, and distribute the resulting executable,
00021     without including the source code for Qt in the source distribution.
00022 */
00023 
00024 #include <qlayout.h>
00025 #include <qhgroupbox.h>
00026 #include <qvgroupbox.h>
00027 #include <qvbuttongroup.h>
00028 #include <qradiobutton.h>
00029 #include <qcheckbox.h>
00030 #include <qlineedit.h>
00031 #include <qhbox.h>
00032 #include <qpushbutton.h>
00033 #include <qfiledialog.h>
00034 #include <qtextstream.h>
00035 #include <qlabel.h>
00036 
00037 #include <klocale.h>
00038 #include <kdebug.h>
00039 #include <kfiledialog.h>
00040 #include <klineedit.h>
00041 #include <ktempfile.h>
00042 #include <kurl.h>
00043 #include <kio/job.h>
00044 #include <kstandarddirs.h>
00045 #include <kconfig.h>
00046 #include <kglobal.h>
00047 #include <kurlrequester.h>
00048 #include <ktempfile.h>
00049 #include <kio/netaccess.h>
00050 #include <knotifyclient.h>
00051 
00052 #include <libkcal/calendar.h>
00053 
00054 #include <libkdepim/kdateedit.h>
00055 
00056 #include <libkdepim/kdateedit.h>
00057 
00058 #include "koprefs.h"
00059 #include "htmlexport.h"
00060 
00061 #include "exportwebdialog.h"
00062 #include "exportwebdialog.moc"
00063 
00064 ExportWebDialog::ExportWebDialog (Calendar *cal, QWidget *parent,
00065                                   const char *name) :
00066   KDialogBase(Tabbed,i18n("Export Calendar as Web Page"),
00067               Help|Default|User1|Cancel,User1,parent,name,false,false,
00068               i18n("Export")),
00069   mCalendar(cal),
00070   mDataAvailable(false)
00071 {
00072   mExport = new HtmlExport(cal);
00073 
00074   mConfig = KGlobal::config();
00075 
00076   setupGeneralPage();
00077   setupEventPage();
00078   setupTodoPage();
00079 // Disabled bacause the functionality is not yet implemented.
00080 //  setupAdvancedPage();
00081 
00082   loadSettings();
00083 
00084   QObject::connect( this, SIGNAL( user1Clicked() ), SLOT( exportWebPage() ) );
00085 }
00086 
00087 ExportWebDialog::~ExportWebDialog()
00088 {
00089 }
00090 
00091 void ExportWebDialog::setupGeneralPage()
00092 {
00093   mGeneralPage = addPage(i18n("General"));
00094 
00095   QVBoxLayout *topLayout = new QVBoxLayout(mGeneralPage, 10);
00096 
00097   QGroupBox *rangeGroup = new QHGroupBox(i18n("Date Range"),mGeneralPage);
00098   topLayout->addWidget(rangeGroup);
00099 
00100   mFromDate = new KDateEdit(rangeGroup);
00101   mFromDate->setDate(QDate::currentDate());
00102 
00103   mToDate = new KDateEdit(rangeGroup);
00104   mToDate->setDate(QDate::currentDate().addMonths(1));
00105 
00106   QButtonGroup *typeGroup = new QVButtonGroup(i18n("View Type"),mGeneralPage);
00107   topLayout->addWidget(typeGroup);
00108 
00109 
00110   // For now we just support the todo view. Other view types will follow
00111   // shortly.
00112 //  new QRadioButton(i18n("Day"), typeGroup);
00113 //  new QRadioButton(i18n("Week"), typeGroup);
00114   mCbMonth = new QCheckBox(i18n("Month"), typeGroup);
00115   mCbEvent = new QCheckBox(i18n("Event list"), typeGroup);
00116   mCbTodo = new QCheckBox(i18n("To-do list"), typeGroup);
00117 
00118   QGroupBox *destGroup = new QVGroupBox(i18n("Destination"),mGeneralPage);
00119   topLayout->addWidget(destGroup);
00120 
00121   new QLabel(i18n("Output file:"),destGroup);
00122 
00123   QHBox *outputFileLayout = new QHBox(destGroup);
00124   mOutputFileEdit = new KURLRequester(KOPrefs::instance()->mHtmlExportFile,
00125                                   outputFileLayout);
00126   topLayout->addStretch(1);
00127 }
00128 
00129 void ExportWebDialog::setupTodoPage()
00130 {
00131   mTodoPage = addPage(i18n("To-Do"));
00132 
00133   QVBoxLayout *topLayout = new QVBoxLayout(mTodoPage, 10);
00134 
00135   mCbDueDates = new QCheckBox (i18n("Due dates"),mTodoPage);
00136   topLayout->addWidget(mCbDueDates);
00137 
00138   mCbCategoriesTodo = new QCheckBox (i18n("Categories"),mTodoPage);
00139   topLayout->addWidget(mCbCategoriesTodo);
00140 
00141   mCbAttendeesTodo = new QCheckBox (i18n("Attendees"),mTodoPage);
00142   topLayout->addWidget(mCbAttendeesTodo);
00143 
00144   mCbExcludePrivateTodo = new QCheckBox (i18n("Exclude private"),mTodoPage);
00145   topLayout->addWidget(mCbExcludePrivateTodo);
00146 
00147   mCbExcludeConfidentialTodo = new QCheckBox (i18n("Exclude confidential"),mTodoPage);
00148   topLayout->addWidget(mCbExcludeConfidentialTodo);
00149 
00150   topLayout->addStretch(1);
00151 }
00152 
00153 void ExportWebDialog::setupEventPage()
00154 {
00155   mEventPage = addPage(i18n("Event"));
00156 
00157   QVBoxLayout *topLayout = new QVBoxLayout(mEventPage, 10);
00158 
00159   mCbCategoriesEvent = new QCheckBox (i18n("Categories"),mEventPage);
00160   topLayout->addWidget(mCbCategoriesEvent);
00161 
00162   mCbAttendeesEvent = new QCheckBox (i18n("Attendees"),mEventPage);
00163   topLayout->addWidget(mCbAttendeesEvent);
00164 
00165   mCbExcludePrivateEvent = new QCheckBox (i18n("Exclude private"),mEventPage);
00166   topLayout->addWidget(mCbExcludePrivateEvent);
00167 
00168   mCbExcludeConfidentialEvent = new QCheckBox (i18n("Exclude confidential"),mEventPage);
00169   topLayout->addWidget(mCbExcludeConfidentialEvent);
00170 
00171   topLayout->addStretch(1);
00172 }
00173 
00174 void ExportWebDialog::setupAdvancedPage()
00175 {
00176   mAdvancedPage = addPage(i18n("Advanced"));
00177 
00178   QVBoxLayout *topLayout = new QVBoxLayout(mAdvancedPage, 10);
00179 
00180   mCbHtmlFragment = new QCheckBox (i18n("Only generate HTML fragment"),
00181                                    mAdvancedPage);
00182   topLayout->addWidget(mCbHtmlFragment);
00183 
00184   QPushButton *colorsButton = new QPushButton(i18n("Colors"),mAdvancedPage);
00185   topLayout->addWidget(colorsButton);
00186 
00187   // Implement the functionality to enable this buttons.
00188   mCbHtmlFragment->setEnabled(false);
00189   colorsButton->setEnabled(false);
00190 
00191   topLayout->addStretch(1);
00192 }
00193 
00194 void ExportWebDialog::loadSettings()
00195 {
00196   KConfig *cfg = KGlobal::config();
00197   cfg->setGroup( "HtmlExport" );
00198 
00199   mCbMonth->setChecked( cfg->readBoolEntry( "Month", false ) );
00200   mCbEvent->setChecked( cfg->readBoolEntry( "Event", true ) );
00201   mCbTodo->setChecked( cfg->readBoolEntry( "Todo", true ) );
00202   mCbCategoriesEvent->setChecked( cfg->readBoolEntry( "CategoriesEvent", false ) );
00203   mCbAttendeesEvent->setChecked( cfg->readBoolEntry( "AttendeesEvent", false ) );
00204   mCbExcludePrivateEvent->setChecked( cfg->readBoolEntry( "ExcludePrivateEvent", true ) );
00205   mCbExcludeConfidentialEvent->setChecked( cfg->readBoolEntry( "ExcludeConfidentialEvent", true ) );
00206   mCbCategoriesTodo->setChecked( cfg->readBoolEntry( "CategoriesTodo", false ) );
00207   mCbAttendeesTodo->setChecked( cfg->readBoolEntry( "AttendeesTodo", false ) );
00208   mCbExcludePrivateTodo->setChecked( cfg->readBoolEntry( "ExcludePrivateTodo", true ) );
00209   mCbExcludeConfidentialTodo->setChecked( cfg->readBoolEntry( "ExcludeConfidentialTodo", true ) );
00210   mCbDueDates->setChecked( cfg->readBoolEntry( "DueDates", true ) );
00211 }
00212 
00213 void ExportWebDialog::saveSettings()
00214 {
00215   KConfig *cfg = KGlobal::config();
00216   cfg->setGroup( "HtmlExport" );
00217 
00218   cfg->writeEntry( "Month", mCbMonth->isChecked() );
00219   cfg->writeEntry( "Event", mCbEvent->isChecked() );
00220   cfg->writeEntry( "Todo", mCbTodo->isChecked() );
00221   cfg->writeEntry( "CategoriesEvent", mCbCategoriesEvent->isChecked() );
00222   cfg->writeEntry( "AttendeesEvent", mCbAttendeesEvent->isChecked());
00223   cfg->writeEntry( "ExcludePrivateEvent", mCbExcludePrivateEvent->isChecked());
00224   cfg->writeEntry( "ExcludeConfidentialEvent", mCbExcludeConfidentialEvent->isChecked());
00225   cfg->writeEntry( "CategoriesTodo", mCbCategoriesTodo->isChecked());
00226   cfg->writeEntry( "AttendeesTodo", mCbAttendeesTodo->isChecked());
00227   cfg->writeEntry( "ExcludePrivateTodo", mCbExcludePrivateTodo->isChecked());
00228   cfg->writeEntry( "ExcludeConfidentialTodo", mCbExcludeConfidentialTodo->isChecked());
00229   cfg->writeEntry( "DueDates", mCbDueDates->isChecked());
00230 
00231   cfg->sync();
00232 }
00233 
00234 void ExportWebDialog::exportWebPage(bool synchronous)
00235 {
00236   saveSettings();
00237 
00238   mExport->setMonthViewEnabled(mCbMonth->isChecked());
00239   mExport->setEventsEnabled(mCbEvent->isChecked());
00240   mExport->setTodosEnabled(mCbTodo->isChecked());
00241   mExport->setCategoriesEventEnabled(mCbCategoriesEvent->isChecked());
00242   mExport->setAttendeesEventEnabled(mCbAttendeesEvent->isChecked());
00243   mExport->setExcludePrivateEventEnabled(mCbExcludePrivateEvent->isChecked());
00244   mExport->setExcludeConfidentialEventEnabled(mCbExcludeConfidentialEvent->isChecked());
00245   mExport->setCategoriesTodoEnabled(mCbCategoriesTodo->isChecked());
00246   mExport->setAttendeesTodoEnabled(mCbAttendeesTodo->isChecked());
00247   mExport->setExcludePrivateTodoEnabled(mCbExcludePrivateTodo->isChecked());
00248   mExport->setExcludeConfidentialTodoEnabled(mCbExcludeConfidentialTodo->isChecked());
00249   mExport->setDueDateEnabled(mCbDueDates->isChecked());
00250   mExport->setDateRange(mFromDate->date(),mToDate->date());
00251 
00252   KURL dest(mOutputFileEdit->lineEdit()->text());
00253   // Remember destination.
00254   KOPrefs::instance()->mHtmlExportFile = mOutputFileEdit->lineEdit()->text();
00255 
00256   if (synchronous) {
00257     if (!dest.isLocalFile()) {
00258       KTempFile tf;
00259       QString tfile = tf.name();
00260       tf.close();
00261       mExport->save(tfile);
00262       if (!KIO::NetAccess::upload (tfile, dest)) {
00263         KNotifyClient::event ("Could not upload file.");
00264       }
00265       tf.unlink();
00266     } else {
00267       mExport->save(dest.path());
00268     }
00269   } else {
00270     mDataAvailable = true;
00271     KIO::TransferJob *job = KIO::put(dest,-1,true,false);
00272     connect(job,SIGNAL(dataReq(KIO::Job *,QByteArray &)),
00273             SLOT(slotDataReq(KIO::Job *,QByteArray &)));
00274     connect(job,SIGNAL(result(KIO::Job *)),SLOT(slotResult(KIO::Job *)));
00275   }
00276 }
00277 
00278 void ExportWebDialog::slotResult(KIO::Job *job)
00279 {
00280   kdDebug() << "slotResult" << endl;
00281   int err = job->error();
00282   if (err)
00283   {
00284     kdDebug() << "  Error " << err << ": " << job->errorString() << endl;
00285     job->showErrorDialog();
00286   } else {
00287     kdDebug() << "  No Error" << endl;
00288     accept();
00289   }
00290   kdDebug() << "slotResult done" << endl;
00291 }
00292 
00293 void ExportWebDialog::slotDataReq(KIO::Job *,QByteArray &data)
00294 {
00295   kdDebug() << "ExportWebDialog::slotDataReq()" << endl;
00296 
00297   if (mDataAvailable) {
00298     kdDebug() << "  Data availavble" << endl;
00299     QTextStream ts(data,IO_WriteOnly);
00300     mExport->save(&ts);
00301     mDataAvailable = false;
00302   } else
00303     kdDebug() << "  No Data" << endl;
00304 }
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.5.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Sun Feb 15 11:41:08 2004 by doxygen 1.3.5 written by Dimitri van Heesch, © 1997-2001