exports.cpp
author insilmaril
Tue, 15 Dec 2009 09:14:59 +0000
changeset 818 25ee6b988b73
parent 815 2881c4424190
child 819 8f987e376035
permissions -rw-r--r--
Fixed A&O report to show subitems
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@171
    11
extern Main *mainWindow;
insilmaril@228
    12
extern QDir vymBaseDir;
insilmaril@404
    13
extern QString vymName;
insilmaril@131
    14
insilmaril@171
    15
ExportBase::ExportBase()
insilmaril@0
    16
{
insilmaril@0
    17
	indentPerDepth="  ";
insilmaril@377
    18
	bool ok;
insilmaril@606
    19
    tmpDir.setPath (makeTmpDir(ok,"vym-export"));
insilmaril@377
    20
	if (!tmpDir.exists() || !ok)
insilmaril@377
    21
		QMessageBox::critical( 0, QObject::tr( "Error" ),
insilmaril@377
    22
					   QObject::tr("Couldn't access temporary directory\n"));
insilmaril@512
    23
	cancelFlag=false;				   
insilmaril@228
    24
}
insilmaril@228
    25
insilmaril@228
    26
ExportBase::~ExportBase()
insilmaril@228
    27
{
insilmaril@377
    28
	// Cleanup tmpdir
insilmaril@228
    29
	removeDir (tmpDir);
insilmaril@0
    30
}
insilmaril@0
    31
insilmaril@424
    32
void ExportBase::setDir(const QDir &d)
insilmaril@0
    33
{
insilmaril@424
    34
	outDir=d;
insilmaril@199
    35
}
insilmaril@199
    36
insilmaril@199
    37
void ExportBase::setFile (const QString &p)
insilmaril@199
    38
{
insilmaril@199
    39
	outputFile=p;
insilmaril@0
    40
}
insilmaril@0
    41
insilmaril@512
    42
QString ExportBase::getFile ()
insilmaril@512
    43
{
insilmaril@512
    44
	return outputFile;
insilmaril@512
    45
}
insilmaril@512
    46
insilmaril@643
    47
void ExportBase::setModel(VymModel *m)
insilmaril@0
    48
{
insilmaril@643
    49
	model=m;
insilmaril@0
    50
}
insilmaril@0
    51
insilmaril@228
    52
void ExportBase::setCaption (const QString &s)
insilmaril@228
    53
{
insilmaril@228
    54
	caption=s;
insilmaril@228
    55
}
insilmaril@228
    56
insilmaril@228
    57
void ExportBase::addFilter(const QString &s)
insilmaril@228
    58
{
insilmaril@228
    59
	filter=s;
insilmaril@228
    60
}
insilmaril@228
    61
insilmaril@228
    62
bool ExportBase::execDialog()
insilmaril@228
    63
{
insilmaril@228
    64
	{
insilmaril@643
    65
		QFileDialog *fd=new QFileDialog( 0, caption);
insilmaril@366
    66
		fd->setFilter (filter);
insilmaril@228
    67
		fd->setCaption(caption);
insilmaril@228
    68
		fd->setMode( QFileDialog::AnyFile );
insilmaril@424
    69
		fd->setDir (outDir);
insilmaril@228
    70
		fd->show();
insilmaril@228
    71
insilmaril@228
    72
		if ( fd->exec() == QDialog::Accepted )
insilmaril@228
    73
		{
insilmaril@228
    74
			if (QFile (fd->selectedFile()).exists() )
insilmaril@228
    75
			{
insilmaril@404
    76
				QMessageBox mb( vymName,
insilmaril@228
    77
					QObject::tr("The file %1 exists already.\nDo you want to overwrite it?").arg(fd->selectedFile()), 
insilmaril@228
    78
				QMessageBox::Warning,
insilmaril@228
    79
				QMessageBox::Yes | QMessageBox::Default,
insilmaril@228
    80
				QMessageBox::Cancel | QMessageBox::Escape,
insilmaril@366
    81
				Qt::NoButton );
insilmaril@228
    82
				mb.setButtonText( QMessageBox::Yes, QObject::tr("Overwrite") );
insilmaril@228
    83
				mb.setButtonText( QMessageBox::No, QObject::tr("Cancel"));
insilmaril@228
    84
				ExportBase ex;
insilmaril@228
    85
				switch( mb.exec() ) 
insilmaril@228
    86
				{
insilmaril@228
    87
					case QMessageBox::Yes:
insilmaril@228
    88
						// save 
insilmaril@228
    89
						break;;
insilmaril@228
    90
					case QMessageBox::Cancel:
insilmaril@512
    91
						cancelFlag=true;
insilmaril@228
    92
						return false;
insilmaril@228
    93
						break;
insilmaril@228
    94
				}
insilmaril@228
    95
			}
insilmaril@228
    96
			outputFile=fd->selectedFile();
insilmaril@512
    97
			cancelFlag=false;
insilmaril@228
    98
			return true;
insilmaril@228
    99
		}
insilmaril@228
   100
	}
insilmaril@228
   101
	return false;
insilmaril@228
   102
}
insilmaril@228
   103
insilmaril@512
   104
bool ExportBase::canceled()
insilmaril@512
   105
{
insilmaril@512
   106
	return cancelFlag;
insilmaril@512
   107
}
insilmaril@512
   108
insilmaril@791
   109
QString ExportBase::getSectionString(TreeItem *start)
insilmaril@163
   110
{
insilmaril@205
   111
	// Make prefix like "2.5.3" for "bo:2,bo:5,bo:3"
insilmaril@163
   112
	QString r;
insilmaril@791
   113
	TreeItem *ti=start;
insilmaril@749
   114
	int depth=ti->depth();
insilmaril@163
   115
	while (depth>0)
insilmaril@163
   116
	{
insilmaril@749
   117
		r=QString("%1").arg(1+ti->num(),0,10)+"." + r;
insilmaril@749
   118
		ti=ti->parent(); 
insilmaril@749
   119
		depth=ti->depth();
insilmaril@163
   120
	}	
insilmaril@163
   121
	if (r.isEmpty())
insilmaril@163
   122
		return r;
insilmaril@163
   123
	else	
insilmaril@163
   124
		return r + " ";
insilmaril@163
   125
}
insilmaril@163
   126
insilmaril@239
   127
////////////////////////////////////////////////////////////////////////
insilmaril@807
   128
ExportAO::ExportAO()
insilmaril@807
   129
{
insilmaril@807
   130
	filter="TXT (*.txt)";
insilmaril@807
   131
	caption=vymName+ " -" +QObject::tr("Export as ASCII")+" "+QObject::tr("(still experimental)");
insilmaril@807
   132
}
insilmaril@807
   133
insilmaril@807
   134
void ExportAO::doExport()	
insilmaril@807
   135
{
insilmaril@807
   136
	QFile file (outputFile);
insilmaril@807
   137
	if ( !file.open( QIODevice::WriteOnly ) )
insilmaril@807
   138
	{
insilmaril@807
   139
		qWarning ("ExportAO::doExport couldn't open "+outputFile);
insilmaril@807
   140
		return;
insilmaril@807
   141
	}
insilmaril@807
   142
	QTextStream ts( &file );	// use LANG decoding here...
insilmaril@807
   143
insilmaril@807
   144
	// Main loop over all branches
insilmaril@807
   145
	QString s;
insilmaril@807
   146
	QString curIndent;
insilmaril@807
   147
	int i;
insilmaril@807
   148
	BranchItem *cur=NULL;
insilmaril@807
   149
	BranchItem *prev=NULL;
insilmaril@807
   150
insilmaril@807
   151
	QString colString;
insilmaril@807
   152
	QColor col;
insilmaril@807
   153
insilmaril@807
   154
	cur=model->nextBranch (cur,prev);
insilmaril@807
   155
	while (cur) 
insilmaril@807
   156
	{
insilmaril@807
   157
		if (cur->getType()==TreeItem::Branch || cur->getType()==TreeItem::MapCenter)
insilmaril@807
   158
		{
insilmaril@807
   159
			// Make indentstring
insilmaril@807
   160
			curIndent="";
insilmaril@807
   161
			for (i=0;i<cur->depth()-1;i++) curIndent+= indentPerDepth;
insilmaril@807
   162
insilmaril@807
   163
			if (!cur->hasHiddenExportParent() )
insilmaril@807
   164
			{
insilmaril@807
   165
				col=cur->getHeadingColor();
insilmaril@807
   166
				if (col==QColor (255,0,0))
insilmaril@807
   167
					colString="[R]";
insilmaril@807
   168
				else if (col==QColor (217,81,0))
insilmaril@807
   169
					colString="[O]";
insilmaril@807
   170
				else if (col==QColor (0,85,0))
insilmaril@807
   171
					colString="[G]";
insilmaril@807
   172
				else  	
insilmaril@807
   173
					colString="[?]";
insilmaril@807
   174
				switch (cur->depth())
insilmaril@807
   175
				{
insilmaril@807
   176
					case 0:
insilmaril@807
   177
						//ts << underline (cur->getHeading(),QString("="));
insilmaril@807
   178
						//ts << "\n";
insilmaril@807
   179
						break;
insilmaril@807
   180
					case 1:
insilmaril@807
   181
						//ts << "\n";
insilmaril@807
   182
						//ts << (underline ( cur->getHeading(), QString("-") ) );
insilmaril@807
   183
						//ts << "\n";
insilmaril@807
   184
						break;
insilmaril@807
   185
					case 2: // Main heading
insilmaril@807
   186
						ts << "\n";
insilmaril@807
   187
						ts << underline ( cur->getHeading(), QString("=") );
insilmaril@818
   188
						ts << "\n";
insilmaril@807
   189
						break;
insilmaril@807
   190
					case 3: // Achievement, Bonus, Objective ...
insilmaril@818
   191
						ts << "\n\n";
insilmaril@807
   192
						ts << underline ( cur->getHeading(), "-");
insilmaril@807
   193
						ts << "\n\n";
insilmaril@807
   194
						break;
insilmaril@807
   195
					case 4:	// That's the item we need to know
insilmaril@815
   196
						//ts << (curIndent + "* " + colString+" "+ cur->getHeading());
insilmaril@815
   197
						ts << colString+" "+ cur->getHeading();
insilmaril@807
   198
						if (cur->isActiveStandardFlag ("hook-green"))
insilmaril@807
   199
							ts << " [DONE] ";
insilmaril@815
   200
						else	if (cur->isActiveStandardFlag ("wip"))
insilmaril@807
   201
							ts << " [WIP] ";
insilmaril@807
   202
						else	if (cur->isActiveStandardFlag ("cross-red"))
insilmaril@807
   203
							ts << " [NOT STARTED] ";
insilmaril@807
   204
						ts << "\n";
insilmaril@818
   205
						break;
insilmaril@807
   206
					default:
insilmaril@807
   207
						ts << (curIndent + "- " + cur->getHeading());
insilmaril@807
   208
						ts << "\n";
insilmaril@807
   209
						break;
insilmaril@807
   210
				}
insilmaril@807
   211
insilmaril@807
   212
				// If necessary, write note
insilmaril@807
   213
				if (!cur->getNoteObj().isEmpty())
insilmaril@807
   214
				{
insilmaril@807
   215
					curIndent +="  | ";
insilmaril@807
   216
					s=cur->getNoteASCII( curIndent, 80);
insilmaril@807
   217
					ts << s;
insilmaril@807
   218
				}
insilmaril@807
   219
			}
insilmaril@807
   220
		}
insilmaril@807
   221
		cur=model->nextBranch(cur,prev);
insilmaril@807
   222
	}
insilmaril@807
   223
	file.close();
insilmaril@807
   224
}
insilmaril@807
   225
insilmaril@807
   226
QString ExportAO::underline (const QString &text, const QString &line)
insilmaril@807
   227
{
insilmaril@807
   228
	QString r=text + "\n";
insilmaril@807
   229
	for (int j=0;j<text.length();j++) r+=line;
insilmaril@807
   230
	return r;
insilmaril@807
   231
}
insilmaril@807
   232
insilmaril@807
   233
insilmaril@807
   234
////////////////////////////////////////////////////////////////////////
insilmaril@512
   235
ExportASCII::ExportASCII()
insilmaril@512
   236
{
insilmaril@512
   237
	filter="TXT (*.txt)";
insilmaril@512
   238
	caption=vymName+ " -" +QObject::tr("Export as ASCII")+" "+QObject::tr("(still experimental)");
insilmaril@512
   239
}
insilmaril@512
   240
insilmaril@777
   241
void ExportASCII::doExport()	
insilmaril@0
   242
{
insilmaril@199
   243
	QFile file (outputFile);
insilmaril@366
   244
	if ( !file.open( QIODevice::WriteOnly ) )
insilmaril@0
   245
	{
insilmaril@807
   246
		qWarning ("ExportASCII::doExport couldn't open "+outputFile);
insilmaril@0
   247
		return;
insilmaril@0
   248
	}
insilmaril@0
   249
	QTextStream ts( &file );	// use LANG decoding here...
insilmaril@0
   250
insilmaril@0
   251
	// Main loop over all branches
insilmaril@0
   252
	QString s;
insilmaril@613
   253
	QString curIndent;
insilmaril@613
   254
	int i;
insilmaril@750
   255
	BranchItem *cur=NULL;
insilmaril@750
   256
	BranchItem *prev=NULL;
insilmaril@741
   257
insilmaril@804
   258
	cur=model->nextBranch (cur,prev);
insilmaril@741
   259
	while (cur) 
insilmaril@0
   260
	{
insilmaril@741
   261
		if (cur->getType()==TreeItem::Branch || cur->getType()==TreeItem::MapCenter)
insilmaril@740
   262
		{
insilmaril@740
   263
			// Make indentstring
insilmaril@740
   264
			curIndent="";
insilmaril@741
   265
			for (i=0;i<cur->depth()-1;i++) curIndent+= indentPerDepth;
insilmaril@740
   266
insilmaril@753
   267
			if (!cur->hasHiddenExportParent() )
insilmaril@600
   268
			{
insilmaril@791
   269
				//std::cout << "ExportASCII::  "<<curIndent.toStdString()<<cur->getHeading().toStdString()<<std::endl;
insilmaril@741
   270
				switch (cur->depth())
insilmaril@740
   271
				{
insilmaril@740
   272
					case 0:
insilmaril@741
   273
						ts << underline (cur->getHeading(),QString("="));
insilmaril@740
   274
						ts << "\n";
insilmaril@740
   275
						break;
insilmaril@740
   276
					case 1:
insilmaril@740
   277
						ts << "\n";
insilmaril@791
   278
						ts << (underline (getSectionString(cur) + cur->getHeading(), QString("-") ) );
insilmaril@740
   279
						ts << "\n";
insilmaril@740
   280
						break;
insilmaril@740
   281
					case 2:
insilmaril@740
   282
						ts << "\n";
insilmaril@741
   283
						ts << (curIndent + "* " + cur->getHeading());
insilmaril@740
   284
						ts << "\n";
insilmaril@740
   285
						break;
insilmaril@740
   286
					case 3:
insilmaril@741
   287
						ts << (curIndent + "- " + cur->getHeading());
insilmaril@740
   288
						ts << "\n";
insilmaril@740
   289
						break;
insilmaril@740
   290
					default:
insilmaril@741
   291
						ts << (curIndent + "- " + cur->getHeading());
insilmaril@740
   292
						ts << "\n";
insilmaril@740
   293
						break;
insilmaril@740
   294
				}
insilmaril@613
   295
insilmaril@740
   296
				// If necessary, write note
insilmaril@746
   297
				if (!cur->getNoteObj().isEmpty())
insilmaril@740
   298
				{
insilmaril@740
   299
					curIndent +="  | ";
insilmaril@746
   300
					s=cur->getNoteASCII( curIndent, 80);
insilmaril@740
   301
					ts << s;
insilmaril@740
   302
				}
insilmaril@600
   303
			}
insilmaril@0
   304
		}
insilmaril@804
   305
		cur=model->nextBranch(cur,prev);
insilmaril@0
   306
	}
insilmaril@0
   307
	file.close();
insilmaril@0
   308
}
insilmaril@0
   309
insilmaril@613
   310
QString ExportASCII::underline (const QString &text, const QString &line)
insilmaril@613
   311
{
insilmaril@613
   312
	QString r=text + "\n";
insilmaril@613
   313
	for (int j=0;j<text.length();j++) r+=line;
insilmaril@613
   314
	return r;
insilmaril@613
   315
}
insilmaril@613
   316
insilmaril@497
   317
insilmaril@497
   318
////////////////////////////////////////////////////////////////////////
insilmaril@497
   319
void ExportCSV::doExport()
insilmaril@497
   320
{
insilmaril@497
   321
	QFile file (outputFile);
insilmaril@497
   322
	if ( !file.open( QIODevice::WriteOnly ) )
insilmaril@497
   323
	{
insilmaril@497
   324
		qWarning ("ExportBase::exportXML  couldn't open "+outputFile);
insilmaril@497
   325
		return;
insilmaril@497
   326
	}
insilmaril@497
   327
	QTextStream ts( &file );	// use LANG decoding here...
insilmaril@497
   328
insilmaril@497
   329
	// Write header
insilmaril@497
   330
	ts << "\"Note\""  <<endl;
insilmaril@497
   331
insilmaril@497
   332
	// Main loop over all branches
insilmaril@497
   333
	QString s;
insilmaril@613
   334
	QString curIndent("");
insilmaril@512
   335
	int i;
insilmaril@753
   336
	BranchObj *bo;  //FIXME-3 still needed?
insilmaril@750
   337
	BranchItem *cur=NULL;
insilmaril@750
   338
	BranchItem *prev=NULL;
insilmaril@804
   339
	cur=model->nextBranch (cur,prev);
insilmaril@741
   340
	while (cur) 
insilmaril@497
   341
	{
insilmaril@741
   342
		bo=(BranchObj*)(cur->getLMO());
insilmaril@740
   343
insilmaril@753
   344
		if (!cur->hasHiddenExportParent() )
insilmaril@497
   345
		{
insilmaril@600
   346
			// If necessary, write note
insilmaril@746
   347
			if (!cur->getNoteObj().isEmpty())
insilmaril@600
   348
			{
insilmaril@746
   349
				s =cur->getNoteASCII();
insilmaril@613
   350
				s=s.replace ("\n","\n"+curIndent);
insilmaril@600
   351
				ts << ("\""+s+"\",");
insilmaril@600
   352
			} else
insilmaril@600
   353
				ts <<"\"\",";
insilmaril@497
   354
insilmaril@600
   355
			// Make indentstring
insilmaril@741
   356
			for (i=0;i<cur->depth();i++) curIndent+= "\"\",";
insilmaril@497
   357
insilmaril@600
   358
			// Write heading
insilmaril@741
   359
			ts << curIndent << "\"" << cur->getHeading()<<"\""<<endl;
insilmaril@600
   360
		}
insilmaril@497
   361
		
insilmaril@804
   362
		cur=model->nextBranch(cur,prev);
insilmaril@613
   363
		curIndent="";
insilmaril@497
   364
	}
insilmaril@497
   365
	file.close();
insilmaril@497
   366
}
insilmaril@497
   367
insilmaril@239
   368
////////////////////////////////////////////////////////////////////////
insilmaril@742
   369
void ExportKDE3Bookmarks::doExport() 
insilmaril@239
   370
{
insilmaril@721
   371
	WarningDialog dia;
insilmaril@721
   372
	dia.showCancelButton (true);
insilmaril@721
   373
	dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("KDE"));
insilmaril@742
   374
	dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("KDE 3"));
insilmaril@742
   375
	dia.setShowAgainName("/exports/KDE/overwriteKDEBookmarks");
insilmaril@742
   376
	if (dia.exec()==QDialog::Accepted)
insilmaril@742
   377
	{
insilmaril@742
   378
		model->exportXML(tmpDir.path(),false);
insilmaril@742
   379
insilmaril@742
   380
		XSLTProc p;
insilmaril@742
   381
		p.setInputFile (tmpDir.path()+"/"+model->getMapName()+".xml");
insilmaril@742
   382
		p.setOutputFile (tmpDir.home().path()+"/.kde/share/apps/konqueror/bookmarks.xml");
insilmaril@742
   383
		p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
insilmaril@742
   384
		p.process();
insilmaril@742
   385
insilmaril@742
   386
		QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
insilmaril@742
   387
		QProcess *proc= new QProcess ;
insilmaril@742
   388
		proc->start( ub);
insilmaril@742
   389
		if (!proc->waitForStarted())
insilmaril@742
   390
		{
insilmaril@742
   391
			QMessageBox::warning(0, 
insilmaril@742
   392
				QObject::tr("Warning"),
insilmaril@742
   393
				QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
insilmaril@742
   394
		}	
insilmaril@742
   395
	}
insilmaril@742
   396
}
insilmaril@742
   397
insilmaril@742
   398
////////////////////////////////////////////////////////////////////////
insilmaril@742
   399
void ExportKDE4Bookmarks::doExport() 
insilmaril@742
   400
{
insilmaril@742
   401
	WarningDialog dia;
insilmaril@742
   402
	dia.showCancelButton (true);
insilmaril@742
   403
	dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("KDE 4"));
insilmaril@721
   404
	dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("KDE"));
insilmaril@721
   405
	dia.setShowAgainName("/exports/KDE/overwriteKDEBookmarks");
insilmaril@721
   406
	if (dia.exec()==QDialog::Accepted)
insilmaril@239
   407
	{
insilmaril@721
   408
		model->exportXML(tmpDir.path(),false);
insilmaril@721
   409
insilmaril@721
   410
		XSLTProc p;
insilmaril@721
   411
		p.setInputFile (tmpDir.path()+"/"+model->getMapName()+".xml");
insilmaril@742
   412
		p.setOutputFile (tmpDir.home().path()+"/.kde4/share/apps/konqueror/bookmarks.xml");
insilmaril@721
   413
		p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
insilmaril@721
   414
		p.process();
insilmaril@721
   415
insilmaril@721
   416
		QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
insilmaril@721
   417
		QProcess *proc= new QProcess ;
insilmaril@721
   418
		proc->start( ub);
insilmaril@721
   419
		if (!proc->waitForStarted())
insilmaril@311
   420
		{
insilmaril@721
   421
			QMessageBox::warning(0, 
insilmaril@721
   422
				QObject::tr("Warning"),
insilmaril@721
   423
				QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
insilmaril@721
   424
		}	
insilmaril@239
   425
	}
insilmaril@239
   426
}
insilmaril@239
   427
insilmaril@239
   428
////////////////////////////////////////////////////////////////////////
insilmaril@311
   429
void ExportFirefoxBookmarks::doExport() 
insilmaril@311
   430
{
insilmaril@721
   431
	WarningDialog dia;
insilmaril@721
   432
	dia.showCancelButton (true);
insilmaril@721
   433
	dia.setText(QObject::tr("Exporting the %1 bookmarks will overwrite\nyour existing bookmarks file.").arg("Firefox"));
insilmaril@721
   434
	dia.setCaption(QObject::tr("Warning: Overwriting %1 bookmarks").arg("Firefox"));
insilmaril@721
   435
	dia.setShowAgainName("/vym/warnings/overwriteImportBookmarks");
insilmaril@721
   436
	if (dia.exec()==QDialog::Accepted)
insilmaril@311
   437
	{
insilmaril@721
   438
		model->exportXML(tmpDir.path(),false);
insilmaril@311
   439
insilmaril@311
   440
/*
insilmaril@721
   441
		XSLTProc p;
insilmaril@721
   442
		p.setInputFile (tmpDir.path()+"/"+me->getMapName()+".xml");
insilmaril@721
   443
		p.setOutputFile (tmpDir.home().path()+"/.kde/share/apps/konqueror/bookmarks.xml");
insilmaril@721
   444
		p.setXSLFile (vymBaseDir.path()+"/styles/vym2kdebookmarks.xsl");
insilmaril@721
   445
		p.process();
insilmaril@311
   446
insilmaril@721
   447
		QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
insilmaril@721
   448
		QProcess *proc = new QProcess( );
insilmaril@721
   449
		proc->addArgument(ub);
insilmaril@311
   450
insilmaril@721
   451
		if ( !proc->start() ) 
insilmaril@721
   452
		{
insilmaril@721
   453
			QMessageBox::warning(0, 
insilmaril@721
   454
				QObject::tr("Warning"),
insilmaril@721
   455
				QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
insilmaril@721
   456
		}	
insilmaril@311
   457
insilmaril@311
   458
*/
insilmaril@311
   459
	}
insilmaril@311
   460
}
insilmaril@311
   461
insilmaril@311
   462
////////////////////////////////////////////////////////////////////////
insilmaril@228
   463
void ExportTaskjuggler::doExport() 
insilmaril@228
   464
{
insilmaril@721
   465
	model->exportXML(tmpDir.path(),false);
insilmaril@228
   466
insilmaril@721
   467
	XSLTProc p;
insilmaril@721
   468
	p.setInputFile (tmpDir.path()+"/"+model->getMapName()+".xml");
insilmaril@721
   469
	p.setOutputFile (outputFile);
insilmaril@721
   470
	p.setXSLFile (vymBaseDir.path()+"/styles/vym2taskjuggler.xsl");
insilmaril@721
   471
	p.process();
insilmaril@228
   472
}
insilmaril@228
   473
insilmaril@239
   474
////////////////////////////////////////////////////////////////////////
insilmaril@228
   475
void ExportLaTeX::doExport() 
insilmaril@0
   476
{
insilmaril@183
   477
	// Exports a map to a LaTex file.  
insilmaril@183
   478
	// This file needs to be included 
insilmaril@183
   479
	// or inported into a LaTex document
insilmaril@183
   480
	// it will not add a preamble, or anything 
insilmaril@183
   481
	// that makes a full LaTex document.
insilmaril@199
   482
  QFile file (outputFile);
insilmaril@366
   483
  if ( !file.open( QIODevice::WriteOnly ) ) {
insilmaril@205
   484
	QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not write %1").arg(outputFile));
insilmaril@205
   485
	mainWindow->statusMessage(QString(QObject::tr("Export failed.")));
insilmaril@163
   486
    return;
insilmaril@163
   487
  }
insilmaril@163
   488
  QTextStream ts( &file );	// use LANG decoding here...
insilmaril@163
   489
  ts.setEncoding (QTextStream::UnicodeUTF8); // Force UTF8
insilmaril@163
   490
  
insilmaril@163
   491
  // Main loop over all branches
insilmaril@163
   492
  QString s;
insilmaril@613
   493
  // QString curIndent("");
insilmaril@163
   494
  // int i;
insilmaril@163
   495
  BranchObj *bo;
insilmaril@750
   496
  BranchItem *cur=NULL;
insilmaril@750
   497
  BranchItem *prev=NULL;
insilmaril@804
   498
  model->nextBranch(cur,prev);
insilmaril@741
   499
  while (cur) 
insilmaril@740
   500
  {
insilmaril@741
   501
	bo=(BranchObj*)(cur->getLMO());
insilmaril@740
   502
insilmaril@753
   503
	if (!cur->hasHiddenExportParent() )
insilmaril@600
   504
	{
insilmaril@741
   505
		switch (cur->depth() ) 
insilmaril@740
   506
		{
insilmaril@740
   507
			case 0: break;
insilmaril@740
   508
			case 1: 
insilmaril@753
   509
			  ts << ("\\chapter{" + cur->getHeading()+ "}\n");
insilmaril@740
   510
			  break;
insilmaril@740
   511
			case 2: 
insilmaril@753
   512
			  ts << ("\\section{" + cur->getHeading()+ "}\n");
insilmaril@740
   513
			  break;
insilmaril@740
   514
			case 3: 
insilmaril@753
   515
			  ts << ("\\subsection{" + cur->getHeading()+ "}\n");
insilmaril@740
   516
			  break;
insilmaril@740
   517
			case 4: 
insilmaril@753
   518
			  ts << ("\\subsubsection{" + cur->getHeading()+ "}\n");
insilmaril@740
   519
			  break;
insilmaril@740
   520
			default:
insilmaril@753
   521
			  ts << ("\\paragraph*{" + cur->getHeading()+ "}\n");
insilmaril@740
   522
			
insilmaril@600
   523
		}
insilmaril@600
   524
		// If necessary, write note
insilmaril@746
   525
		if (!cur->getNoteObj().isEmpty()) {
insilmaril@746
   526
		  ts << (cur->getNoteASCII());
insilmaril@600
   527
		  ts << ("\n");
insilmaril@600
   528
		}
insilmaril@254
   529
	}
insilmaril@804
   530
    cur=model->nextBranch(cur,prev);
insilmaril@163
   531
   }
insilmaril@163
   532
  file.close();
insilmaril@0
   533
}
insilmaril@0
   534
insilmaril@239
   535
////////////////////////////////////////////////////////////////////////
insilmaril@171
   536
ExportOO::ExportOO()
insilmaril@171
   537
{
insilmaril@199
   538
	useSections=false;
insilmaril@171
   539
}
insilmaril@163
   540
insilmaril@171
   541
ExportOO::~ExportOO()
insilmaril@171
   542
{
insilmaril@171
   543
}	
insilmaril@163
   544
insilmaril@750
   545
QString ExportOO::buildList (TreeItem *current)
insilmaril@171
   546
{
insilmaril@171
   547
    QString r;
insilmaril@183
   548
insilmaril@183
   549
    uint i=0;
insilmaril@750
   550
	BranchItem *bi=current->getFirstBranch();
insilmaril@750
   551
	if (bi)
insilmaril@171
   552
    {
insilmaril@804
   553
		if (!bi->hasHiddenExportParent() )	// FIXME-3 use BranchItem...
insilmaril@600
   554
		{
insilmaril@600
   555
			// Start list
insilmaril@600
   556
			r+="<text:list text:style-name=\"vym-list\">\n";
insilmaril@750
   557
			while (bi)
insilmaril@600
   558
			{
insilmaril@600
   559
				r+="<text:list-item><text:p >";
insilmaril@750
   560
				r+=quotemeta(bi->getHeading());
insilmaril@600
   561
				// If necessary, write note
insilmaril@750
   562
				if (!bi->getNoteObj().isEmpty())
insilmaril@750
   563
					r+=bi->getNoteOpenDoc();
insilmaril@600
   564
				r+="</text:p>";
insilmaril@750
   565
				r+=buildList (bi);	// recursivly add deeper branches
insilmaril@600
   566
				r+="</text:list-item>\n";
insilmaril@600
   567
				i++;
insilmaril@750
   568
				bi=current->getBranchNum(i);
insilmaril@600
   569
			}
insilmaril@600
   570
			r+="</text:list>\n";
insilmaril@600
   571
		}
insilmaril@171
   572
    }
insilmaril@171
   573
    return r;
insilmaril@171
   574
}
insilmaril@163
   575
insilmaril@171
   576
insilmaril@171
   577
void ExportOO::exportPresentation()
insilmaril@171
   578
{
insilmaril@183
   579
	QString allPages;
insilmaril@171
   580
insilmaril@804
   581
	BranchItem *firstMCO=(BranchItem*)(model->getRootItem()->getFirstBranch());
insilmaril@804
   582
	if (!firstMCO) 
insilmaril@804
   583
	{
insilmaril@804
   584
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("No objects in map!"));
insilmaril@804
   585
		return;
insilmaril@804
   586
	}
insilmaril@804
   587
insilmaril@163
   588
	// Insert new content
insilmaril@804
   589
	// FIXME add extra title in mapinfo for vym 1.13.x
insilmaril@804
   590
	content.replace ("<!-- INSERT TITLE -->",quotemeta(firstMCO->getHeading()));
insilmaril@804
   591
	content.replace ("<!-- INSERT AUTHOR -->",quotemeta(model->getAuthor()));
insilmaril@183
   592
insilmaril@183
   593
	QString	onePage;
insilmaril@183
   594
	QString list;
insilmaril@183
   595
	
insilmaril@804
   596
	BranchItem *sectionBI;	
insilmaril@183
   597
    int i=0;
insilmaril@804
   598
	BranchItem *pagesBI;
insilmaril@183
   599
    int j=0;
insilmaril@183
   600
insilmaril@804
   601
	int mapcenters=model->getRootItem()->branchCount();
insilmaril@804
   602
insilmaril@804
   603
	// useSections already has been set in setConfigFile 
insilmaril@804
   604
	if (mapcenters>1)	
insilmaril@804
   605
		sectionBI=firstMCO;
insilmaril@804
   606
	else
insilmaril@804
   607
		sectionBI=firstMCO->getFirstBranch();
insilmaril@804
   608
insilmaril@194
   609
	// Walk sections
insilmaril@804
   610
	while (sectionBI && !sectionBI->hasHiddenExportParent() )
insilmaril@183
   611
	{
insilmaril@194
   612
		if (useSections)
insilmaril@183
   613
		{
insilmaril@194
   614
			// Add page with section title
insilmaril@194
   615
			onePage=sectionTemplate;
insilmaril@804
   616
			onePage.replace ("<!-- INSERT PAGE HEADING -->", quotemeta(sectionBI->getHeading() ) );
insilmaril@183
   617
			allPages+=onePage;
insilmaril@804
   618
			pagesBI=sectionBI->getFirstBranch();
insilmaril@183
   619
		} else
insilmaril@183
   620
		{
insilmaril@804
   621
			//i=-2;	// only use inner loop to 
insilmaril@183
   622
			        // turn mainbranches into pages
insilmaril@804
   623
			//sectionBI=firstMCO;
insilmaril@804
   624
			pagesBI=sectionBI;
insilmaril@183
   625
		}
insilmaril@183
   626
insilmaril@183
   627
		j=0;
insilmaril@804
   628
		while (pagesBI && !pagesBI->hasHiddenExportParent() )
insilmaril@183
   629
		{
insilmaril@183
   630
			// Add page with list of items
insilmaril@254
   631
			onePage=pageTemplate;
insilmaril@804
   632
			onePage.replace ("<!-- INSERT PAGE HEADING -->", quotemeta (pagesBI->getHeading() ) );
insilmaril@804
   633
			list=buildList (pagesBI);
insilmaril@254
   634
			onePage.replace ("<!-- INSERT LIST -->", list);
insilmaril@254
   635
			allPages+=onePage;
insilmaril@804
   636
			if (pagesBI!=sectionBI)
insilmaril@804
   637
			{
insilmaril@804
   638
				j++;
insilmaril@804
   639
				pagesBI=((BranchItem*)pagesBI->parent())->getBranchNum(j);
insilmaril@804
   640
			} else
insilmaril@804
   641
				pagesBI=NULL;	// We are already iterating over the sectionBIs
insilmaril@183
   642
		}
insilmaril@183
   643
		i++;
insilmaril@804
   644
		if (mapcenters>1 )
insilmaril@804
   645
			sectionBI=model->getRootItem()->getBranchNum (i);
insilmaril@804
   646
		else
insilmaril@804
   647
			sectionBI=firstMCO->getBranchNum (i);
insilmaril@183
   648
	}
insilmaril@183
   649
	
insilmaril@171
   650
	content.replace ("<!-- INSERT PAGES -->",allPages);
insilmaril@171
   651
insilmaril@171
   652
	// Write modified content
insilmaril@171
   653
	QFile f (contentFile);
insilmaril@366
   654
    if ( !f.open( QIODevice::WriteOnly ) ) 
insilmaril@171
   655
	{
insilmaril@205
   656
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not write %1").arg(contentFile));
insilmaril@205
   657
		mainWindow->statusMessage(QString(QObject::tr("Export failed.")));
insilmaril@171
   658
		return;
insilmaril@171
   659
    }
insilmaril@171
   660
insilmaril@171
   661
    QTextStream t( &f );
insilmaril@171
   662
    t << content;
insilmaril@171
   663
    f.close();
insilmaril@171
   664
insilmaril@163
   665
	// zip tmpdir to destination
insilmaril@171
   666
	zipDir (tmpDir,outputFile);	
insilmaril@163
   667
}
insilmaril@163
   668
insilmaril@194
   669
bool ExportOO::setConfigFile (const QString &cf)
insilmaril@183
   670
{
insilmaril@183
   671
	configFile=cf;
insilmaril@183
   672
	int i=cf.findRev ("/");
insilmaril@183
   673
	if (i>=0) configDir=cf.left(i);
insilmaril@183
   674
	SimpleSettings set;
insilmaril@183
   675
	set.readSettings(configFile);
insilmaril@183
   676
insilmaril@183
   677
	// set paths
insilmaril@183
   678
	templateDir=configDir+"/"+set.readEntry ("Template");
insilmaril@183
   679
insilmaril@194
   680
	QDir d (templateDir);
insilmaril@194
   681
	if (!d.exists())
insilmaril@194
   682
	{
insilmaril@194
   683
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Check \"%1\" in\n%2").arg("Template="+set.readEntry ("Template")).arg(configFile));
insilmaril@194
   684
		return false;
insilmaril@194
   685
insilmaril@194
   686
	}
insilmaril@183
   687
insilmaril@183
   688
	contentTemplateFile=templateDir+"content-template.xml";
insilmaril@183
   689
	contentFile=tmpDir.path()+"/content.xml";
insilmaril@183
   690
	pageTemplateFile=templateDir+"page-template.xml";
insilmaril@194
   691
	sectionTemplateFile=templateDir+"section-template.xml";
insilmaril@183
   692
insilmaril@199
   693
	if (set.readEntry("useSections").contains("yes"))
insilmaril@199
   694
		useSections=true;
insilmaril@199
   695
insilmaril@183
   696
	// Copy template to tmpdir
insilmaril@183
   697
	system ("cp -r "+templateDir+"* "+tmpDir.path());
insilmaril@183
   698
insilmaril@183
   699
	// Read content-template
insilmaril@183
   700
	if (!loadStringFromDisk (contentTemplateFile,content))
insilmaril@183
   701
	{
insilmaril@194
   702
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not read %1").arg(contentTemplateFile));
insilmaril@194
   703
		return false;
insilmaril@183
   704
	}
insilmaril@183
   705
insilmaril@183
   706
	// Read page-template
insilmaril@183
   707
	if (!loadStringFromDisk (pageTemplateFile,pageTemplate))
insilmaril@183
   708
	{
insilmaril@194
   709
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not read %1").arg(pageTemplateFile));
insilmaril@194
   710
		return false;
insilmaril@183
   711
	}
insilmaril@183
   712
	
insilmaril@194
   713
	// Read section-template
insilmaril@201
   714
	if (useSections && !loadStringFromDisk (sectionTemplateFile,sectionTemplate))
insilmaril@183
   715
	{
insilmaril@194
   716
		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not read %1").arg(sectionTemplateFile));
insilmaril@194
   717
		return false;
insilmaril@183
   718
	}
insilmaril@194
   719
	return true;
insilmaril@183
   720
}
insilmaril@183
   721