00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
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 <kurl.h>
00042 #include <kio/job.h>
00043 #include <kstandarddirs.h>
00044 #include <kconfig.h>
00045 #include "koglobals.h"
00046 #include <kurlrequester.h>
00047 #include <kio/netaccess.h>
00048 #include <knotifyclient.h>
00049 #include <ktempfile.h>
00050
00051 #include <libkcal/calendar.h>
00052
00053 #include <libkdepim/kdateedit.h>
00054 #include <libkdepim/kdateedit.h>
00055
00056 #include "koprefs.h"
00057 #include "kocore.h"
00058
00059 #include "exportwebdialog.h"
00060 #include "exportwebdialog.moc"
00061
00062 ExportWebDialog::ExportWebDialog (Calendar *cal, QWidget *parent,
00063 const char *name) :
00064 KDialogBase(Tabbed,i18n("Export Calendar as Web Page"),
00065 Help|Default|User1|Cancel,User1,parent,name,false,false,
00066 i18n("Export")),
00067 mCalendar(cal),
00068 mDataAvailable(false)
00069 {
00070 mExport = new HtmlExport(cal);
00071
00072 mConfig = KOGlobals::self()->config();
00073
00074 setupGeneralPage();
00075 setupEventPage();
00076 setupTodoPage();
00077
00078
00079
00080 loadSettings();
00081
00082 QObject::connect( this, SIGNAL( user1Clicked() ), SLOT( exportWebPage() ) );
00083 }
00084
00085 ExportWebDialog::~ExportWebDialog()
00086 {
00087 delete(mExport);
00088 }
00089
00090 void ExportWebDialog::setupGeneralPage()
00091 {
00092 mGeneralPage = addPage(i18n("General"));
00093
00094 QVBoxLayout *topLayout = new QVBoxLayout(mGeneralPage, 10);
00095
00096 QGroupBox *rangeGroup = new QHGroupBox(i18n("Date Range"),mGeneralPage);
00097 topLayout->addWidget(rangeGroup);
00098
00099 mFromDate = new KDateEdit(rangeGroup);
00100 mFromDate->setDate(QDate::currentDate());
00101
00102 mToDate = new KDateEdit(rangeGroup);
00103 mToDate->setDate(QDate::currentDate().addMonths(1));
00104
00105 QButtonGroup *typeGroup = new QVButtonGroup(i18n("View Type"),mGeneralPage);
00106 topLayout->addWidget(typeGroup);
00107
00108
00109
00110
00111
00112
00113 mCbMonth = new QCheckBox(i18n("Month"), typeGroup);
00114 mCbEvent = new QCheckBox(i18n("Event list"), typeGroup);
00115 mCbTodo = new QCheckBox(i18n("To-do list"), typeGroup);
00116
00117 QGroupBox *destGroup = new QVGroupBox(i18n("Destination"),mGeneralPage);
00118 topLayout->addWidget(destGroup);
00119
00120 new QLabel(i18n("Output file:"),destGroup);
00121
00122 QHBox *outputFileLayout = new QHBox(destGroup);
00123 mOutputFileEdit = new KURLRequester(KOPrefs::instance()->mHtmlExportFile,
00124 outputFileLayout);
00125 mOutputFileEdit->setMode( KFile::File );
00126 mOutputFileEdit->setFilter( "text/html" );
00127 connect( mOutputFileEdit->lineEdit(), SIGNAL( textChanged ( const QString & ) ), this, SLOT( slotTextChanged( const QString & ) ) );
00128 slotTextChanged( mOutputFileEdit->lineEdit()->text());
00129 topLayout->addStretch(1);
00130 }
00131
00132 void ExportWebDialog::slotTextChanged( const QString & _text)
00133 {
00134 enableButton( User1, !_text.isEmpty() );
00135 }
00136
00137 void ExportWebDialog::setupTodoPage()
00138 {
00139 mTodoPage = addPage(i18n("To-Do"));
00140
00141 QVBoxLayout *topLayout = new QVBoxLayout(mTodoPage, 10);
00142
00143 mCbDueDates = new QCheckBox (i18n("Due dates"),mTodoPage);
00144 topLayout->addWidget(mCbDueDates);
00145
00146 mCbCategoriesTodo = new QCheckBox (i18n("Categories"),mTodoPage);
00147 topLayout->addWidget(mCbCategoriesTodo);
00148
00149 mCbAttendeesTodo = new QCheckBox (i18n("Attendees"),mTodoPage);
00150 topLayout->addWidget(mCbAttendeesTodo);
00151
00152 mCbExcludePrivateTodo = new QCheckBox (i18n("Exclude private"),mTodoPage);
00153 topLayout->addWidget(mCbExcludePrivateTodo);
00154
00155 mCbExcludeConfidentialTodo = new QCheckBox (i18n("Exclude confidential"),mTodoPage);
00156 topLayout->addWidget(mCbExcludeConfidentialTodo);
00157
00158 topLayout->addStretch(1);
00159 }
00160
00161 void ExportWebDialog::setupEventPage()
00162 {
00163 mEventPage = addPage(i18n("Event"));
00164
00165 QVBoxLayout *topLayout = new QVBoxLayout(mEventPage, 10);
00166
00167 mCbCategoriesEvent = new QCheckBox (i18n("Categories"),mEventPage);
00168 topLayout->addWidget(mCbCategoriesEvent);
00169
00170 mCbAttendeesEvent = new QCheckBox (i18n("Attendees"),mEventPage);
00171 topLayout->addWidget(mCbAttendeesEvent);
00172
00173 mCbExcludePrivateEvent = new QCheckBox (i18n("Exclude private"),mEventPage);
00174 topLayout->addWidget(mCbExcludePrivateEvent);
00175
00176 mCbExcludeConfidentialEvent = new QCheckBox (i18n("Exclude confidential"),mEventPage);
00177 topLayout->addWidget(mCbExcludeConfidentialEvent);
00178
00179 topLayout->addStretch(1);
00180 }
00181
00182 void ExportWebDialog::setupAdvancedPage()
00183 {
00184 mAdvancedPage = addPage(i18n("Advanced"));
00185
00186 QVBoxLayout *topLayout = new QVBoxLayout(mAdvancedPage, 10);
00187
00188 mCbHtmlFragment = new QCheckBox (i18n("Only generate HTML fragment"),
00189 mAdvancedPage);
00190 topLayout->addWidget(mCbHtmlFragment);
00191
00192 QPushButton *colorsButton = new QPushButton(i18n("Colors"),mAdvancedPage);
00193 topLayout->addWidget(colorsButton);
00194
00195
00196 mCbHtmlFragment->setEnabled(false);
00197 colorsButton->setEnabled(false);
00198
00199 topLayout->addStretch(1);
00200 }
00201
00202 void ExportWebDialog::loadSettings()
00203 {
00204 KConfig *cfg = KOGlobals::self()->config();
00205 cfg->setGroup( "HtmlExport" );
00206
00207 mCbMonth->setChecked( cfg->readBoolEntry( "Month", false ) );
00208 mCbEvent->setChecked( cfg->readBoolEntry( "Event", true ) );
00209 mCbTodo->setChecked( cfg->readBoolEntry( "Todo", true ) );
00210 mCbCategoriesEvent->setChecked( cfg->readBoolEntry( "CategoriesEvent", false ) );
00211 mCbAttendeesEvent->setChecked( cfg->readBoolEntry( "AttendeesEvent", false ) );
00212 mCbExcludePrivateEvent->setChecked( cfg->readBoolEntry( "ExcludePrivateEvent", true ) );
00213 mCbExcludeConfidentialEvent->setChecked( cfg->readBoolEntry( "ExcludeConfidentialEvent", true ) );
00214 mCbCategoriesTodo->setChecked( cfg->readBoolEntry( "CategoriesTodo", false ) );
00215 mCbAttendeesTodo->setChecked( cfg->readBoolEntry( "AttendeesTodo", false ) );
00216 mCbExcludePrivateTodo->setChecked( cfg->readBoolEntry( "ExcludePrivateTodo", true ) );
00217 mCbExcludeConfidentialTodo->setChecked( cfg->readBoolEntry( "ExcludeConfidentialTodo", true ) );
00218 mCbDueDates->setChecked( cfg->readBoolEntry( "DueDates", true ) );
00219 }
00220
00221 void ExportWebDialog::saveSettings()
00222 {
00223 KConfig *cfg = KOGlobals::self()->config();
00224 cfg->setGroup( "HtmlExport" );
00225
00226 cfg->writeEntry( "Month", mCbMonth->isChecked() );
00227 cfg->writeEntry( "Event", mCbEvent->isChecked() );
00228 cfg->writeEntry( "Todo", mCbTodo->isChecked() );
00229 cfg->writeEntry( "CategoriesEvent", mCbCategoriesEvent->isChecked() );
00230 cfg->writeEntry( "AttendeesEvent", mCbAttendeesEvent->isChecked());
00231 cfg->writeEntry( "ExcludePrivateEvent", mCbExcludePrivateEvent->isChecked());
00232 cfg->writeEntry( "ExcludeConfidentialEvent", mCbExcludeConfidentialEvent->isChecked());
00233 cfg->writeEntry( "CategoriesTodo", mCbCategoriesTodo->isChecked());
00234 cfg->writeEntry( "AttendeesTodo", mCbAttendeesTodo->isChecked());
00235 cfg->writeEntry( "ExcludePrivateTodo", mCbExcludePrivateTodo->isChecked());
00236 cfg->writeEntry( "ExcludeConfidentialTodo", mCbExcludeConfidentialTodo->isChecked());
00237 cfg->writeEntry( "DueDates", mCbDueDates->isChecked());
00238
00239 cfg->sync();
00240 }
00241
00242 void ExportWebDialog::exportWebPage(bool synchronous)
00243 {
00244 saveSettings();
00245
00246 mExport->setTitle( "KOrganizer Calendar" );
00247 mExport->setTitleTodo( "KOrganizer To-Do List" );
00248 mExport->setCredit( "KOrganizer", "http://korganizer.kde.org" );
00249 mExport->setEmail( KOPrefs::instance()->email() );
00250 mExport->setFullName( KOPrefs::instance()->fullName() );
00251 mExport->setMonthViewEnabled(mCbMonth->isChecked());
00252 mExport->setEventsEnabled(mCbEvent->isChecked());
00253 mExport->setTodosEnabled(mCbTodo->isChecked());
00254 mExport->setCategoriesEventEnabled(mCbCategoriesEvent->isChecked());
00255 mExport->setAttendeesEventEnabled(mCbAttendeesEvent->isChecked());
00256 mExport->setExcludePrivateEventEnabled(mCbExcludePrivateEvent->isChecked());
00257 mExport->setExcludeConfidentialEventEnabled(mCbExcludeConfidentialEvent->isChecked());
00258 mExport->setCategoriesTodoEnabled(mCbCategoriesTodo->isChecked());
00259 mExport->setAttendeesTodoEnabled(mCbAttendeesTodo->isChecked());
00260 mExport->setExcludePrivateTodoEnabled(mCbExcludePrivateTodo->isChecked());
00261 mExport->setExcludeConfidentialTodoEnabled(mCbExcludeConfidentialTodo->isChecked());
00262 mExport->setDueDateEnabled(mCbDueDates->isChecked());
00263 mExport->setDateRange(mFromDate->date(),mToDate->date());
00264
00265 QDate cdate=mFromDate->date();
00266 while (cdate<=mToDate->date())
00267 {
00268 if ( !KOCore::self()->holiday(cdate).isEmpty() )
00269 mExport->addHoliday( cdate, KOCore::self()->holiday(cdate) );
00270 cdate = cdate.addDays(1);
00271 }
00272
00273 KURL dest(mOutputFileEdit->lineEdit()->text());
00274
00275 KOPrefs::instance()->mHtmlExportFile = mOutputFileEdit->lineEdit()->text();
00276
00277 if (synchronous) {
00278 if (!dest.isLocalFile()) {
00279 KTempFile tf;
00280 QString tfile = tf.name();
00281 tf.close();
00282 mExport->save(tfile);
00283 if (!KIO::NetAccess::upload (tfile, dest, this)) {
00284 KNotifyClient::event (winId(),"Could not upload file.");
00285 }
00286 tf.unlink();
00287 } else {
00288 mExport->save(dest.path());
00289 }
00290 } else {
00291 mDataAvailable = true;
00292 KIO::TransferJob *job = KIO::put(dest,-1,true,false);
00293 connect(job,SIGNAL(dataReq(KIO::Job *,QByteArray &)),
00294 SLOT(slotDataReq(KIO::Job *,QByteArray &)));
00295 connect(job,SIGNAL(result(KIO::Job *)),SLOT(slotResult(KIO::Job *)));
00296 }
00297 }
00298
00299 void ExportWebDialog::slotResult(KIO::Job *job)
00300 {
00301 kdDebug(5850) << "slotResult" << endl;
00302 int err = job->error();
00303 if (err)
00304 {
00305 kdDebug(5850) << " Error " << err << ": " << job->errorString() << endl;
00306 job->showErrorDialog();
00307 } else {
00308 kdDebug(5850) << " No Error" << endl;
00309 accept();
00310 }
00311 kdDebug(5850) << "slotResult done" << endl;
00312 }
00313
00314 void ExportWebDialog::slotDataReq(KIO::Job *,QByteArray &data)
00315 {
00316 kdDebug(5850) << "ExportWebDialog::slotDataReq()" << endl;
00317
00318 if (mDataAvailable) {
00319 kdDebug(5850) << " Data availavble" << endl;
00320 QTextStream ts(data,IO_WriteOnly);
00321 ts.setEncoding( QTextStream::Latin1 );
00322
00323 mExport->save(&ts);
00324 mDataAvailable = false;
00325 } else
00326 kdDebug(5850) << " No Data" << endl;
00327 }