diff -r 000000000000 -r 190b3a70fabc exportxhtmldialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/exportxhtmldialog.cpp Thu Nov 16 10:07:11 2006 +0000 @@ -0,0 +1,411 @@ +#include "exportxhtmldialog.h" + +#include +#include +#include + +#include "options.h" +#include "settings.h" + + +extern Options options; +extern QDir vymBaseDir; +extern Settings settings; + +ExportXHTMLDialog::ExportXHTMLDialog(QWidget* parent) : QDialog(parent) +{ + ui.setupUi(this); + + filepath=""; + settingsChanged=false; + scriptProc=new Process; + + // signals and slots connections + connect(ui.browseExportDirButton, SIGNAL(pressed()), this, SLOT(browseDirectoryPressed())); + connect(ui.outputButton, SIGNAL(toggled(bool)), this, SLOT(outputButtonPressed(bool))); + connect(ui.browseXSLButton, SIGNAL(pressed()), this, SLOT(browseXSLPressed())); + connect(ui.browseCSSButton, SIGNAL(pressed()), this, SLOT(browseCSSPressed())); + connect(ui.imageButton, SIGNAL(toggled(bool)), this, SLOT(imageButtonPressed(bool))); + connect(ui.textColorButton, SIGNAL(toggled(bool)), this, SLOT(textcolorButtonPressed(bool))); + connect(ui.lineEditDir, SIGNAL(textChanged(const QString&)), this, SLOT(dirChanged())); + connect(ui.lineEditCSS, SIGNAL(textChanged(const QString&)), this, SLOT(cssChanged())); + connect(ui.lineEditXSL, SIGNAL(textChanged(const QString&)), this, SLOT(xslChanged())); + connect(ui.warningsButton, SIGNAL(toggled(bool)), this, SLOT(warningsButtonPressed(bool))); + connect(ui.saveSettingsInMapButton, SIGNAL(toggled(bool)), this, SLOT(saveSettingsInMapButtonPressed(bool))); + connect(ui.browsePreExportButton, SIGNAL(pressed()), this, SLOT(browsePreExportButtonPressed())); + connect(ui.lineEditPreScript, SIGNAL(textChanged(const QString&)), this, SLOT(prescriptChanged())); + connect(ui.lineEditPostScript, SIGNAL(textChanged(const QString&)), this, SLOT(postscriptChanged())); + connect(ui.browsePostExportButton, SIGNAL(pressed()), this, SLOT(browsePostExportButtonPressed())); +} + + +void ExportXHTMLDialog::readSettings() +{ + + dir=settings.readLocalEntry (filepath,"/export/xhtml/exportDir",vymBaseDir.currentDirPath() ); + ui.lineEditDir->setText(dir); + + if ( settings.readLocalEntry (filepath,"/export/xhtml/useImage","yes")=="yes") + useImage=true; + else + useImage=false; + ui.imageButton->setChecked(useImage); + + if ( settings.readLocalEntry (filepath,"/export/xhtml/useTextColor","no")=="yes") + useTextColor=true; + else + useTextColor=false; + ui.textColorButton->setChecked(useTextColor); + +/* FIXME this was used in old html export, is not yet in new stylesheet + if ( settings.readEntry ("/export/html/useHeading","no")=="yes") + useHeading=true; + else + useHeading=false; + checkBox4_2->setChecked(useHeading); +*/ + + if ( settings.readLocalEntry (filepath,"/export/xhtml/saveSettingsInMap","no")=="yes") + saveSettingsInMap=true; + else + saveSettingsInMap=false; + ui.saveSettingsInMapButton->setChecked(saveSettingsInMap); + + if ( settings.readEntry ("/export/xhtml/showWarnings","yes")=="yes") + showWarnings=true; + else + showWarnings=false; + ui.warningsButton->setChecked(showWarnings); + + if ( settings.readEntry ("/export/xhtml/showOutput","no")=="yes") + showOutput=true; + else + showOutput=false; + ui.outputButton->setChecked(showOutput); + + // For testing better use local styles + if (options.isOn ("local")) + { + xsl=vymBaseDir.path()+"/styles/vym2xhtml.xsl"; + css=vymBaseDir.path()+"/styles/vym.css"; + } else + { + xsl=settings.readLocalEntry + (filepath,"/export/xhtml/xsl","/usr/share/vym/styles/vym2xhtml.xsl"); + css=settings.readLocalEntry + (filepath,"/export/xhtml/css","/usr/share/vym/styles/vym.css"); + } + ui.lineEditXSL->setText(xsl); + ui.lineEditCSS->setText(css); + + prescript=settings.readLocalEntry + (filepath,"/export/xhtml/prescript",""); + ui.lineEditPreScript->setText (prescript); + + postscript=settings.readLocalEntry + (filepath,"/export/xhtml/postscript",""); + ui.lineEditPostScript->setText (postscript); + + if (!prescript.isEmpty() || !postscript.isEmpty()) + { + QMessageBox::warning( 0, tr( "Warning" ),tr( + "The settings saved in the map " + "would like to run scripts:\n\n" + "%1\n\n" + "Please check, if you really\n" + "want to allow this in your system!").arg(prescript+" "+postscript)); + + } +} + +void ExportXHTMLDialog::dirChanged() +{ + dir=ui.lineEditDir->text(); + if (dir.right(1)!="/") + dir+="/"; + settingsChanged=true; +} + +void ExportXHTMLDialog::browseDirectoryPressed() +{ + QFileDialog fd( this); + fd.setMode (QFileDialog::DirectoryOnly); + fd.setCaption(tr("VYM - Export HTML to directory")); + fd.setModal (true); + fd.setDirectory (QDir::current()); + fd.show(); + + if ( fd.exec() == QDialog::Accepted ) + { + dir=fd.selectedFile(); + ui.lineEditDir->setText (dir ); + settingsChanged=true; + } +} + +void ExportXHTMLDialog::imageButtonPressed(bool b) +{ + useImage=b; + settingsChanged=true; +} + +void ExportXHTMLDialog::textcolorButtonPressed(bool b) +{ + useTextColor=b; + settingsChanged=true; +} + +void ExportXHTMLDialog::saveSettingsInMapButtonPressed(bool b) +{ + saveSettingsInMap=b; + settingsChanged=true; +} + +void ExportXHTMLDialog::warningsButtonPressed(bool b) +{ + showWarnings=b; + settingsChanged=true; +} + + +void ExportXHTMLDialog::outputButtonPressed(bool b) +{ + showOutput=b; + settingsChanged=true; +} + +void ExportXHTMLDialog::cssChanged() +{ + css=ui.lineEditCSS->text(); + settingsChanged=true; +} + +void ExportXHTMLDialog::browseCSSPressed() +{ + QFileDialog fd( this); + fd.setModal (true); + fd.setFilter ("Cascading Stylesheet (*.css)"); + fd.setDirectory (QDir::current()); + fd.show(); + + if ( fd.exec() == QDialog::Accepted ) + { + css=fd.selectedFile(); + ui.lineEditCSS->setText (css ); + settingsChanged=true; + } +} + +void ExportXHTMLDialog::xslChanged() +{ + xsl=ui.lineEditXSL->text(); + settingsChanged=true; +} + +void ExportXHTMLDialog::prescriptChanged() +{ + prescript=ui.lineEditPreScript->text(); + settingsChanged=true; +} + +void ExportXHTMLDialog::browseXSLPressed() +{ + QFileDialog fd( this); + fd.setModal (true); + fd.setFilter ("Extensible Stylesheet Language (*.xsl)"); + fd.setDirectory (QDir::current()); + fd.show(); + + if ( fd.exec() == QDialog::Accepted ) + { + xsl=fd.selectedFile(); + ui.lineEditXSL->setText (xsl ); + settingsChanged=true; + } +} + +void ExportXHTMLDialog::postscriptChanged() +{ + postscript=ui.lineEditPostScript->text(); + settingsChanged=true; +} + +void ExportXHTMLDialog::browsePreExportButtonPressed() +{ + QFileDialog fd( this); + fd.setModal (true); + fd.setFilter ("Scripts (*.sh *.pl *.py *.php)"); + fd.setDirectory (QDir::current()); + fd.show(); + + if ( fd.exec() == QDialog::Accepted ) + { + prescript=fd.selectedFile(); + ui.lineEditPreScript->setText (prescript ); + settingsChanged=true; + } + +} + +void ExportXHTMLDialog::browsePostExportButtonPressed() +{ + QFileDialog fd( this); + fd.setModal (true); + fd.setFilter ("Scripts (*.sh *.pl *.py *.php)"); + fd.setDirectory (QDir::current()); + fd.show(); + + if ( fd.exec() == QDialog::Accepted ) + { + postscript=fd.selectedFile(); + ui.lineEditPostScript->setText (postscript ); + settingsChanged=true; + } +} + + +void ExportXHTMLDialog::doExport (const QString &mapname) +{ + // Save options to settings file + // (but don't save at destructor, which + // is called for "cancel", too) + settings.setLocalEntry (filepath,"/export/xhtml/exportDir",dir); + settings.setLocalEntry (filepath,"/export/xhtml/prescript",prescript); + settings.setLocalEntry (filepath,"/export/xhtml/postscript",postscript); + + if (useImage) + settings.setLocalEntry (filepath,"/export/xhtml/useImage","yes"); + else + settings.setLocalEntry (filepath,"/export/xhtml/useImage","no"); + + if (useTextColor) + settings.setLocalEntry (filepath,"/export/xhtml/useTextColor","yes"); + else + settings.setLocalEntry (filepath,"/export/xhtml/useTextColor","no"); + + if (showWarnings) + settings.writeEntry ("/export/xhtml/showWarnings","yes"); + else + settings.writeEntry ("/export/xhtml/showWarnings","no"); + + if (showOutput) + settings.writeEntry ("/export/xhtml/showOutput","yes"); + else + settings.writeEntry ("/export/xhtml/showOutput","no"); + + QString ipath; + ipath=vymBaseDir.path()+"/flags/flag-url-16x16.png"; + if (!options.isOn ("local")) + { + settings.setLocalEntry + (filepath,"/export/xhtml/xsl",xsl); + settings.setLocalEntry + (filepath,"/export/xhtml/css",css); + } + + // Provide a smaller URL-icon to improve Layout + QPixmap pm; + if (!pm.load(ipath,"PNG") ) + QMessageBox::warning( 0, tr( "Warning" ),tr("Could not open %1").arg(ipath)); + + + if(!pm.save (dir + "flags/flag-url-16x16.png","PNG")) + QMessageBox::warning( 0, tr( "Warning" ),tr("Could not write %1").arg(ipath)); + if (!saveSettingsInMap) + settings.clearLocal("/export/xhtml"); + else + settings.setLocalEntry + (filepath,"/export/xhtml/saveSettingsInMap","yes"); + + // Copy CSS file + QFile css_src (css); + QFile css_dst (dir+"vym.css"); + if (!css_src.open ( QIODevice::ReadOnly)) + QMessageBox::warning( 0, tr( "Warning" ),tr("Could not open %1").arg(css)); + else + { + if (!css_dst.open( QIODevice::WriteOnly)) + QMessageBox::warning( 0, tr( "Warning" ), tr("Could not open %1").arg(dir+"vym.css")); + else + { + + QTextStream tsout( &css_dst); + QTextStream tsin ( &css_src); + QString s= tsin.read(); + tsout << s; + css_dst.close(); + } + css_src.close(); + } + + if (!prescript.isEmpty()) runScript (prescript,dir+mapname+".xml"); + + if (useImage) + p.addStringParam ("imagemap","images/"+mapname+".png"); + if (useTextColor) + p.addStringParam ("use.textcolor","1"); + p.addStringParam ("mapname",mapname+".vym"); + + p.setOutputFile (dir+mapname+".html"); + p.setInputFile (dir+mapname+".xml"); + p.setXSLFile (xsl); + p.process(); + + if (!postscript.isEmpty()) runScript (postscript,dir+mapname+".html"); + +} + +void ExportXHTMLDialog::setFilePath(const QString &s) +{ + filepath=s; +} + +void ExportXHTMLDialog::setMapName(const QString &s) +{ + mapname=s; +} + +QString ExportXHTMLDialog::getDir() +{ + return dir; +} + +bool ExportXHTMLDialog::warnings() +{ + return showWarnings; +} + +bool ExportXHTMLDialog::hasChanged() +{ + return settingsChanged; +} + + +void ExportXHTMLDialog::runScript(QString spath, QString fpath) +{ + spath.replace ("%f",fpath); + QStringList args=QStringList::split (' ',spath,false); + + scriptProc->clearArguments(); + scriptProc->setArguments (args); + p.addOutput ("vym is executing: \n" + scriptProc->arguments().join(" ") ); + if (!scriptProc->start() ) + { + QMessageBox::critical( 0, tr( "Critical Error" ), + tr("Could not start %1").arg(spath) ); + } else + { + scriptProc->waitFinished(); + if (!scriptProc->normalExit() ) + QMessageBox::critical( 0, tr( "Critical Error" ), + tr("%1 didn't exit normally").arg(spath) + + scriptProc->getErrout() ); + else + if (scriptProc->exitStatus()>0) showOutput=true; + + } + p.addOutput ("\n"); + p.addOutput (scriptProc->getErrout()); + p.addOutput (scriptProc->getStdout()); +} +