insilmaril@824: #include "exporthtmldialog.h" insilmaril@824: insilmaril@824: #include insilmaril@824: #include insilmaril@824: #include insilmaril@824: insilmaril@824: #include "options.h" insilmaril@824: #include "settings.h" insilmaril@824: #include "warningdialog.h" insilmaril@824: insilmaril@824: insilmaril@824: extern Options options; insilmaril@824: extern QDir vymBaseDir; insilmaril@824: extern Settings settings; insilmaril@824: extern bool debug; insilmaril@824: insilmaril@824: ExportHTMLDialog::ExportHTMLDialog(QWidget* parent) : QDialog(parent) insilmaril@824: { insilmaril@824: ui.setupUi(this); insilmaril@824: insilmaril@824: filepath=""; insilmaril@824: settingsChanged=false; insilmaril@824: scriptProc=new Process; insilmaril@824: insilmaril@824: // signals and slots connections insilmaril@824: connect(ui.browseExportDirButton, SIGNAL(pressed()), this, SLOT(browseDirectoryPressed())); insilmaril@824: connect(ui.outputButton, SIGNAL(toggled(bool)), this, SLOT(outputButtonPressed(bool))); insilmaril@824: connect(ui.browseCSSButton, SIGNAL(pressed()), this, SLOT(browseCSSPressed())); insilmaril@824: connect(ui.imageButton, SIGNAL(toggled(bool)), this, SLOT(imageButtonPressed(bool))); insilmaril@824: connect(ui.textColorButton, SIGNAL(toggled(bool)), this, SLOT(textcolorButtonPressed(bool))); insilmaril@824: connect(ui.lineEditDir, SIGNAL(textChanged(const QString&)), this, SLOT(dirChanged())); insilmaril@824: connect(ui.lineEditCSS, SIGNAL(textChanged(const QString&)), this, SLOT(cssChanged())); insilmaril@824: connect(ui.saveSettingsInMapButton, SIGNAL(toggled(bool)), this, SLOT(saveSettingsInMapButtonPressed(bool))); insilmaril@824: connect(ui.browsePreExportButton, SIGNAL(pressed()), this, SLOT(browsePreExportButtonPressed())); insilmaril@824: connect(ui.lineEditPreScript, SIGNAL(textChanged(const QString&)), this, SLOT(prescriptChanged())); insilmaril@824: connect(ui.lineEditPostScript, SIGNAL(textChanged(const QString&)), this, SLOT(postscriptChanged())); insilmaril@824: connect(ui.browsePostExportButton, SIGNAL(pressed()), this, SLOT(browsePostExportButtonPressed())); insilmaril@824: } insilmaril@824: insilmaril@824: insilmaril@824: void ExportHTMLDialog::readSettings() insilmaril@824: { insilmaril@824: insilmaril@824: dir=settings.readLocalEntry (filepath,"/export/html/exportDir",vymBaseDir.currentDirPath() ); insilmaril@824: ui.lineEditDir->setText(dir); insilmaril@824: insilmaril@824: if ( settings.readLocalEntry (filepath,"/export/html/useImage","yes")=="yes") insilmaril@824: useImage=true; insilmaril@824: else insilmaril@824: useImage=false; insilmaril@824: ui.imageButton->setChecked(useImage); insilmaril@824: insilmaril@824: if ( settings.readLocalEntry (filepath,"/export/html/useTextColor","no")=="yes") insilmaril@824: useTextColor=true; insilmaril@824: else insilmaril@824: useTextColor=false; insilmaril@824: ui.textColorButton->setChecked(useTextColor); insilmaril@824: insilmaril@824: /* TODO this was used in old html export, is not yet in new stylesheet insilmaril@824: if ( settings.readEntry ("/export/html/useHeading","no")=="yes") insilmaril@824: useHeading=true; insilmaril@824: else insilmaril@824: useHeading=false; insilmaril@824: checkBox4_2->setChecked(useHeading); insilmaril@824: */ insilmaril@824: insilmaril@824: if ( settings.readLocalEntry (filepath,"/export/html/saveSettingsInMap","no")=="yes") insilmaril@824: saveSettingsInMap=true; insilmaril@824: else insilmaril@824: saveSettingsInMap=false; insilmaril@824: ui.saveSettingsInMapButton->setChecked(saveSettingsInMap); insilmaril@824: insilmaril@824: if ( settings.readEntry ("/export/html/showOutput","no")=="yes") insilmaril@824: showOutput=true; insilmaril@824: else insilmaril@824: showOutput=false; insilmaril@824: ui.outputButton->setChecked(showOutput); insilmaril@824: insilmaril@824: // For testing better use local styles insilmaril@824: const QString defcss(vymBaseDir.path() + "/styles/vym.css"); insilmaril@824: if (options.isOn ("local")) insilmaril@824: { insilmaril@824: css=defcss; insilmaril@824: } else insilmaril@824: { insilmaril@824: css=settings.readLocalEntry insilmaril@824: (filepath,"/export/html/css",defcss); insilmaril@824: } insilmaril@824: ui.lineEditCSS->setText(css); insilmaril@824: insilmaril@824: prescript=settings.readLocalEntry insilmaril@824: (filepath,"/export/html/prescript",""); insilmaril@824: ui.lineEditPreScript->setText (prescript); insilmaril@824: insilmaril@824: postscript=settings.readLocalEntry insilmaril@824: (filepath,"/export/html/postscript",""); insilmaril@824: ui.lineEditPostScript->setText (postscript); insilmaril@824: insilmaril@824: if (!prescript.isEmpty() || !postscript.isEmpty()) insilmaril@824: { insilmaril@824: QMessageBox::warning( 0, tr( "Warning" ),tr( insilmaril@824: "The settings saved in the map " insilmaril@824: "would like to run scripts:\n\n" insilmaril@824: "%1\n\n" insilmaril@824: "Please check, if you really\n" insilmaril@824: "want to allow this in your system!").arg(prescript+" "+postscript)); insilmaril@824: insilmaril@824: } insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::setDir(const QString &d) insilmaril@824: { insilmaril@824: dir=d; insilmaril@824: if (dir.right(1)!="/") dir+="/"; insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::dirChanged() insilmaril@824: { insilmaril@824: setDir (ui.lineEditDir->text()); insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::browseDirectoryPressed() insilmaril@824: { insilmaril@824: QFileDialog fd( this); insilmaril@824: fd.setMode (QFileDialog::DirectoryOnly); insilmaril@824: fd.setCaption(tr("VYM - Export HTML to directory")); insilmaril@824: fd.setModal (true); insilmaril@824: fd.setDirectory (QDir::current()); insilmaril@824: fd.show(); insilmaril@824: insilmaril@824: if ( fd.exec() == QDialog::Accepted ) insilmaril@824: { insilmaril@824: QDir dir=fd.selectedFile(); insilmaril@824: ui.lineEditDir->setText (dir.path() ); insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::imageButtonPressed(bool b) insilmaril@824: { insilmaril@824: useImage=b; insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::textcolorButtonPressed(bool b) insilmaril@824: { insilmaril@824: useTextColor=b; insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::saveSettingsInMapButtonPressed(bool b) insilmaril@824: { insilmaril@824: saveSettingsInMap=b; insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::warningsButtonPressed(bool b) insilmaril@824: { insilmaril@824: showWarnings=b; insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: insilmaril@824: insilmaril@824: void ExportHTMLDialog::outputButtonPressed(bool b) insilmaril@824: { insilmaril@824: showOutput=b; insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::cssChanged() insilmaril@824: { insilmaril@824: css=ui.lineEditCSS->text(); insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: insilmaril@824: QString ExportHTMLDialog::getCSSPath() insilmaril@824: { insilmaril@824: return css; insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::browseCSSPressed() insilmaril@824: { insilmaril@824: QFileDialog fd( this); insilmaril@824: fd.setModal (true); insilmaril@824: fd.setFilter ("Cascading Stylesheet (*.css)"); insilmaril@824: fd.setDirectory (QDir::current()); insilmaril@824: fd.show(); insilmaril@824: insilmaril@824: if ( fd.exec() == QDialog::Accepted ) insilmaril@824: { insilmaril@824: css=fd.selectedFile(); insilmaril@824: ui.lineEditCSS->setText (css ); insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::prescriptChanged() insilmaril@824: { insilmaril@824: prescript=ui.lineEditPreScript->text(); insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::postscriptChanged() insilmaril@824: { insilmaril@824: postscript=ui.lineEditPostScript->text(); insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::browsePreExportButtonPressed() insilmaril@824: { insilmaril@824: QFileDialog fd( this); insilmaril@824: fd.setModal (true); insilmaril@824: fd.setFilter ("Scripts (*.sh *.pl *.py *.php)"); insilmaril@824: fd.setDirectory (QDir::current()); insilmaril@824: fd.show(); insilmaril@824: insilmaril@824: if ( fd.exec() == QDialog::Accepted ) insilmaril@824: { insilmaril@824: prescript=fd.selectedFile(); insilmaril@824: ui.lineEditPreScript->setText (prescript ); insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::browsePostExportButtonPressed() insilmaril@824: { insilmaril@824: QFileDialog fd( this); insilmaril@824: fd.setModal (true); insilmaril@824: fd.setFilter ("Scripts (*.sh *.pl *.py *.php)"); insilmaril@824: fd.setDirectory (QDir::current()); insilmaril@824: fd.show(); insilmaril@824: insilmaril@824: if ( fd.exec() == QDialog::Accepted ) insilmaril@824: { insilmaril@824: postscript=fd.selectedFile(); insilmaril@824: ui.lineEditPostScript->setText (postscript ); insilmaril@824: settingsChanged=true; insilmaril@824: } insilmaril@824: } insilmaril@824: insilmaril@824: insilmaril@824: void ExportHTMLDialog::doExport (const QString &mapname) insilmaril@824: { insilmaril@824: insilmaril@824: // Save options to settings file insilmaril@824: // (but don't save at destructor, which insilmaril@824: // is called for "cancel", too) insilmaril@824: settings.setLocalEntry (filepath,"/export/html/exportDir",dir); insilmaril@824: settings.setLocalEntry (filepath,"/export/html/prescript",prescript); insilmaril@824: settings.setLocalEntry (filepath,"/export/html/postscript",postscript); insilmaril@824: insilmaril@824: if (useImage) insilmaril@824: settings.setLocalEntry (filepath,"/export/html/useImage","yes"); insilmaril@824: else insilmaril@824: settings.setLocalEntry (filepath,"/export/html/useImage","no"); insilmaril@824: insilmaril@824: if (useTextColor) insilmaril@824: settings.setLocalEntry (filepath,"/export/html/useTextColor","yes"); insilmaril@824: else insilmaril@824: settings.setLocalEntry (filepath,"/export/html/useTextColor","no"); insilmaril@824: insilmaril@824: if (showWarnings) insilmaril@824: settings.writeEntry ("/export/html/showWarnings","yes"); insilmaril@824: else insilmaril@824: settings.writeEntry ("/export/html/showWarnings","no"); insilmaril@824: insilmaril@824: if (showOutput) insilmaril@824: settings.writeEntry ("/export/html/showOutput","yes"); insilmaril@824: else insilmaril@824: settings.writeEntry ("/export/html/showOutput","no"); insilmaril@824: insilmaril@824: QString ipath; insilmaril@824: ipath=vymBaseDir.path()+"/flags/flag-url-16x16.png"; insilmaril@824: if (!options.isOn ("local")) insilmaril@824: { insilmaril@824: settings.setLocalEntry insilmaril@824: (filepath,"/export/html/css",css); insilmaril@824: } insilmaril@824: insilmaril@824: if (!saveSettingsInMap) insilmaril@824: settings.clearLocal("/export/html"); insilmaril@824: else insilmaril@824: settings.setLocalEntry insilmaril@824: (filepath,"/export/html/saveSettingsInMap","yes"); insilmaril@824: insilmaril@824: // Provide a smaller URL-icon to improve Layout //FIXME-1 insilmaril@824: QPixmap pm; insilmaril@824: if (!pm.load(ipath,"PNG") ) insilmaril@824: QMessageBox::warning( 0, tr( "Warning" ),tr("Could not open %1").arg(ipath)); insilmaril@824: insilmaril@824: insilmaril@824: if(!pm.save (dir + "flags/flag-url-16x16.png","PNG")) insilmaril@824: QMessageBox::warning( 0, tr( "Warning" ),tr("Could not write %1").arg(ipath)); insilmaril@824: insilmaril@824: if (!prescript.isEmpty()) runScript (prescript,dir+mapname+".xml"); insilmaril@824: insilmaril@824: /* FIXME-1 insilmaril@824: if (useImage) insilmaril@824: p.addStringParam ("imagemap","images/"+mapname+".png"); insilmaril@824: if (useTextColor) insilmaril@824: p.addStringParam ("use.textcolor","1"); insilmaril@824: p.addStringParam ("mapname",mapname+".vym"); insilmaril@824: insilmaril@824: p.setOutputFile (dir+mapname+".html"); insilmaril@824: p.setInputFile (dir+mapname+".xml"); insilmaril@824: p.process(); insilmaril@824: */ insilmaril@824: insilmaril@824: if (!postscript.isEmpty()) runScript (postscript,dir+mapname+".html"); insilmaril@824: insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::setFilePath(const QString &s) insilmaril@824: { insilmaril@824: filepath=s; insilmaril@824: } insilmaril@824: insilmaril@824: void ExportHTMLDialog::setMapName(const QString &s) insilmaril@824: { insilmaril@824: mapname=s; insilmaril@824: } insilmaril@824: insilmaril@824: QString ExportHTMLDialog::getDir() insilmaril@824: { insilmaril@824: return dir; insilmaril@824: } insilmaril@824: insilmaril@824: bool ExportHTMLDialog::warnings() insilmaril@824: { insilmaril@824: return showWarnings; insilmaril@824: } insilmaril@824: insilmaril@824: bool ExportHTMLDialog::hasChanged() insilmaril@824: { insilmaril@824: return settingsChanged; insilmaril@824: } insilmaril@824: insilmaril@824: insilmaril@824: void ExportHTMLDialog::runScript(QString spath, QString fpath) insilmaril@824: { insilmaril@824: spath.replace ("%f",fpath); insilmaril@824: QStringList args=QStringList::split (' ',spath,false); insilmaril@824: insilmaril@824: //FIXME-1 p.addOutput ("vym is executing: \n" + spath+" "+args.join(" ") ); insilmaril@824: scriptProc->start (spath,args); insilmaril@824: if (!scriptProc->waitForStarted() ) insilmaril@824: { insilmaril@824: QMessageBox::critical( 0, tr( "Critical Error" ), insilmaril@824: tr("Could not start %1").arg(spath) ); insilmaril@824: } else insilmaril@824: { insilmaril@824: if (!scriptProc->waitForFinished()) insilmaril@824: QMessageBox::critical( 0, tr( "Critical Error" ), insilmaril@824: tr("%1 didn't exit normally").arg(spath) + insilmaril@824: scriptProc->getErrout() ); insilmaril@824: else insilmaril@824: if (scriptProc->exitStatus()>0) showOutput=true; insilmaril@824: insilmaril@824: } insilmaril@824: /* FIXME-1 insilmaril@824: p.addOutput ("\n"); insilmaril@824: p.addOutput (scriptProc->getErrout()); insilmaril@824: p.addOutput (scriptProc->getStdout()); insilmaril@824: */ insilmaril@824: } insilmaril@824: