exports.cpp
author insilmaril
Wed, 09 Jun 2010 13:14:08 +0000
changeset 847 43268373032d
parent 844 c48bb42fb977
permissions -rw-r--r--
1.13.4 Various fixes
insilmaril@0
     1
#include "exports.h"
insilmaril@750
     2
insilmaril@750
     3
#include "branchitem.h"
insilmaril@171
     4
#include "file.h"
insilmaril@171
     5
#include "linkablemapobj.h"
insilmaril@171
     6
#include "misc.h"
insilmaril@171
     7
#include "mainwindow.h"
insilmaril@311
     8
#include "warningdialog.h"
insilmaril@228
     9
#include "xsltproc.h"
insilmaril@0
    10
insilmaril@824
    11
insilmaril@171
    12
extern Main *mainWindow;
insilmaril@228
    13
extern QDir vymBaseDir;
insilmaril@404
    14
extern QString vymName;
insilmaril@131
    15
insilmaril@171
    16
ExportBase::ExportBase()
insilmaril@0
    17
{
insilmaril@819
    18
	init();
insilmaril@819
    19
}
insilmaril@819
    20
insilmaril@819
    21
ExportBase::ExportBase(VymModel *m)
insilmaril@819
    22
{
insilmaril@819
    23
	init();
insilmaril@819
    24
	model=m;
insilmaril@819
    25
}
insilmaril@819
    26
insilmaril@819
    27
ExportBase::~ExportBase()
insilmaril@819
    28
{
insilmaril@819
    29
	// Cleanup tmpdir
insilmaril@819
    30
	removeDir (tmpDir);
insilmaril@819
    31
}
insilmaril@819
    32
insilmaril@819
    33
void ExportBase::init()
insilmaril@819
    34
{
insilmaril@0
    35
	indentPerDepth="  ";
insilmaril@377
    36
	bool ok;
insilmaril@606
    37
    tmpDir.setPath (makeTmpDir(ok,"vym-export"));
insilmaril@377
    38
	if (!tmpDir.exists() || !ok)
insilmaril@377
    39
		QMessageBox::critical( 0, QObject::tr( "Error" ),
insilmaril@377
    40
					   QObject::tr("Couldn't access temporary directory\n"));
insilmaril@512
    41
	cancelFlag=false;				   
insilmaril@228
    42
}
insilmaril@228
    43
insilmaril@424
    44
void ExportBase::setDir(const QDir &d)
insilmaril@0
    45
{
insilmaril@424
    46
	outDir=d;
insilmaril@199
    47
}
insilmaril@199
    48
insilmaril@199
    49
void ExportBase::setFile (const QString &p)
insilmaril@199
    50
{
insilmaril@199
    51
	outputFile=p;
insilmaril@0
    52
}
insilmaril@0
    53
insilmaril@512
    54
QString ExportBase::getFile ()
insilmaril@512
    55
{
insilmaril@512
    56
	return outputFile;
insilmaril@512
    57
}
insilmaril@512
    58
insilmaril@643
    59
void ExportBase::setModel(VymModel *m)
insilmaril@0
    60
{
insilmaril@643
    61
	model=m;
insilmaril@0
    62
}
insilmaril@0
    63
insilmaril@228
    64
void ExportBase::setCaption (const QString &s)
insilmaril@228
    65
{
insilmaril@228
    66
	caption=s;
insilmaril@228
    67
}
insilmaril@228
    68
insilmaril@228
    69
void ExportBase::addFilter(const QString &s)
insilmaril@228
    70
{
insilmaril@228
    71
	filter=s;
insilmaril@228
    72
}
insilmaril@228
    73
insilmaril@228
    74
bool ExportBase::execDialog()
insilmaril@228
    75
{
insilmaril@228
    76
	{
insilmaril@643
    77
		QFileDialog *fd=new QFileDialog( 0, caption);
insilmaril@366
    78
		fd->setFilter (filter);
insilmaril@228
    79
		fd->setCaption(caption);
insilmaril@228
    80
		fd->setMode( QFileDialog::AnyFile );
insilmaril@424
    81
		fd->setDir (outDir);
insilmaril@228
    82
		fd->show();
insilmaril@228
    83
insilmaril@228
    84
		if ( fd->exec() == QDialog::Accepted )
insilmaril@228
    85
		{
insilmaril@228
    86
			if (QFile (fd->selectedFile()).exists() )
insilmaril@228
    87
			{
insilmaril@404
    88
				QMessageBox mb( vymName,
insilmaril@228
    89
					QObject::tr("The file %1 exists already.\nDo you want to overwrite it?").arg(fd->selectedFile()), 
insilmaril@228
    90
				QMessageBox::Warning,
insilmaril@228
    91
				QMessageBox::Yes | QMessageBox::Default,
insilmaril@228
    92
				QMessageBox::Cancel | QMessageBox::Escape,
insilmaril@366
    93
				Qt::NoButton );
insilmaril@228
    94
				mb.setButtonText( QMessageBox::Yes, QObject::tr("Overwrite") );
insilmaril@228
    95
				mb.setButtonText( QMessageBox::No, QObject::tr("Cancel"));
insilmaril@228
    96
				ExportBase ex;
insilmaril@228
    97
				switch( mb.exec() ) 
insilmaril@228
    98
				{
insilmaril@228
    99
					case QMessageBox::Yes:
insilmaril@228
   100
						// save 
insilmaril@228
   101
						break;;
insilmaril@228
   102
					case QMessageBox::Cancel:
insilmaril@512
   103
						cancelFlag=true;
insilmaril@228
   104
						return false;
insilmaril@228
   105
						break;
insilmaril@228
   106
				}
insilmaril@228
   107
			}
insilmaril@228
   108
			outputFile=fd->selectedFile();
insilmaril@512
   109
			cancelFlag=false;
insilmaril@228
   110
			return true;
insilmaril@228
   111
		}
insilmaril@228
   112
	}
insilmaril@228
   113
	return false;
insilmaril@228
   114
}
insilmaril@228
   115
insilmaril@512
   116
bool ExportBase::canceled()
insilmaril@512
   117
{
insilmaril@512
   118
	return cancelFlag;
insilmaril@512
   119
}
insilmaril@512
   120
insilmaril@791
   121
QString ExportBase::getSectionString(TreeItem *start)
insilmaril@163
   122
{
insilmaril@205
   123
	// Make prefix like "2.5.3" for "bo:2,bo:5,bo:3"
insilmaril@163
   124
	QString r;
insilmaril@791
   125
	TreeItem *ti=start;
insilmaril@749
   126
	int depth=ti->depth();
insilmaril@163
   127
	while (depth>0)
insilmaril@163
   128
	{
insilmaril@749
   129
		r=QString("%1").arg(1+ti->num(),0,10)+"." + r;
insilmaril@749
   130
		ti=ti->parent(); 
insilmaril@749
   131
		depth=ti->depth();
insilmaril@163
   132
	}	
insilmaril@163
   133
	if (r.isEmpty())
insilmaril@163
   134
		return r;
insilmaril@163
   135
	else	
insilmaril@163
   136
		return r + " ";
insilmaril@163
   137
}
insilmaril@163
   138
insilmaril@239
   139
////////////////////////////////////////////////////////////////////////
insilmaril@807
   140
ExportAO::ExportAO()
insilmaril@807
   141
{
insilmaril@807
   142
	filter="TXT (*.txt)";
insilmaril@807
   143
	caption=vymName+ " -" +QObject::tr("Export as ASCII")+" "+QObject::tr("(still experimental)");
insilmaril@807
   144
}
insilmaril@807
   145
insilmaril@807
   146
void ExportAO::doExport()	
insilmaril@807
   147
{
insilmaril@807
   148
	QFile file (outputFile);
insilmaril@807
   149
	if ( !file.open( QIODevice::WriteOnly ) )
insilmaril@807
   150
	{
insilmaril@807
   151
		qWarning ("ExportAO::doExport couldn't open "+outputFile);
insilmaril@807
   152
		return;
insilmaril@807
   153
	}
insilmaril@807
   154
	QTextStream ts( &file );	// use LANG decoding here...
insilmaril@807
   155
insilmaril@807
   156
	// Main loop over all branches
insilmaril@807
   157
	QString s;
insilmaril@807
   158
	QString curIndent;
insilmaril@847
   159
	QString dashIndent;
insilmaril@847
   160
insilmaril@807
   161
	int i;
insilmaril@807
   162
	BranchItem *cur=NULL;
insilmaril@807
   163
	BranchItem *prev=NULL;
insilmaril@807
   164
insilmaril@807
   165
	QString colString;
insilmaril@807
   166
	QColor col;
insilmaril@807
   167
insilmaril@807
   168
	cur=model->nextBranch (cur,prev);
insilmaril@807
   169
	while (cur) 
insilmaril@807
   170
	{
insilmaril@807
   171
		if (cur->getType()==TreeItem::Branch || cur->getType()==TreeItem::MapCenter)
insilmaril@807
   172
		{
insilmaril@807
   173
			// Make indentstring
insilmaril@807
   174
			curIndent="";
insilmaril@807
   175
			for (i=0;i<cur->depth()-1;i++) curIndent+= indentPerDepth;
insilmaril@807
   176
insilmaril@807
   177
			if (!cur->hasHiddenExportParent() )
insilmaril@807
   178
			{
insilmaril@807
   179
				col=cur->getHeadingColor();
insilmaril@807
   180
				if (col==QColor (255,0,0))
insilmaril@807
   181
					colString="[R]";
insilmaril@807
   182
				else if (col==QColor (217,81,0))
insilmaril@807
   183
					colString="[O]";
insilmaril@807
   184
				else if (col==QColor (0,85,0))
insilmaril@807
   185
					colString="[G]";
insilmaril@807
   186
				else  	
insilmaril@807
   187
					colString="[?]";
insilmaril@847
   188
insilmaril@847
   189
				dashIndent="";	
insilmaril@807
   190
				switch (cur->depth())
insilmaril@807
   191
				{
insilmaril@807
   192
					case 0:
insilmaril@807
   193
						//ts << underline (cur->getHeading(),QString("="));
insilmaril@807
   194
						//ts << "\n";
insilmaril@807
   195
						break;
insilmaril@807
   196
					case 1:
insilmaril@807
   197
						//ts << "\n";
insilmaril@807
   198
						//ts << (underline ( cur->getHeading(), QString("-") ) );
insilmaril@807
   199
						//ts << "\n";
insilmaril@807
   200
						break;
insilmaril@807
   201
					case 2: // Main heading
insilmaril@807
   202
						ts << "\n";
insilmaril@807
   203
						ts << underline ( cur->getHeading(), QString("=") );
insilmaril@818
   204
						ts << "\n";
insilmaril@807
   205
						break;
insilmaril@807
   206
					case 3: // Achievement, Bonus, Objective ...
insilmaril@818
   207
						ts << "\n\n";
insilmaril@807
   208
						ts << underline ( cur->getHeading(), "-");
insilmaril@807
   209
						ts << "\n\n";
insilmaril@807
   210
						break;
insilmaril@807
   211
					case 4:	// That's the item we need to know
insilmaril@815
   212
						//ts << (curIndent + "* " + colString+" "+ cur->getHeading());
insilmaril@815
   213
						ts << colString+" "+ cur->getHeading();
insilmaril@807
   214
						if (cur->isActiveStandardFlag ("hook-green"))
insilmaril@807
   215
							ts << " [DONE] ";
insilmaril@815
   216
						else	if (cur->isActiveStandardFlag ("wip"))
insilmaril@807
   217
							ts << " [WIP] ";
insilmaril@807
   218
						else	if (cur->isActiveStandardFlag ("cross-red"))
insilmaril@807
   219
							ts << " [NOT STARTED] ";
insilmaril@807
   220
						ts << "\n";
insilmaril@818
   221
						break;
insilmaril@807
   222
					default:
insilmaril@807
   223
						ts << (curIndent + "- " + cur->getHeading());
insilmaril@807
   224
						ts << "\n";
insilmaril@847
   225
						dashIndent="  ";
insilmaril@807
   226
						break;
insilmaril@807
   227
				}
insilmaril@807
   228
insilmaril@847
   229
				// If necessary, write URL
insilmaril@847
   230
				if (!cur->getURL().isEmpty())
insilmaril@847
   231
					ts << (curIndent + dashIndent + cur->getURL()) +"\n";
insilmaril@847
   232
insilmaril@807
   233
				// If necessary, write note
insilmaril@807
   234
				if (!cur->getNoteObj().isEmpty())
insilmaril@807
   235
				{
insilmaril@807
   236
					curIndent +="  | ";
insilmaril@807
   237
					s=cur->getNoteASCII( curIndent, 80);
insilmaril@807
   238
					ts << s;
insilmaril@807
   239
				}
insilmaril@807
   240
			}
insilmaril@807
   241
		}
insilmaril@807
   242
		cur=model->nextBranch(cur,prev);
insilmaril@807
   243
	}
insilmaril@807
   244
	file.close();
insilmaril@807
   245
}
insilmaril@807
   246
insilmaril@807
   247
QString ExportAO::underline (const QString &text, const QString &line)
insilmaril@807
   248
{
insilmaril@807
   249
	QString r=text + "\n";
insilmaril@807
   250
	for (int j=0;j<text.length();j++) r+=line;
insilmaril@807
   251
	return r;
insilmaril@807
   252
}
insilmaril@807
   253
insilmaril@807
   254
insilmaril@807
   255
////////////////////////////////////////////////////////////////////////
insilmaril@512
   256
ExportASCII::ExportASCII()
insilmaril@512
   257
{
insilmaril@512
   258
	filter="TXT (*.txt)";
insilmaril@512
   259
	caption=vymName+ " -" +QObject::tr("Export as ASCII")+" "+QObject::tr("(still experimental)");
insilmaril@512
   260
}
insilmaril@512
   261
insilmaril@777
   262
void ExportASCII::doExport()	
insilmaril@0
   263
{
insilmaril@199
   264
	QFile file (outputFile);
insilmaril@366
   265
	if ( !file.open( QIODevice::WriteOnly ) )
insilmaril@0
   266
	{
insilmaril@807
   267
		qWarning ("ExportASCII::doExport couldn't open "+outputFile);
insilmaril@0
   268
		return;
insilmaril@0
   269
	}
insilmaril@0
   270
	QTextStream ts( &file );	// use LANG decoding here...
insilmaril@0
   271
insilmaril@0
   272
	// Main loop over all branches
insilmaril@0
   273
	QString s;
insilmaril@613
   274
	QString curIndent;
insilmaril@847
   275
	QString dashIndent;
insilmaril@613
   276
	int i;
insilmaril@750
   277
	BranchItem *cur=NULL;
insilmaril@750
   278
	BranchItem *prev=NULL;
insilmaril@741
   279
insilmaril@804
   280
	cur=model->nextBranch (cur,prev);
insilmaril@741
   281
	while (cur) 
insilmaril@0
   282
	{
insilmaril@741
   283
		if (cur->getType()==TreeItem::Branch || cur->getType()==TreeItem::MapCenter)
insilmaril@740
   284
		{
insilmaril@740
   285
			// Make indentstring
insilmaril@740
   286
			curIndent="";
insilmaril@819
   287
			for (i=1;i<cur->depth()-1;i++) curIndent+= indentPerDepth;
insilmaril@740
   288
insilmaril@753
   289
			if (!cur->hasHiddenExportParent() )
insilmaril@600
   290
			{
insilmaril@791
   291
				//std::cout << "ExportASCII::  "<<curIndent.toStdString()<<cur->getHeading().toStdString()<<std::endl;
insilmaril@847
   292
insilmaril@847
   293
				dashIndent="";
insilmaril@741
   294
				switch (cur->depth())
insilmaril@740
   295
				{
insilmaril@740
   296
					case 0:
insilmaril@741
   297
						ts << underline (cur->getHeading(),QString("="));
insilmaril@740
   298
						ts << "\n";
insilmaril@740
   299
						break;
insilmaril@740
   300
					case 1:
insilmaril@740
   301
						ts << "\n";
insilmaril@791
   302
						ts << (underline (getSectionString(cur) + cur->getHeading(), QString("-") ) );
insilmaril@740
   303
						ts << "\n";
insilmaril@740
   304
						break;
insilmaril@740
   305
					case 2:
insilmaril@740
   306
						ts << "\n";
insilmaril@741
   307
						ts << (curIndent + "* " + cur->getHeading());
insilmaril@740
   308
						ts << "\n";
insilmaril@847
   309
						dashIndent="  ";
insilmaril@740
   310
						break;
insilmaril@740
   311
					case 3:
insilmaril@741
   312
						ts << (curIndent + "- " + cur->getHeading());
insilmaril@740
   313
						ts << "\n";
insilmaril@847
   314
						dashIndent="  ";
insilmaril@740
   315
						break;
insilmaril@740
   316
					default:
insilmaril@741
   317
						ts << (curIndent + "- " + cur->getHeading());
insilmaril@740
   318
						ts << "\n";
insilmaril@847
   319
						dashIndent="  ";
insilmaril@740
   320
						break;
insilmaril@740
   321
				}
insilmaril@613
   322
insilmaril@847
   323
				// If necessary, write URL
insilmaril@847
   324
				if (!cur->getURL().isEmpty())
insilmaril@847
   325
					ts << (curIndent + dashIndent + cur->getURL()) +"\n";
insilmaril@847
   326
insilmaril@740
   327
				// If necessary, write note
insilmaril@746
   328
				if (!cur->getNoteObj().isEmpty())
insilmaril@740
   329
				{
insilmaril@740
   330
					curIndent +="  | ";
insilmaril@746
   331
					s=cur->getNoteASCII( curIndent, 80);
insilmaril@740
   332
					ts << s;
insilmaril@740
   333
				}
insilmaril@600
   334
			}
insilmaril@0
   335
		}
insilmaril@804
   336
		cur=model->nextBranch(cur,prev);
insilmaril@0
   337
	}
insilmaril@0
   338
	file.close();
insilmaril@0
   339
}
insilmaril@0
   340
insilmaril@613
   341
QString ExportASCII::underline (const QString &text, const QString &line)
insilmaril@613
   342
{
insilmaril@613
   343
	QString r=text + "\n";
insilmaril@613
   344
	for (int j=0;j<text.length();j++) r+=line;
insilmaril@613
   345
	return r;
insilmaril@613
   346
}
insilmaril@613
   347
insilmaril@497
   348
insilmaril@497
   349
////////////////////////////////////////////////////////////////////////
insilmaril@497
   350
void ExportCSV::doExport()
insilmaril@497
   351
{
insilmaril@497
   352
	QFile file (outputFile);
insilmaril@497
   353
	if ( !file.open( QIODevice::WriteOnly ) )
insilmaril@497
   354
	{
insilmaril@497
   355
		qWarning ("ExportBase::exportXML  couldn't open "+outputFile);
insilmaril@497
   356
		return;
insilmaril@497
   357
	}
insilmaril@497
   358
	QTextStream ts( &file );	// use LANG decoding here...
insilmaril@497
   359
insilmaril@497
   360
	// Write header
insilmaril@497
   361
	ts << "\"Note\""  <<endl;
insilmaril@497
   362
insilmaril@497
   363
	// Main loop over all branches
insilmaril@497
   364
	QString s;
insilmaril@613
   365
	QString curIndent("");
insilmaril@512
   366
	int i;
insilmaril@750
   367
	BranchItem *cur=NULL;
insilmaril@750
   368
	BranchItem *prev=NULL;
insilmaril@804
   369
	cur=model->nextBranch (cur,prev);
insilmaril@741
   370
	while (cur) 
insilmaril@497
   371
	{
insilmaril@753
   372
		if (!cur->hasHiddenExportParent() )
insilmaril@497
   373
		{
insilmaril@600
   374
			// If necessary, write note
insilmaril@746
   375
			if (!cur->getNoteObj().isEmpty())
insilmaril@600
   376
			{
insilmaril@746
   377
				s =cur->getNoteASCII();
insilmaril@613
   378
				s=s.replace ("\n","\n"+curIndent);
insilmaril@600
   379
				ts << ("\""+s+"\",");
insilmaril@600
   380
			} else
insilmaril@600
   381
				ts <<"\"\",";
insilmaril@497
   382
insilmaril@600
   383
			// Make indentstring
insilmaril@741
   384
			for (i=0;i<cur->depth();i++) curIndent+= "\"\",";
insilmaril@497
   385
insilmaril@600
   386
			// Write heading
insilmaril@741
   387
			ts << curIndent << "\"" << cur->getHeading()<<"\""<<endl;
insilmaril@600
   388
		}
insilmaril@497
   389
		
insilmaril@804
   390
		cur=model->nextBranch(cur,prev);
insilmaril@613
   391
		curIndent="";
insilmaril@497
   392
	}
insilmaril@497
   393
	file.close();
insilmaril@497
   394
}
insilmaril@497
   395
insilmaril@239
   396
////////////////////////////////////////////////////////////////////////
insilmaril@742
   397
void ExportKDE3Bookmarks::doExport() 
insilmaril@239
   398
{
insilmaril@721
   399
	WarningDialog dia;
insilmaril@721
   400
	dia.showCancelButton (true);
insilmaril@721
   401
	dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("KDE"));
insilmaril@742
   402
	dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("KDE 3"));
insilmaril@742
   403
	dia.setShowAgainName("/exports/KDE/overwriteKDEBookmarks");
insilmaril@742
   404
	if (dia.exec()==QDialog::Accepted)
insilmaril@742
   405
	{
insilmaril@742
   406
		model->exportXML(tmpDir.path(),false);
insilmaril@742
   407
insilmaril@742
   408
		XSLTProc p;
insilmaril@742
   409
		p.setInputFile (tmpDir.path()+"/"+model->getMapName()+".xml");
insilmaril@742
   410
		p.setOutputFile (tmpDir.home().path()+"/.kde/share/apps/konqueror/bookmarks.xml");
insilmaril@742
   411
		p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
insilmaril@742
   412
		p.process();
insilmaril@742
   413
insilmaril@742
   414
		QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
insilmaril@742
   415
		QProcess *proc= new QProcess ;
insilmaril@742
   416
		proc->start( ub);
insilmaril@742
   417
		if (!proc->waitForStarted())
insilmaril@742
   418
		{
insilmaril@742
   419
			QMessageBox::warning(0, 
insilmaril@742
   420
				QObject::tr("Warning"),
insilmaril@742
   421
				QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
insilmaril@742
   422
		}	
insilmaril@742
   423
	}
insilmaril@742
   424
}
insilmaril@742
   425
insilmaril@742
   426
////////////////////////////////////////////////////////////////////////
insilmaril@742
   427
void ExportKDE4Bookmarks::doExport() 
insilmaril@742
   428
{
insilmaril@742
   429
	WarningDialog dia;
insilmaril@742
   430
	dia.showCancelButton (true);
insilmaril@742
   431
	dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("KDE 4"));
insilmaril@721
   432
	dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("KDE"));
insilmaril@721
   433
	dia.setShowAgainName("/exports/KDE/overwriteKDEBookmarks");
insilmaril@721
   434
	if (dia.exec()==QDialog::Accepted)
insilmaril@239
   435
	{
insilmaril@721
   436
		model->exportXML(tmpDir.path(),false);
insilmaril@721
   437
insilmaril@721
   438
		XSLTProc p;
insilmaril@721
   439
		p.setInputFile (tmpDir.path()+"/"+model->getMapName()+".xml");
insilmaril@742
   440
		p.setOutputFile (tmpDir.home().path()+"/.kde4/share/apps/konqueror/bookmarks.xml");
insilmaril@721
   441
		p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
insilmaril@721
   442
		p.process();
insilmaril@721
   443
insilmaril@721
   444
		QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
insilmaril@721
   445
		QProcess *proc= new QProcess ;
insilmaril@721
   446
		proc->start( ub);
insilmaril@721
   447
		if (!proc->waitForStarted())
insilmaril@311
   448
		{
insilmaril@721
   449
			QMessageBox::warning(0, 
insilmaril@721
   450
				QObject::tr("Warning"),
insilmaril@721
   451
				QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
insilmaril@721
   452
		}	
insilmaril@239
   453
	}
insilmaril@239
   454
}
insilmaril@239
   455
insilmaril@239
   456
////////////////////////////////////////////////////////////////////////
insilmaril@311
   457
void ExportFirefoxBookmarks::doExport() 
insilmaril@311
   458
{
insilmaril@721
   459
	WarningDialog dia;
insilmaril@721
   460
	dia.showCancelButton (true);
insilmaril@721
   461
	dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("Firefox"));
insilmaril@721
   462
	dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("Firefox"));
insilmaril@721
   463
	dia.setShowAgainName("/vym/warnings/overwriteImportBookmarks");
insilmaril@721
   464
	if (dia.exec()==QDialog::Accepted)
insilmaril@311
   465
	{
insilmaril@721
   466
		model->exportXML(tmpDir.path(),false);
insilmaril@311
   467
insilmaril@311
   468
/*
insilmaril@721
   469
		XSLTProc p;
insilmaril@721
   470
		p.setInputFile (tmpDir.path()+"/"+me->getMapName()+".xml");
insilmaril@721
   471
		p.setOutputFile (tmpDir.home().path()+"/.kde/share/apps/konqueror/bookmarks.xml");
insilmaril@721
   472
		p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
insilmaril@721
   473
		p.process();
insilmaril@311
   474
insilmaril@721
   475
		QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
insilmaril@721
   476
		QProcess *proc = new QProcess( );
insilmaril@721
   477
		proc->addArgument(ub);
insilmaril@311
   478
insilmaril@721
   479
		if ( !proc->start() ) 
insilmaril@721
   480
		{
insilmaril@721
   481
			QMessageBox::warning(0, 
insilmaril@721
   482
				QObject::tr("Warning"),
insilmaril@721
   483
				QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
insilmaril@721
   484
		}	
insilmaril@311
   485
insilmaril@311
   486
*/
insilmaril@311
   487
	}
insilmaril@311
   488
}
insilmaril@311
   489
insilmaril@311
   490
////////////////////////////////////////////////////////////////////////
insilmaril@819
   491
ExportHTML::ExportHTML():ExportBase()
insilmaril@819
   492
{
insilmaril@819
   493
	init();
insilmaril@819
   494
}
insilmaril@819
   495
insilmaril@819
   496
ExportHTML::ExportHTML(VymModel *m):ExportBase(m)
insilmaril@819
   497
{
insilmaril@819
   498
	init();
insilmaril@819
   499
}
insilmaril@819
   500
insilmaril@819
   501
void ExportHTML::init()
insilmaril@819
   502
{
insilmaril@819
   503
	singularDelimiter=": ";
insilmaril@819
   504
	noSingulars=true;	
insilmaril@819
   505
	frameURLs=true;
insilmaril@824
   506
	cssFileName="vym.css";
insilmaril@824
   507
	cssOriginalPath="";	// Is set in VymModel, based on default setting in ExportHTMLDialog
insilmaril@819
   508
insilmaril@819
   509
	if (model &&model->getMapEditor()) 
insilmaril@819
   510
		offset=model->getMapEditor()->getTotalBBox().topLeft();
insilmaril@819
   511
}
insilmaril@819
   512
insilmaril@819
   513
QString ExportHTML::getBranchText(BranchItem *current)
insilmaril@819
   514
{
insilmaril@819
   515
	if (current)
insilmaril@819
   516
	{
insilmaril@819
   517
		bool vis=false;
insilmaril@819
   518
		QRectF hr;
insilmaril@819
   519
		LinkableMapObj *lmo=current->getLMO();
insilmaril@819
   520
		if (lmo)
insilmaril@819
   521
		{
insilmaril@819
   522
			hr=((BranchObj*)lmo)->getBBoxHeading();
insilmaril@819
   523
			if (lmo->isVisibleObj()) vis=true;
insilmaril@819
   524
		}
insilmaril@819
   525
		QString col;
insilmaril@819
   526
		QString id=model->getSelectString(current);
insilmaril@825
   527
		if (dia.useTextColor)
insilmaril@819
   528
			col=QString("style='color:%1'").arg(current->getHeadingColor().name());
insilmaril@819
   529
		QString s=QString("<span class='vym-branch%1' %2 id='%3'>")
insilmaril@819
   530
			.arg(current->depth())
insilmaril@819
   531
			.arg(col)
insilmaril@819
   532
			.arg(id);
insilmaril@819
   533
		QString url=current->getURL();	
insilmaril@847
   534
		QString heading=quotemeta(current->getHeading());
insilmaril@819
   535
		if (!url.isEmpty())
insilmaril@819
   536
		{
insilmaril@819
   537
			s+=QString ("<a href=\"%1\">").arg(url);
insilmaril@847
   538
			s+=QString ("<img src=\"flags/flag-url-16x16.png\">%1</a>").arg(heading);
insilmaril@819
   539
			s+="</a>";
insilmaril@819
   540
			
insilmaril@823
   541
			QRectF fbox=current->getBBoxURLFlag ();
insilmaril@819
   542
			if (vis)
insilmaril@819
   543
				imageMap+=QString("  <area shape='rect' coords='%1,%2,%3,%4' href='%5'>\n")
insilmaril@819
   544
					.arg(fbox.left()-offset.x())
insilmaril@819
   545
					.arg(fbox.top()-offset.y())
insilmaril@819
   546
					.arg(fbox.right()-offset.x())
insilmaril@819
   547
					.arg(fbox.bottom()-offset.y())
insilmaril@819
   548
					.arg(url);
insilmaril@819
   549
		} else	
insilmaril@819
   550
			s+=quotemeta(current->getHeading());
insilmaril@819
   551
		s+="</span>";
insilmaril@819
   552
insilmaril@825
   553
		if (vis && dia.useImage)
insilmaril@819
   554
			imageMap+=QString("  <area shape='rect' coords='%1,%2,%3,%4' href='#%5'>\n")
insilmaril@819
   555
				.arg(hr.left()-offset.x())
insilmaril@819
   556
				.arg(hr.top()-offset.y())
insilmaril@819
   557
				.arg(hr.right()-offset.x())
insilmaril@819
   558
				.arg(hr.bottom()-offset.y())
insilmaril@819
   559
				.arg(id);
insilmaril@819
   560
insilmaril@819
   561
		// Include note
insilmaril@819
   562
		if (!current->getNoteObj().isEmpty())
insilmaril@819
   563
			s+="<table border=1><tr><td>"+current->getNote()+"</td></tr></table>";
insilmaril@819
   564
insilmaril@819
   565
		return s;
insilmaril@819
   566
	} 
insilmaril@819
   567
	return QString();
insilmaril@819
   568
}
insilmaril@819
   569
insilmaril@819
   570
QString ExportHTML::buildList (BranchItem *current)
insilmaril@819
   571
{
insilmaril@819
   572
    QString r;
insilmaril@819
   573
insilmaril@819
   574
    uint i=0;
insilmaril@819
   575
	BranchItem *bi=current->getFirstBranch();
insilmaril@819
   576
insilmaril@819
   577
	// Only add itemized list, if we have more than one subitem.
insilmaril@819
   578
	// For only one subitem, just add a separator to keep page more compact
insilmaril@819
   579
	bool noSingularsHere=false;
insilmaril@819
   580
	if (current->branchCount()<2 && noSingulars) noSingularsHere=true;
insilmaril@819
   581
insilmaril@819
   582
	if (bi)
insilmaril@819
   583
    {
insilmaril@819
   584
		if (!noSingularsHere)
insilmaril@819
   585
			r+="<ul>\n";
insilmaril@819
   586
		else
insilmaril@819
   587
			r+=singularDelimiter;
insilmaril@819
   588
insilmaril@819
   589
		while (bi)
insilmaril@819
   590
		{
insilmaril@819
   591
			if (!bi->hasHiddenExportParent() )	
insilmaril@819
   592
			{
insilmaril@819
   593
				if (!noSingularsHere) r+="<li>";
insilmaril@819
   594
				r+=getBranchText (bi);
insilmaril@819
   595
				if (!bi->getURL().isEmpty() && frameURLs && noSingularsHere)
insilmaril@819
   596
					// Add frame, if we have subitems to an URL
insilmaril@819
   597
					r+="<table border=1><tr><td>"+buildList (bi)+"</td></tr></table>";	// recursivly add deeper branches
insilmaril@819
   598
				else
insilmaril@819
   599
					r+=buildList (bi);	// recursivly add deeper branches
insilmaril@819
   600
				if (!noSingularsHere) r+="</li>";
insilmaril@819
   601
				r+="\n";
insilmaril@819
   602
			}
insilmaril@819
   603
			i++;
insilmaril@819
   604
			bi=current->getBranchNum(i);
insilmaril@819
   605
		}
insilmaril@819
   606
insilmaril@819
   607
		if (!noSingularsHere) r+="</ul>\n";
insilmaril@819
   608
	}
insilmaril@819
   609
    return r;
insilmaril@819
   610
}
insilmaril@819
   611
insilmaril@824
   612
void ExportHTML::setCSSPath(const QString &p)
insilmaril@824
   613
{
insilmaril@824
   614
	cssOriginalPath=p;
insilmaril@824
   615
}
insilmaril@824
   616
insilmaril@825
   617
void ExportHTML::doExport(bool useDialog) 
insilmaril@819
   618
{
insilmaril@825
   619
	// Execute dialog
insilmaril@825
   620
	dia.setFilePath (model->getFilePath());
insilmaril@825
   621
	dia.setMapName (model->getMapName());
insilmaril@825
   622
	dia.readSettings();
insilmaril@825
   623
	if (useDialog && dia.exec()!=QDialog::Accepted) return;
insilmaril@825
   624
insilmaril@825
   625
	// Check if destination is not empty
insilmaril@825
   626
	QDir d=dia.getDir();
insilmaril@825
   627
	// Check, if warnings should be used before overwriting
insilmaril@825
   628
	// the output directory
insilmaril@825
   629
	if (d.exists() && d.count()>0)
insilmaril@825
   630
	{
insilmaril@825
   631
		WarningDialog warn;
insilmaril@825
   632
		warn.showCancelButton (true);
insilmaril@825
   633
		warn.setText(QString(
insilmaril@825
   634
			"The directory %1 is not empty.\n"
insilmaril@825
   635
			"Do you risk to overwrite some of its contents?").arg(d.path() ));
insilmaril@825
   636
		warn.setCaption("Warning: Directory not empty");
insilmaril@825
   637
		warn.setShowAgainName("mainwindow/export-XML-overwrite-dir");
insilmaril@825
   638
insilmaril@825
   639
		if (warn.exec()!=QDialog::Accepted) 
insilmaril@825
   640
		{
insilmaril@825
   641
			mainWindow->statusMessage(QString(QObject::tr("Export aborted.")));
insilmaril@825
   642
			return;
insilmaril@825
   643
		}
insilmaril@825
   644
	}
insilmaril@825
   645
insilmaril@825
   646
	setFile (d.path()+"/"+model->getMapName()+".html");
insilmaril@843
   647
	setCSSPath( dia.getCSSPath() );	// FIXME-2 css not copied?
insilmaril@825
   648
insilmaril@825
   649
	// Copy CSS file
insilmaril@824
   650
	QFile css_src (cssOriginalPath);
insilmaril@824
   651
	QFile css_dst (outDir.path()+"/"+cssFileName);
insilmaril@824
   652
	if (!css_src.open ( QIODevice::ReadOnly))
insilmaril@824
   653
		QMessageBox::warning( 0, QObject::tr( "Warning","ExportHTML" ),QObject::tr("Could not open %1","ExportHTML").arg(cssOriginalPath));
insilmaril@824
   654
	else
insilmaril@824
   655
	{
insilmaril@824
   656
		if (!css_dst.open( QIODevice::WriteOnly))
insilmaril@824
   657
			QMessageBox::warning( 0, QObject::tr( "Warning" ), QObject::tr("Could not open %1").arg(css_dst.fileName()));
insilmaril@824
   658
		else
insilmaril@824
   659
		{	
insilmaril@824
   660
		
insilmaril@824
   661
			QTextStream tsout( &css_dst);
insilmaril@824
   662
			QTextStream tsin ( &css_src);
insilmaril@824
   663
			QString s= tsin.read();
insilmaril@824
   664
			tsout << s;
insilmaril@824
   665
			css_dst.close();
insilmaril@824
   666
		}	
insilmaril@824
   667
		css_src.close();
insilmaril@824
   668
	}
insilmaril@824
   669
insilmaril@824
   670
insilmaril@824
   671
insilmaril@824
   672
	// Open file for writing
insilmaril@819
   673
	QFile file (outputFile);
insilmaril@819
   674
	if ( !file.open( QIODevice::WriteOnly ) ) 
insilmaril@819
   675
	{
insilmaril@819
   676
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not write %1").arg(outputFile));
insilmaril@819
   677
		mainWindow->statusMessage(QString(QObject::tr("Export failed.")));
insilmaril@819
   678
		return;
insilmaril@819
   679
	}
insilmaril@819
   680
	QTextStream ts( &file );	// use LANG decoding here...
insilmaril@819
   681
	ts.setEncoding (QTextStream::UnicodeUTF8); // Force UTF8
insilmaril@819
   682
insilmaril@825
   683
	// Hide stuff during export
insilmaril@825
   684
	model->setExportMode (true);
insilmaril@825
   685
insilmaril@819
   686
	// Write header
insilmaril@847
   687
	ts<<"<html>";
insilmaril@847
   688
	ts<<"<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"> ";
insilmaril@847
   689
	ts<<"<title>"+model->getMapName()<<"</title><body>";
insilmaril@824
   690
	ts<<" <link rel='stylesheet' id='css.stylesheet' href='"<<cssFileName<<"' />\n";
insilmaril@819
   691
insilmaril@819
   692
	// Include image
insilmaril@825
   693
	if (dia.useImage)
insilmaril@825
   694
	{
insilmaril@825
   695
		ts<<"<center><img src=\""<<model->getMapName()<<".png\" usemap='#imagemap'></center>\n";
insilmaril@825
   696
		model->exportImage (d.path()+"/"+model->getMapName()+".png",false,"PNG");
insilmaril@825
   697
	}
insilmaril@819
   698
insilmaril@819
   699
	// Main loop over all mapcenters
insilmaril@819
   700
	QString s;
insilmaril@819
   701
	TreeItem *rootItem=model->getRootItem();
insilmaril@819
   702
	BranchItem *bi;
insilmaril@819
   703
	for (int i=0; i<rootItem->branchCount(); i++)
insilmaril@819
   704
	{
insilmaril@819
   705
		bi=rootItem->getBranchNum(i);
insilmaril@819
   706
		if (!bi->hasHiddenExportParent())
insilmaril@819
   707
		{
insilmaril@819
   708
			ts<<getBranchText (bi);
insilmaril@819
   709
			ts<<buildList (bi);
insilmaril@819
   710
		}
insilmaril@819
   711
	}	
insilmaril@819
   712
insilmaril@819
   713
	// Imagemap
insilmaril@819
   714
	ts<<"<map name='imagemap'>\n"+imageMap+"</map>\n";
insilmaril@819
   715
insilmaril@819
   716
	// Write footer 
insilmaril@819
   717
	ts<<"<hr/>\n";
insilmaril@819
   718
	ts<<"<table class=\"vym-footer\">   \n\
insilmaril@819
   719
      <tr> \n\
insilmaril@819
   720
        <td class=\"vym-footerL\">"+model->getFileName()+"</td> \n\
insilmaril@819
   721
        <td class=\"vym-footerC\">"+model->getDate()+"</td> \n\
insilmaril@819
   722
        <td class=\"vym-footerR\"> vym "+model->getVersion()+"</td> \n\
insilmaril@819
   723
      </tr> \n \
insilmaril@819
   724
    </table>\n";
insilmaril@819
   725
	ts<<"</body></html>";
insilmaril@819
   726
	file.close();
insilmaril@825
   727
insilmaril@825
   728
	if (!dia.postscript.isEmpty()) 
insilmaril@825
   729
	{
insilmaril@825
   730
		Process p;
insilmaril@825
   731
		p.runScript (dia.postscript,d.path()+"/"+model->getMapName()+".html");
insilmaril@825
   732
	}
insilmaril@825
   733
insilmaril@825
   734
insilmaril@825
   735
	dia.saveSettings();
insilmaril@844
   736
	model->setExportMode (false);
insilmaril@819
   737
}
insilmaril@819
   738
insilmaril@819
   739
////////////////////////////////////////////////////////////////////////
insilmaril@228
   740
void ExportTaskjuggler::doExport() 
insilmaril@228
   741
{
insilmaril@721
   742
	model->exportXML(tmpDir.path(),false);
insilmaril@228
   743
insilmaril@721
   744
	XSLTProc p;
insilmaril@721
   745
	p.setInputFile (tmpDir.path()+"/"+model->getMapName()+".xml");
insilmaril@721
   746
	p.setOutputFile (outputFile);
insilmaril@721
   747
	p.setXSLFile (vymBaseDir.path()+"/styles/vym2taskjuggler.xsl");
insilmaril@721
   748
	p.process();
insilmaril@228
   749
}
insilmaril@228
   750
insilmaril@239
   751
////////////////////////////////////////////////////////////////////////
insilmaril@228
   752
void ExportLaTeX::doExport() 
insilmaril@0
   753
{
insilmaril@183
   754
	// Exports a map to a LaTex file.  
insilmaril@183
   755
	// This file needs to be included 
insilmaril@183
   756
	// or inported into a LaTex document
insilmaril@183
   757
	// it will not add a preamble, or anything 
insilmaril@183
   758
	// that makes a full LaTex document.
insilmaril@199
   759
  QFile file (outputFile);
insilmaril@366
   760
  if ( !file.open( QIODevice::WriteOnly ) ) {
insilmaril@205
   761
	QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not write %1").arg(outputFile));
insilmaril@205
   762
	mainWindow->statusMessage(QString(QObject::tr("Export failed.")));
insilmaril@163
   763
    return;
insilmaril@163
   764
  }
insilmaril@163
   765
  QTextStream ts( &file );	// use LANG decoding here...
insilmaril@163
   766
  ts.setEncoding (QTextStream::UnicodeUTF8); // Force UTF8
insilmaril@163
   767
  
insilmaril@163
   768
  // Main loop over all branches
insilmaril@163
   769
  QString s;
insilmaril@613
   770
  // QString curIndent("");
insilmaril@163
   771
  // int i;
insilmaril@163
   772
  BranchObj *bo;
insilmaril@750
   773
  BranchItem *cur=NULL;
insilmaril@750
   774
  BranchItem *prev=NULL;
insilmaril@804
   775
  model->nextBranch(cur,prev);
insilmaril@741
   776
  while (cur) 
insilmaril@740
   777
  {
insilmaril@741
   778
	bo=(BranchObj*)(cur->getLMO());
insilmaril@740
   779
insilmaril@753
   780
	if (!cur->hasHiddenExportParent() )
insilmaril@600
   781
	{
insilmaril@741
   782
		switch (cur->depth() ) 
insilmaril@740
   783
		{
insilmaril@740
   784
			case 0: break;
insilmaril@740
   785
			case 1: 
insilmaril@753
   786
			  ts << ("\\chapter{" + cur->getHeading()+ "}\n");
insilmaril@740
   787
			  break;
insilmaril@740
   788
			case 2: 
insilmaril@753
   789
			  ts << ("\\section{" + cur->getHeading()+ "}\n");
insilmaril@740
   790
			  break;
insilmaril@740
   791
			case 3: 
insilmaril@753
   792
			  ts << ("\\subsection{" + cur->getHeading()+ "}\n");
insilmaril@740
   793
			  break;
insilmaril@740
   794
			case 4: 
insilmaril@753
   795
			  ts << ("\\subsubsection{" + cur->getHeading()+ "}\n");
insilmaril@740
   796
			  break;
insilmaril@740
   797
			default:
insilmaril@753
   798
			  ts << ("\\paragraph*{" + cur->getHeading()+ "}\n");
insilmaril@740
   799
			
insilmaril@600
   800
		}
insilmaril@600
   801
		// If necessary, write note
insilmaril@746
   802
		if (!cur->getNoteObj().isEmpty()) {
insilmaril@746
   803
		  ts << (cur->getNoteASCII());
insilmaril@600
   804
		  ts << ("\n");
insilmaril@600
   805
		}
insilmaril@254
   806
	}
insilmaril@804
   807
    cur=model->nextBranch(cur,prev);
insilmaril@163
   808
   }
insilmaril@163
   809
  file.close();
insilmaril@0
   810
}
insilmaril@0
   811
insilmaril@239
   812
////////////////////////////////////////////////////////////////////////
insilmaril@171
   813
ExportOO::ExportOO()
insilmaril@171
   814
{
insilmaril@199
   815
	useSections=false;
insilmaril@171
   816
}
insilmaril@163
   817
insilmaril@171
   818
ExportOO::~ExportOO()
insilmaril@171
   819
{
insilmaril@171
   820
}	
insilmaril@163
   821
insilmaril@750
   822
QString ExportOO::buildList (TreeItem *current)
insilmaril@171
   823
{
insilmaril@171
   824
    QString r;
insilmaril@183
   825
insilmaril@183
   826
    uint i=0;
insilmaril@750
   827
	BranchItem *bi=current->getFirstBranch();
insilmaril@750
   828
	if (bi)
insilmaril@171
   829
    {
insilmaril@819
   830
		// Start list
insilmaril@819
   831
		r+="<text:list text:style-name=\"vym-list\">\n";
insilmaril@819
   832
		while (bi)
insilmaril@600
   833
		{
insilmaril@819
   834
			if (!bi->hasHiddenExportParent() )	
insilmaril@600
   835
			{
insilmaril@600
   836
				r+="<text:list-item><text:p >";
insilmaril@750
   837
				r+=quotemeta(bi->getHeading());
insilmaril@600
   838
				// If necessary, write note
insilmaril@750
   839
				if (!bi->getNoteObj().isEmpty())
insilmaril@750
   840
					r+=bi->getNoteOpenDoc();
insilmaril@600
   841
				r+="</text:p>";
insilmaril@750
   842
				r+=buildList (bi);	// recursivly add deeper branches
insilmaril@600
   843
				r+="</text:list-item>\n";
insilmaril@600
   844
			}
insilmaril@819
   845
			i++;
insilmaril@819
   846
			bi=current->getBranchNum(i);
insilmaril@600
   847
		}
insilmaril@819
   848
		r+="</text:list>\n";
insilmaril@171
   849
    }
insilmaril@171
   850
    return r;
insilmaril@171
   851
}
insilmaril@163
   852
insilmaril@171
   853
insilmaril@171
   854
void ExportOO::exportPresentation()
insilmaril@171
   855
{
insilmaril@183
   856
	QString allPages;
insilmaril@171
   857
insilmaril@804
   858
	BranchItem *firstMCO=(BranchItem*)(model->getRootItem()->getFirstBranch());
insilmaril@804
   859
	if (!firstMCO) 
insilmaril@804
   860
	{
insilmaril@804
   861
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("No objects in map!"));
insilmaril@804
   862
		return;
insilmaril@804
   863
	}
insilmaril@804
   864
insilmaril@163
   865
	// Insert new content
insilmaril@804
   866
	// FIXME add extra title in mapinfo for vym 1.13.x
insilmaril@804
   867
	content.replace ("<!-- INSERT TITLE -->",quotemeta(firstMCO->getHeading()));
insilmaril@804
   868
	content.replace ("<!-- INSERT AUTHOR -->",quotemeta(model->getAuthor()));
insilmaril@183
   869
insilmaril@183
   870
	QString	onePage;
insilmaril@183
   871
	QString list;
insilmaril@183
   872
	
insilmaril@804
   873
	BranchItem *sectionBI;	
insilmaril@183
   874
    int i=0;
insilmaril@804
   875
	BranchItem *pagesBI;
insilmaril@183
   876
    int j=0;
insilmaril@183
   877
insilmaril@804
   878
	int mapcenters=model->getRootItem()->branchCount();
insilmaril@804
   879
insilmaril@804
   880
	// useSections already has been set in setConfigFile 
insilmaril@804
   881
	if (mapcenters>1)	
insilmaril@804
   882
		sectionBI=firstMCO;
insilmaril@804
   883
	else
insilmaril@804
   884
		sectionBI=firstMCO->getFirstBranch();
insilmaril@804
   885
insilmaril@194
   886
	// Walk sections
insilmaril@804
   887
	while (sectionBI && !sectionBI->hasHiddenExportParent() )
insilmaril@183
   888
	{
insilmaril@194
   889
		if (useSections)
insilmaril@183
   890
		{
insilmaril@194
   891
			// Add page with section title
insilmaril@194
   892
			onePage=sectionTemplate;
insilmaril@804
   893
			onePage.replace ("<!-- INSERT PAGE HEADING -->", quotemeta(sectionBI->getHeading() ) );
insilmaril@183
   894
			allPages+=onePage;
insilmaril@804
   895
			pagesBI=sectionBI->getFirstBranch();
insilmaril@183
   896
		} else
insilmaril@183
   897
		{
insilmaril@804
   898
			//i=-2;	// only use inner loop to 
insilmaril@183
   899
			        // turn mainbranches into pages
insilmaril@804
   900
			//sectionBI=firstMCO;
insilmaril@804
   901
			pagesBI=sectionBI;
insilmaril@183
   902
		}
insilmaril@183
   903
insilmaril@183
   904
		j=0;
insilmaril@804
   905
		while (pagesBI && !pagesBI->hasHiddenExportParent() )
insilmaril@183
   906
		{
insilmaril@183
   907
			// Add page with list of items
insilmaril@254
   908
			onePage=pageTemplate;
insilmaril@804
   909
			onePage.replace ("<!-- INSERT PAGE HEADING -->", quotemeta (pagesBI->getHeading() ) );
insilmaril@804
   910
			list=buildList (pagesBI);
insilmaril@254
   911
			onePage.replace ("<!-- INSERT LIST -->", list);
insilmaril@254
   912
			allPages+=onePage;
insilmaril@804
   913
			if (pagesBI!=sectionBI)
insilmaril@804
   914
			{
insilmaril@804
   915
				j++;
insilmaril@804
   916
				pagesBI=((BranchItem*)pagesBI->parent())->getBranchNum(j);
insilmaril@804
   917
			} else
insilmaril@804
   918
				pagesBI=NULL;	// We are already iterating over the sectionBIs
insilmaril@183
   919
		}
insilmaril@183
   920
		i++;
insilmaril@804
   921
		if (mapcenters>1 )
insilmaril@804
   922
			sectionBI=model->getRootItem()->getBranchNum (i);
insilmaril@804
   923
		else
insilmaril@804
   924
			sectionBI=firstMCO->getBranchNum (i);
insilmaril@183
   925
	}
insilmaril@183
   926
	
insilmaril@171
   927
	content.replace ("<!-- INSERT PAGES -->",allPages);
insilmaril@171
   928
insilmaril@171
   929
	// Write modified content
insilmaril@171
   930
	QFile f (contentFile);
insilmaril@366
   931
    if ( !f.open( QIODevice::WriteOnly ) ) 
insilmaril@171
   932
	{
insilmaril@205
   933
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not write %1").arg(contentFile));
insilmaril@205
   934
		mainWindow->statusMessage(QString(QObject::tr("Export failed.")));
insilmaril@171
   935
		return;
insilmaril@171
   936
    }
insilmaril@171
   937
insilmaril@171
   938
    QTextStream t( &f );
insilmaril@171
   939
    t << content;
insilmaril@171
   940
    f.close();
insilmaril@171
   941
insilmaril@163
   942
	// zip tmpdir to destination
insilmaril@171
   943
	zipDir (tmpDir,outputFile);	
insilmaril@163
   944
}
insilmaril@163
   945
insilmaril@194
   946
bool ExportOO::setConfigFile (const QString &cf)
insilmaril@183
   947
{
insilmaril@183
   948
	configFile=cf;
insilmaril@183
   949
	int i=cf.findRev ("/");
insilmaril@183
   950
	if (i>=0) configDir=cf.left(i);
insilmaril@183
   951
	SimpleSettings set;
insilmaril@183
   952
	set.readSettings(configFile);
insilmaril@183
   953
insilmaril@183
   954
	// set paths
insilmaril@183
   955
	templateDir=configDir+"/"+set.readEntry ("Template");
insilmaril@183
   956
insilmaril@194
   957
	QDir d (templateDir);
insilmaril@194
   958
	if (!d.exists())
insilmaril@194
   959
	{
insilmaril@194
   960
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Check \"%1\" in\n%2").arg("Template="+set.readEntry ("Template")).arg(configFile));
insilmaril@194
   961
		return false;
insilmaril@194
   962
insilmaril@194
   963
	}
insilmaril@183
   964
insilmaril@183
   965
	contentTemplateFile=templateDir+"content-template.xml";
insilmaril@183
   966
	contentFile=tmpDir.path()+"/content.xml";
insilmaril@183
   967
	pageTemplateFile=templateDir+"page-template.xml";
insilmaril@194
   968
	sectionTemplateFile=templateDir+"section-template.xml";
insilmaril@183
   969
insilmaril@199
   970
	if (set.readEntry("useSections").contains("yes"))
insilmaril@199
   971
		useSections=true;
insilmaril@199
   972
insilmaril@183
   973
	// Copy template to tmpdir
insilmaril@183
   974
	system ("cp -r "+templateDir+"* "+tmpDir.path());
insilmaril@183
   975
insilmaril@183
   976
	// Read content-template
insilmaril@183
   977
	if (!loadStringFromDisk (contentTemplateFile,content))
insilmaril@183
   978
	{
insilmaril@194
   979
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not read %1").arg(contentTemplateFile));
insilmaril@194
   980
		return false;
insilmaril@183
   981
	}
insilmaril@183
   982
insilmaril@183
   983
	// Read page-template
insilmaril@183
   984
	if (!loadStringFromDisk (pageTemplateFile,pageTemplate))
insilmaril@183
   985
	{
insilmaril@194
   986
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not read %1").arg(pageTemplateFile));
insilmaril@194
   987
		return false;
insilmaril@183
   988
	}
insilmaril@183
   989
	
insilmaril@194
   990
	// Read section-template
insilmaril@201
   991
	if (useSections && !loadStringFromDisk (sectionTemplateFile,sectionTemplate))
insilmaril@183
   992
	{
insilmaril@194
   993
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not read %1").arg(sectionTemplateFile));
insilmaril@194
   994
		return false;
insilmaril@183
   995
	}
insilmaril@194
   996
	return true;
insilmaril@183
   997
}
insilmaril@183
   998