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 <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
00080
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
00111
00112
00113
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
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
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 }