exports.cpp
author insilmaril
Fri, 06 Mar 2009 15:02:58 +0000
changeset 741 1b4d1ea6ea8c
parent 740 6dc0a20031f7
child 742 54d44ecd6097
permissions -rw-r--r--
Iteration over map works now (again)
insilmaril@0
     1
#include "exports.h"
insilmaril@171
     2
#include "file.h"
insilmaril@171
     3
#include "linkablemapobj.h"
insilmaril@171
     4
#include "misc.h"
insilmaril@171
     5
#include "mainwindow.h"
insilmaril@311
     6
#include "warningdialog.h"
insilmaril@228
     7
#include "xsltproc.h"
insilmaril@0
     8
insilmaril@171
     9
extern Main *mainWindow;
insilmaril@228
    10
extern QDir vymBaseDir;
insilmaril@404
    11
extern QString vymName;
insilmaril@131
    12
insilmaril@171
    13
ExportBase::ExportBase()
insilmaril@0
    14
{
insilmaril@0
    15
	indentPerDepth="  ";
insilmaril@377
    16
	bool ok;
insilmaril@606
    17
    tmpDir.setPath (makeTmpDir(ok,"vym-export"));
insilmaril@377
    18
	if (!tmpDir.exists() || !ok)
insilmaril@377
    19
		QMessageBox::critical( 0, QObject::tr( "Error" ),
insilmaril@377
    20
					   QObject::tr("Couldn't access temporary directory\n"));
insilmaril@512
    21
	cancelFlag=false;				   
insilmaril@228
    22
}
insilmaril@228
    23
insilmaril@228
    24
ExportBase::~ExportBase()
insilmaril@228
    25
{
insilmaril@377
    26
	// Cleanup tmpdir
insilmaril@228
    27
	removeDir (tmpDir);
insilmaril@0
    28
}
insilmaril@0
    29
insilmaril@424
    30
void ExportBase::setDir(const QDir &d)
insilmaril@0
    31
{
insilmaril@424
    32
	outDir=d;
insilmaril@199
    33
}
insilmaril@199
    34
insilmaril@199
    35
void ExportBase::setFile (const QString &p)
insilmaril@199
    36
{
insilmaril@199
    37
	outputFile=p;
insilmaril@0
    38
}
insilmaril@0
    39
insilmaril@512
    40
QString ExportBase::getFile ()
insilmaril@512
    41
{
insilmaril@512
    42
	return outputFile;
insilmaril@512
    43
}
insilmaril@512
    44
insilmaril@643
    45
void ExportBase::setModel(VymModel *m)
insilmaril@0
    46
{
insilmaril@643
    47
	model=m;
insilmaril@0
    48
}
insilmaril@0
    49
insilmaril@228
    50
void ExportBase::setCaption (const QString &s)
insilmaril@228
    51
{
insilmaril@228
    52
	caption=s;
insilmaril@228
    53
}
insilmaril@228
    54
insilmaril@228
    55
void ExportBase::addFilter(const QString &s)
insilmaril@228
    56
{
insilmaril@228
    57
	filter=s;
insilmaril@228
    58
}
insilmaril@228
    59
insilmaril@228
    60
bool ExportBase::execDialog()
insilmaril@228
    61
{
insilmaril@228
    62
	{
insilmaril@643
    63
		QFileDialog *fd=new QFileDialog( 0, caption);
insilmaril@366
    64
		fd->setFilter (filter);
insilmaril@228
    65
		fd->setCaption(caption);
insilmaril@228
    66
		fd->setMode( QFileDialog::AnyFile );
insilmaril@424
    67
		fd->setDir (outDir);
insilmaril@228
    68
		fd->show();
insilmaril@228
    69
insilmaril@228
    70
		if ( fd->exec() == QDialog::Accepted )
insilmaril@228
    71
		{
insilmaril@228
    72
			if (QFile (fd->selectedFile()).exists() )
insilmaril@228
    73
			{
insilmaril@404
    74
				QMessageBox mb( vymName,
insilmaril@228
    75
					QObject::tr("The file %1 exists already.\nDo you want to overwrite it?").arg(fd->selectedFile()), 
insilmaril@228
    76
				QMessageBox::Warning,
insilmaril@228
    77
				QMessageBox::Yes | QMessageBox::Default,
insilmaril@228
    78
				QMessageBox::Cancel | QMessageBox::Escape,
insilmaril@366
    79
				Qt::NoButton );
insilmaril@228
    80
				mb.setButtonText( QMessageBox::Yes, QObject::tr("Overwrite") );
insilmaril@228
    81
				mb.setButtonText( QMessageBox::No, QObject::tr("Cancel"));
insilmaril@228
    82
				ExportBase ex;
insilmaril@228
    83
				switch( mb.exec() ) 
insilmaril@228
    84
				{
insilmaril@228
    85
					case QMessageBox::Yes:
insilmaril@228
    86
						// save 
insilmaril@228
    87
						break;;
insilmaril@228
    88
					case QMessageBox::Cancel:
insilmaril@512
    89
						cancelFlag=true;
insilmaril@228
    90
						return false;
insilmaril@228
    91
						break;
insilmaril@228
    92
				}
insilmaril@228
    93
			}
insilmaril@228
    94
			outputFile=fd->selectedFile();
insilmaril@512
    95
			cancelFlag=false;
insilmaril@228
    96
			return true;
insilmaril@228
    97
		}
insilmaril@228
    98
	}
insilmaril@228
    99
	return false;
insilmaril@228
   100
}
insilmaril@228
   101
insilmaril@512
   102
bool ExportBase::canceled()
insilmaril@512
   103
{
insilmaril@512
   104
	return cancelFlag;
insilmaril@512
   105
}
insilmaril@512
   106
insilmaril@171
   107
QString ExportBase::getSectionString(BranchObj *bostart)
insilmaril@163
   108
{
insilmaril@205
   109
	// Make prefix like "2.5.3" for "bo:2,bo:5,bo:3"
insilmaril@163
   110
	QString r;
insilmaril@163
   111
	BranchObj *bo=bostart;
insilmaril@163
   112
	int depth=bo->getDepth();
insilmaril@163
   113
	while (depth>0)
insilmaril@163
   114
	{
insilmaril@163
   115
		r=QString("%1").arg(1+bo->getNum(),0,10)+"." + r;
insilmaril@163
   116
		bo=(BranchObj*)(bo->getParObj());
insilmaril@163
   117
		depth=bo->getDepth();
insilmaril@163
   118
	}	
insilmaril@163
   119
	if (r.isEmpty())
insilmaril@163
   120
		return r;
insilmaril@163
   121
	else	
insilmaril@163
   122
		return r + " ";
insilmaril@163
   123
}
insilmaril@163
   124
insilmaril@239
   125
////////////////////////////////////////////////////////////////////////
insilmaril@512
   126
ExportASCII::ExportASCII()
insilmaril@512
   127
{
insilmaril@512
   128
	filter="TXT (*.txt)";
insilmaril@512
   129
	caption=vymName+ " -" +QObject::tr("Export as ASCII")+" "+QObject::tr("(still experimental)");
insilmaril@512
   130
}
insilmaril@512
   131
insilmaril@228
   132
void ExportASCII::doExport()
insilmaril@0
   133
{
insilmaril@199
   134
	QFile file (outputFile);
insilmaril@366
   135
	if ( !file.open( QIODevice::WriteOnly ) )
insilmaril@0
   136
	{
insilmaril@228
   137
		qWarning ("ExportBase::exportXML  couldn't open "+outputFile);
insilmaril@0
   138
		return;
insilmaril@0
   139
	}
insilmaril@0
   140
	QTextStream ts( &file );	// use LANG decoding here...
insilmaril@0
   141
insilmaril@0
   142
	// Main loop over all branches
insilmaril@0
   143
	QString s;
insilmaril@613
   144
	QString curIndent;
insilmaril@613
   145
	int i;
insilmaril@741
   146
	TreeItem *cur=NULL;
insilmaril@741
   147
	TreeItem *prev=NULL;
insilmaril@741
   148
	int d;
insilmaril@741
   149
insilmaril@0
   150
	BranchObj *bo;
insilmaril@741
   151
	cur=model->next (cur,prev,d);
insilmaril@741
   152
	while (cur) 
insilmaril@0
   153
	{
insilmaril@741
   154
		if (cur->getType()==TreeItem::Branch || cur->getType()==TreeItem::MapCenter)
insilmaril@740
   155
		{
insilmaril@741
   156
			bo=(BranchObj*)(cur->getLMO());
insilmaril@741
   157
			std::cout << "ExportASCII::  "<<cur->getHeading().toStdString()<<std::endl;
insilmaril@254
   158
insilmaril@740
   159
			// Make indentstring
insilmaril@740
   160
			curIndent="";
insilmaril@741
   161
			for (i=0;i<cur->depth()-1;i++) curIndent+= indentPerDepth;
insilmaril@740
   162
insilmaril@740
   163
			if (!bo->hasHiddenExportParent() )
insilmaril@600
   164
			{
insilmaril@741
   165
				switch (cur->depth())
insilmaril@740
   166
				{
insilmaril@740
   167
					case 0:
insilmaril@741
   168
						ts << underline (cur->getHeading(),QString("="));
insilmaril@740
   169
						ts << "\n";
insilmaril@740
   170
						break;
insilmaril@740
   171
					case 1:
insilmaril@740
   172
						ts << "\n";
insilmaril@741
   173
						ts << (underline (getSectionString(bo) + cur->getHeading(), QString("-") ) );
insilmaril@740
   174
						ts << "\n";
insilmaril@740
   175
						break;
insilmaril@740
   176
					case 2:
insilmaril@740
   177
						ts << "\n";
insilmaril@741
   178
						ts << (curIndent + "* " + cur->getHeading());
insilmaril@740
   179
						ts << "\n";
insilmaril@740
   180
						break;
insilmaril@740
   181
					case 3:
insilmaril@741
   182
						ts << (curIndent + "- " + cur->getHeading());
insilmaril@740
   183
						ts << "\n";
insilmaril@740
   184
						break;
insilmaril@740
   185
					default:
insilmaril@741
   186
						ts << (curIndent + "- " + cur->getHeading());
insilmaril@740
   187
						ts << "\n";
insilmaril@740
   188
						break;
insilmaril@740
   189
				}
insilmaril@613
   190
insilmaril@740
   191
				// If necessary, write note
insilmaril@740
   192
				if (!bo->getNote().isEmpty())
insilmaril@740
   193
				{
insilmaril@740
   194
					curIndent +="  | ";
insilmaril@740
   195
					s=bo->getNoteASCII( curIndent, 80);
insilmaril@740
   196
					ts << s;
insilmaril@740
   197
				}
insilmaril@600
   198
			}
insilmaril@0
   199
		}
insilmaril@741
   200
		cur=model->next(cur,prev,d);
insilmaril@0
   201
	}
insilmaril@0
   202
	file.close();
insilmaril@0
   203
}
insilmaril@0
   204
insilmaril@613
   205
QString ExportASCII::underline (const QString &text, const QString &line)
insilmaril@613
   206
{
insilmaril@613
   207
	QString r=text + "\n";
insilmaril@613
   208
	for (int j=0;j<text.length();j++) r+=line;
insilmaril@613
   209
	return r;
insilmaril@613
   210
}
insilmaril@613
   211
insilmaril@497
   212
insilmaril@497
   213
////////////////////////////////////////////////////////////////////////
insilmaril@497
   214
void ExportCSV::doExport()
insilmaril@497
   215
{
insilmaril@497
   216
	QFile file (outputFile);
insilmaril@497
   217
	if ( !file.open( QIODevice::WriteOnly ) )
insilmaril@497
   218
	{
insilmaril@497
   219
		qWarning ("ExportBase::exportXML  couldn't open "+outputFile);
insilmaril@497
   220
		return;
insilmaril@497
   221
	}
insilmaril@497
   222
	QTextStream ts( &file );	// use LANG decoding here...
insilmaril@497
   223
insilmaril@497
   224
	// Write header
insilmaril@497
   225
	ts << "\"Note\""  <<endl;
insilmaril@497
   226
insilmaril@497
   227
	// Main loop over all branches
insilmaril@497
   228
	QString s;
insilmaril@613
   229
	QString curIndent("");
insilmaril@512
   230
	int i;
insilmaril@497
   231
	BranchObj *bo;
insilmaril@741
   232
	TreeItem *cur=NULL;
insilmaril@741
   233
	TreeItem *prev=NULL;
insilmaril@741
   234
	int d;
insilmaril@741
   235
	cur=model->next (cur,prev,d);
insilmaril@741
   236
	while (cur) 
insilmaril@497
   237
	{
insilmaril@741
   238
		bo=(BranchObj*)(cur->getLMO());
insilmaril@740
   239
insilmaril@600
   240
		if (!bo->hasHiddenExportParent() )
insilmaril@497
   241
		{
insilmaril@600
   242
			// If necessary, write note
insilmaril@600
   243
			if (!bo->getNote().isEmpty())
insilmaril@600
   244
			{
insilmaril@600
   245
				s =bo->getNoteASCII();
insilmaril@613
   246
				s=s.replace ("\n","\n"+curIndent);
insilmaril@600
   247
				ts << ("\""+s+"\",");
insilmaril@600
   248
			} else
insilmaril@600
   249
				ts <<"\"\",";
insilmaril@497
   250
insilmaril@600
   251
			// Make indentstring
insilmaril@741
   252
			for (i=0;i<cur->depth();i++) curIndent+= "\"\",";
insilmaril@497
   253
insilmaril@600
   254
			// Write heading
insilmaril@741
   255
			ts << curIndent << "\"" << cur->getHeading()<<"\""<<endl;
insilmaril@600
   256
		}
insilmaril@497
   257
		
insilmaril@741
   258
		cur=model->next(cur,prev,d);
insilmaril@613
   259
		curIndent="";
insilmaril@497
   260
	}
insilmaril@497
   261
	file.close();
insilmaril@497
   262
}
insilmaril@497
   263
insilmaril@239
   264
////////////////////////////////////////////////////////////////////////
insilmaril@239
   265
void ExportKDEBookmarks::doExport() 
insilmaril@239
   266
{
insilmaril@721
   267
	WarningDialog dia;
insilmaril@721
   268
	dia.showCancelButton (true);
insilmaril@721
   269
	dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("KDE"));
insilmaril@721
   270
	dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("KDE"));
insilmaril@721
   271
	dia.setShowAgainName("/exports/KDE/overwriteKDEBookmarks");
insilmaril@721
   272
	if (dia.exec()==QDialog::Accepted)
insilmaril@239
   273
	{
insilmaril@721
   274
		model->exportXML(tmpDir.path(),false);
insilmaril@721
   275
insilmaril@721
   276
		XSLTProc p;
insilmaril@721
   277
		p.setInputFile (tmpDir.path()+"/"+model->getMapName()+".xml");
insilmaril@721
   278
		p.setOutputFile (tmpDir.home().path()+"/.kde/share/apps/konqueror/bookmarks.xml");
insilmaril@721
   279
		p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
insilmaril@721
   280
		p.process();
insilmaril@721
   281
insilmaril@721
   282
		QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
insilmaril@721
   283
		QProcess *proc= new QProcess ;
insilmaril@721
   284
		proc->start( ub);
insilmaril@721
   285
		if (!proc->waitForStarted())
insilmaril@311
   286
		{
insilmaril@721
   287
			QMessageBox::warning(0, 
insilmaril@721
   288
				QObject::tr("Warning"),
insilmaril@721
   289
				QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
insilmaril@721
   290
		}	
insilmaril@239
   291
	}
insilmaril@239
   292
}
insilmaril@239
   293
insilmaril@239
   294
////////////////////////////////////////////////////////////////////////
insilmaril@311
   295
void ExportFirefoxBookmarks::doExport() 
insilmaril@311
   296
{
insilmaril@721
   297
	WarningDialog dia;
insilmaril@721
   298
	dia.showCancelButton (true);
insilmaril@721
   299
	dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("Firefox"));
insilmaril@721
   300
	dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("Firefox"));
insilmaril@721
   301
	dia.setShowAgainName("/vym/warnings/overwriteImportBookmarks");
insilmaril@721
   302
	if (dia.exec()==QDialog::Accepted)
insilmaril@311
   303
	{
insilmaril@721
   304
		model->exportXML(tmpDir.path(),false);
insilmaril@311
   305
insilmaril@311
   306
/*
insilmaril@721
   307
		XSLTProc p;
insilmaril@721
   308
		p.setInputFile (tmpDir.path()+"/"+me->getMapName()+".xml");
insilmaril@721
   309
		p.setOutputFile (tmpDir.home().path()+"/.kde/share/apps/konqueror/bookmarks.xml");
insilmaril@721
   310
		p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
insilmaril@721
   311
		p.process();
insilmaril@311
   312
insilmaril@721
   313
		QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
insilmaril@721
   314
		QProcess *proc = new QProcess( );
insilmaril@721
   315
		proc->addArgument(ub);
insilmaril@311
   316
insilmaril@721
   317
		if ( !proc->start() ) 
insilmaril@721
   318
		{
insilmaril@721
   319
			QMessageBox::warning(0, 
insilmaril@721
   320
				QObject::tr("Warning"),
insilmaril@721
   321
				QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
insilmaril@721
   322
		}	
insilmaril@311
   323
insilmaril@311
   324
*/
insilmaril@311
   325
	}
insilmaril@311
   326
}
insilmaril@311
   327
insilmaril@311
   328
////////////////////////////////////////////////////////////////////////
insilmaril@228
   329
void ExportTaskjuggler::doExport() 
insilmaril@228
   330
{
insilmaril@721
   331
	model->exportXML(tmpDir.path(),false);
insilmaril@228
   332
insilmaril@721
   333
	XSLTProc p;
insilmaril@721
   334
	p.setInputFile (tmpDir.path()+"/"+model->getMapName()+".xml");
insilmaril@721
   335
	p.setOutputFile (outputFile);
insilmaril@721
   336
	p.setXSLFile (vymBaseDir.path()+"/styles/vym2taskjuggler.xsl");
insilmaril@721
   337
	p.process();
insilmaril@228
   338
}
insilmaril@228
   339
insilmaril@239
   340
////////////////////////////////////////////////////////////////////////
insilmaril@228
   341
void ExportLaTeX::doExport() 
insilmaril@0
   342
{
insilmaril@183
   343
	// Exports a map to a LaTex file.  
insilmaril@183
   344
	// This file needs to be included 
insilmaril@183
   345
	// or inported into a LaTex document
insilmaril@183
   346
	// it will not add a preamble, or anything 
insilmaril@183
   347
	// that makes a full LaTex document.
insilmaril@199
   348
  QFile file (outputFile);
insilmaril@366
   349
  if ( !file.open( QIODevice::WriteOnly ) ) {
insilmaril@205
   350
	QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not write %1").arg(outputFile));
insilmaril@205
   351
	mainWindow->statusMessage(QString(QObject::tr("Export failed.")));
insilmaril@163
   352
    return;
insilmaril@163
   353
  }
insilmaril@163
   354
  QTextStream ts( &file );	// use LANG decoding here...
insilmaril@163
   355
  ts.setEncoding (QTextStream::UnicodeUTF8); // Force UTF8
insilmaril@163
   356
  
insilmaril@163
   357
  // Main loop over all branches
insilmaril@163
   358
  QString s;
insilmaril@613
   359
  // QString curIndent("");
insilmaril@163
   360
  // int i;
insilmaril@163
   361
  BranchObj *bo;
insilmaril@741
   362
  TreeItem *cur=NULL;
insilmaril@741
   363
  TreeItem *prev=NULL;
insilmaril@741
   364
  int d;
insilmaril@741
   365
  model->next(cur,prev,d);
insilmaril@741
   366
  while (cur) 
insilmaril@740
   367
  {
insilmaril@741
   368
	bo=(BranchObj*)(cur->getLMO());
insilmaril@740
   369
insilmaril@600
   370
	if (!bo->hasHiddenExportParent() )
insilmaril@600
   371
	{
insilmaril@741
   372
		switch (cur->depth() ) 
insilmaril@740
   373
		{
insilmaril@740
   374
			case 0: break;
insilmaril@740
   375
			case 1: 
insilmaril@740
   376
			  ts << ("\\chapter{" + bo->getHeading()+ "}\n");
insilmaril@740
   377
			  break;
insilmaril@740
   378
			case 2: 
insilmaril@740
   379
			  ts << ("\\section{" + bo->getHeading()+ "}\n");
insilmaril@740
   380
			  break;
insilmaril@740
   381
			case 3: 
insilmaril@740
   382
			  ts << ("\\subsection{" + bo->getHeading()+ "}\n");
insilmaril@740
   383
			  break;
insilmaril@740
   384
			case 4: 
insilmaril@740
   385
			  ts << ("\\subsubsection{" + bo->getHeading()+ "}\n");
insilmaril@740
   386
			  break;
insilmaril@740
   387
			default:
insilmaril@740
   388
			  ts << ("\\paragraph*{" + bo->getHeading()+ "}\n");
insilmaril@740
   389
			
insilmaril@600
   390
		}
insilmaril@600
   391
		// If necessary, write note
insilmaril@600
   392
		if (!bo->getNote().isEmpty()) {
insilmaril@600
   393
		  ts << (bo->getNoteASCII());
insilmaril@600
   394
		  ts << ("\n");
insilmaril@600
   395
		}
insilmaril@254
   396
	}
insilmaril@741
   397
    cur=model->next(cur,prev,d);
insilmaril@163
   398
   }
insilmaril@163
   399
  file.close();
insilmaril@0
   400
}
insilmaril@0
   401
insilmaril@239
   402
////////////////////////////////////////////////////////////////////////
insilmaril@171
   403
ExportOO::ExportOO()
insilmaril@171
   404
{
insilmaril@199
   405
	useSections=false;
insilmaril@171
   406
}
insilmaril@163
   407
insilmaril@171
   408
ExportOO::~ExportOO()
insilmaril@171
   409
{
insilmaril@171
   410
}	
insilmaril@163
   411
insilmaril@171
   412
QString ExportOO::buildList (BranchObj *current)
insilmaril@171
   413
{
insilmaril@171
   414
    QString r;
insilmaril@171
   415
    BranchObj *bo;
insilmaril@183
   416
insilmaril@183
   417
    uint i=0;
insilmaril@171
   418
    bo=current->getFirstBranch();
insilmaril@171
   419
    if (bo)
insilmaril@171
   420
    {
insilmaril@600
   421
		if (!bo->hasHiddenExportParent() )
insilmaril@600
   422
		{
insilmaril@600
   423
			// Start list
insilmaril@600
   424
			r+="<text:list text:style-name=\"vym-list\">\n";
insilmaril@600
   425
			while (bo)
insilmaril@600
   426
			{
insilmaril@600
   427
				r+="<text:list-item><text:p >";
insilmaril@600
   428
				r+=quotemeta(bo->getHeading());
insilmaril@600
   429
				// If necessary, write note
insilmaril@600
   430
				if (!bo->getNote().isEmpty())
insilmaril@600
   431
					r+=bo->getNoteOpenDoc();
insilmaril@600
   432
				r+="</text:p>";
insilmaril@600
   433
				r+=buildList (bo);	// recursivly add deeper branches
insilmaril@600
   434
				r+="</text:list-item>\n";
insilmaril@600
   435
				i++;
insilmaril@600
   436
				bo=current->getBranchNum(i);
insilmaril@600
   437
			}
insilmaril@600
   438
			r+="</text:list>\n";
insilmaril@600
   439
		}
insilmaril@171
   440
    }
insilmaril@171
   441
    return r;
insilmaril@171
   442
}
insilmaril@163
   443
insilmaril@171
   444
insilmaril@171
   445
void ExportOO::exportPresentation()
insilmaril@171
   446
{
insilmaril@183
   447
	QString allPages;
insilmaril@171
   448
insilmaril@643
   449
/* FIXME not adapted to multiple mapCenters yet
insilmaril@163
   450
	// Insert new content
insilmaril@171
   451
	content.replace ("<!-- INSERT TITLE -->",quotemeta(mapCenter->getHeading()));
insilmaril@171
   452
	content.replace ("<!-- INSERT AUTHOR -->",quotemeta(mapCenter->getAuthor()));
insilmaril@183
   453
insilmaril@183
   454
	QString	onePage;
insilmaril@183
   455
	QString list;
insilmaril@183
   456
	
insilmaril@194
   457
	BranchObj *sectionBO=mapCenter->getFirstBranch();
insilmaril@183
   458
    int i=0;
insilmaril@183
   459
	BranchObj *pagesBO;
insilmaril@183
   460
    int j=0;
insilmaril@183
   461
insilmaril@194
   462
	// Walk sections
insilmaril@600
   463
	while (sectionBO && !sectionBO->hasHiddenExportParent() )
insilmaril@183
   464
	{
insilmaril@194
   465
		if (useSections)
insilmaril@183
   466
		{
insilmaril@194
   467
			// Add page with section title
insilmaril@194
   468
			onePage=sectionTemplate;
insilmaril@194
   469
			onePage.replace ("<!-- INSERT PAGE HEADING -->", quotemeta(sectionBO->getHeading() ) );
insilmaril@183
   470
			allPages+=onePage;
insilmaril@183
   471
		} else
insilmaril@183
   472
		{
insilmaril@183
   473
			i=-2;	// only use inner loop to 
insilmaril@183
   474
			        // turn mainbranches into pages
insilmaril@194
   475
			sectionBO=mapCenter;
insilmaril@183
   476
		}
insilmaril@183
   477
insilmaril@183
   478
		// Walk mainpages
insilmaril@194
   479
		pagesBO=sectionBO->getFirstBranch();
insilmaril@183
   480
		j=0;
insilmaril@600
   481
		while (pagesBO && !pagesBO->hasHiddenExportParent() )
insilmaril@183
   482
		{
insilmaril@183
   483
			// Add page with list of items
insilmaril@254
   484
			onePage=pageTemplate;
insilmaril@254
   485
			onePage.replace ("<!-- INSERT PAGE HEADING -->", quotemeta (pagesBO->getHeading() ) );
insilmaril@254
   486
			list=buildList (pagesBO);
insilmaril@254
   487
			onePage.replace ("<!-- INSERT LIST -->", list);
insilmaril@254
   488
			allPages+=onePage;
insilmaril@183
   489
			j++;
insilmaril@194
   490
			pagesBO=sectionBO->getBranchNum(j);
insilmaril@183
   491
		}
insilmaril@183
   492
		i++;
insilmaril@194
   493
		sectionBO=mapCenter->getBranchNum(i);
insilmaril@183
   494
	}
insilmaril@183
   495
	
insilmaril@171
   496
	content.replace ("<!-- INSERT PAGES -->",allPages);
insilmaril@171
   497
insilmaril@171
   498
	// Write modified content
insilmaril@171
   499
	QFile f (contentFile);
insilmaril@366
   500
    if ( !f.open( QIODevice::WriteOnly ) ) 
insilmaril@171
   501
	{
insilmaril@205
   502
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not write %1").arg(contentFile));
insilmaril@205
   503
		mainWindow->statusMessage(QString(QObject::tr("Export failed.")));
insilmaril@171
   504
		return;
insilmaril@171
   505
    }
insilmaril@171
   506
insilmaril@171
   507
    QTextStream t( &f );
insilmaril@171
   508
    t << content;
insilmaril@171
   509
    f.close();
insilmaril@171
   510
insilmaril@163
   511
	// zip tmpdir to destination
insilmaril@171
   512
	zipDir (tmpDir,outputFile);	
insilmaril@643
   513
*/
insilmaril@163
   514
}
insilmaril@163
   515
insilmaril@194
   516
bool ExportOO::setConfigFile (const QString &cf)
insilmaril@183
   517
{
insilmaril@183
   518
	configFile=cf;
insilmaril@183
   519
	int i=cf.findRev ("/");
insilmaril@183
   520
	if (i>=0) configDir=cf.left(i);
insilmaril@183
   521
	SimpleSettings set;
insilmaril@183
   522
	set.readSettings(configFile);
insilmaril@183
   523
insilmaril@183
   524
	// set paths
insilmaril@183
   525
	templateDir=configDir+"/"+set.readEntry ("Template");
insilmaril@183
   526
insilmaril@194
   527
	QDir d (templateDir);
insilmaril@194
   528
	if (!d.exists())
insilmaril@194
   529
	{
insilmaril@194
   530
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Check \"%1\" in\n%2").arg("Template="+set.readEntry ("Template")).arg(configFile));
insilmaril@194
   531
		return false;
insilmaril@194
   532
insilmaril@194
   533
	}
insilmaril@183
   534
insilmaril@183
   535
	contentTemplateFile=templateDir+"content-template.xml";
insilmaril@183
   536
	contentFile=tmpDir.path()+"/content.xml";
insilmaril@183
   537
	pageTemplateFile=templateDir+"page-template.xml";
insilmaril@194
   538
	sectionTemplateFile=templateDir+"section-template.xml";
insilmaril@183
   539
insilmaril@199
   540
	if (set.readEntry("useSections").contains("yes"))
insilmaril@199
   541
		useSections=true;
insilmaril@199
   542
insilmaril@183
   543
	// Copy template to tmpdir
insilmaril@183
   544
	system ("cp -r "+templateDir+"* "+tmpDir.path());
insilmaril@183
   545
insilmaril@183
   546
	// Read content-template
insilmaril@183
   547
	if (!loadStringFromDisk (contentTemplateFile,content))
insilmaril@183
   548
	{
insilmaril@194
   549
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not read %1").arg(contentTemplateFile));
insilmaril@194
   550
		return false;
insilmaril@183
   551
	}
insilmaril@183
   552
insilmaril@183
   553
	// Read page-template
insilmaril@183
   554
	if (!loadStringFromDisk (pageTemplateFile,pageTemplate))
insilmaril@183
   555
	{
insilmaril@194
   556
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not read %1").arg(pageTemplateFile));
insilmaril@194
   557
		return false;
insilmaril@183
   558
	}
insilmaril@183
   559
	
insilmaril@194
   560
	// Read section-template
insilmaril@201
   561
	if (useSections && !loadStringFromDisk (sectionTemplateFile,sectionTemplate))
insilmaril@183
   562
	{
insilmaril@194
   563
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not read %1").arg(sectionTemplateFile));
insilmaril@194
   564
		return false;
insilmaril@183
   565
	}
insilmaril@194
   566
	return true;
insilmaril@183
   567
}
insilmaril@183
   568