Added file for later dockwidget showing all search results at once
authorinsilmaril
Tue, 02 Mar 2010 13:59:19 +0000
changeset 8251ad892c1a709
parent 824 36eb4b8f409e
child 826 e715694b0f47
Added file for later dockwidget showing all search results at once
branchitem.cpp
bugagent.cpp
exporthtmldialog.cpp
exporthtmldialog.h
exporthtmldialog.ui
exports.cpp
exports.h
findresultitem.cpp
findresultitem.h
findresultmodel.cpp
findresultmodel.h
findresultwidget.cpp
findresultwidget.h
findwidget.cpp
findwidget.h
mainwindow.cpp
process.cpp
process.h
settings.cpp
texteditor.cpp
treeeditor.cpp
treemodel.cpp
version.h
vym.pro
vymmodel.cpp
vymmodel.h
vymview.cpp
xlinkitem.cpp
xsltproc.cpp
     1.1 --- a/branchitem.cpp	Thu Feb 25 11:03:52 2010 +0000
     1.2 +++ b/branchitem.cpp	Tue Mar 02 13:59:19 2010 +0000
     1.3 @@ -166,7 +166,7 @@
     1.4  			ol=cl;
     1.5  		} else
     1.6  		{
     1.7 -			qWarning (QString("Ignoring of duplicate xLink in %1").arg(getHeading()));
     1.8 +			qWarning (QString("BranchItem::saveToDir  Ignoring of duplicate xLink in %1").arg(getHeading()));
     1.9  		}
    1.10  	}	
    1.11  
     2.1 --- a/bugagent.cpp	Thu Feb 25 11:03:52 2010 +0000
     2.2 +++ b/bugagent.cpp	Tue Mar 02 13:59:19 2010 +0000
     2.3 @@ -30,29 +30,11 @@
     2.4  		qWarning()<<"BugAgent::getBugzillaData couldn't start "<<script;
     2.5  		return;
     2.6  	}	
     2.7 -
     2.8 -	/*
     2.9 -	QString result=getStdout();
    2.10 -	while (result.endsWith("\n")) result.chop(1); 
    2.11 -	//qWarning << QString(result);
    2.12 -	QString err=getErrout();
    2.13 -	if (!err.isEmpty())
    2.14 -	{
    2.15 -		qWarning << "BugAgent::getBugzillaData Error:\n";
    2.16 -		qWarning <<err;
    2.17 -	}
    2.18 -	else if (!result.isEmpty())
    2.19 -	{
    2.20 -		qWarning << "ok\n";
    2.21 -	}
    2.22 -
    2.23 -	*/
    2.24  }
    2.25  
    2.26  BugAgent::~BugAgent ()
    2.27  {
    2.28  	delete p;
    2.29 -	qDebug ()<<"dest BugAgent";
    2.30  }
    2.31  
    2.32  void BugAgent::processFinished(int exitCode, QProcess::ExitStatus exitStatus)
     3.1 --- a/exporthtmldialog.cpp	Thu Feb 25 11:03:52 2010 +0000
     3.2 +++ b/exporthtmldialog.cpp	Tue Mar 02 13:59:19 2010 +0000
     3.3 @@ -20,7 +20,6 @@
     3.4  
     3.5  	filepath="";
     3.6  	settingsChanged=false;
     3.7 -	scriptProc=new Process;
     3.8  
     3.9      // signals and slots connections
    3.10      connect(ui.browseExportDirButton, SIGNAL(pressed()), this, SLOT(browseDirectoryPressed()));
    3.11 @@ -31,8 +30,6 @@
    3.12      connect(ui.lineEditDir, SIGNAL(textChanged(const QString&)), this, SLOT(dirChanged()));
    3.13      connect(ui.lineEditCSS, SIGNAL(textChanged(const QString&)), this, SLOT(cssChanged()));
    3.14      connect(ui.saveSettingsInMapButton, SIGNAL(toggled(bool)), this, SLOT(saveSettingsInMapButtonPressed(bool)));
    3.15 -    connect(ui.browsePreExportButton, SIGNAL(pressed()), this, SLOT(browsePreExportButtonPressed()));
    3.16 -    connect(ui.lineEditPreScript, SIGNAL(textChanged(const QString&)), this, SLOT(prescriptChanged()));
    3.17      connect(ui.lineEditPostScript, SIGNAL(textChanged(const QString&)), this, SLOT(postscriptChanged()));
    3.18      connect(ui.browsePostExportButton, SIGNAL(pressed()), this, SLOT(browsePostExportButtonPressed()));
    3.19  }	
    3.20 @@ -88,22 +85,18 @@
    3.21  	}
    3.22  	ui.lineEditCSS->setText(css);
    3.23  	
    3.24 -	prescript=settings.readLocalEntry
    3.25 -		(filepath,"/export/html/prescript","");
    3.26 -	ui.lineEditPreScript->setText (prescript);	
    3.27 -	
    3.28  	postscript=settings.readLocalEntry
    3.29  		(filepath,"/export/html/postscript","");
    3.30  	ui.lineEditPostScript->setText (postscript);	
    3.31  
    3.32 -	if (!prescript.isEmpty() || !postscript.isEmpty())
    3.33 +	if (!postscript.isEmpty())
    3.34  	{
    3.35  		QMessageBox::warning( 0, tr( "Warning" ),tr(
    3.36  		"The settings saved in the map "
    3.37 -		"would like to run scripts:\n\n"
    3.38 +		"would like to run script:\n\n"
    3.39  		"%1\n\n"
    3.40  		"Please check, if you really\n"
    3.41 -		"want to allow this in your system!").arg(prescript+"  "+postscript));
    3.42 +		"want to allow this in your system!").arg(postscript));
    3.43  		
    3.44  	}
    3.45  }
    3.46 @@ -195,35 +188,12 @@
    3.47  	}
    3.48  }
    3.49  
    3.50 -void ExportHTMLDialog::prescriptChanged()
    3.51 -{
    3.52 -	prescript=ui.lineEditPreScript->text();
    3.53 -	settingsChanged=true;
    3.54 -}
    3.55 -
    3.56  void ExportHTMLDialog::postscriptChanged()
    3.57  {
    3.58  	postscript=ui.lineEditPostScript->text();
    3.59  	settingsChanged=true;
    3.60  }
    3.61  
    3.62 -void ExportHTMLDialog::browsePreExportButtonPressed()
    3.63 -{
    3.64 -	QFileDialog fd( this);
    3.65 -	fd.setModal (true);
    3.66 -	fd.setFilter ("Scripts (*.sh *.pl *.py *.php)");
    3.67 -	fd.setDirectory (QDir::current());
    3.68 -	fd.show();
    3.69 -
    3.70 -	if ( fd.exec() == QDialog::Accepted )
    3.71 -	{
    3.72 -		prescript=fd.selectedFile();
    3.73 -		ui.lineEditPreScript->setText (prescript );
    3.74 -		settingsChanged=true;
    3.75 -	}
    3.76 -
    3.77 -}
    3.78 -
    3.79  void ExportHTMLDialog::browsePostExportButtonPressed()
    3.80  {
    3.81  	QFileDialog fd( this);
    3.82 @@ -241,14 +211,13 @@
    3.83  }
    3.84  
    3.85  
    3.86 -void ExportHTMLDialog::doExport (const QString &mapname)
    3.87 +void ExportHTMLDialog::saveSettings ()
    3.88  {
    3.89  
    3.90  	// Save options to settings file 
    3.91  	// (but don't save at destructor, which
    3.92  	// is called for "cancel", too)
    3.93  	settings.setLocalEntry (filepath,"/export/html/exportDir",dir);
    3.94 -	settings.setLocalEntry (filepath,"/export/html/prescript",prescript);
    3.95  	settings.setLocalEntry (filepath,"/export/html/postscript",postscript);
    3.96  
    3.97      if (useImage)
    3.98 @@ -285,7 +254,7 @@
    3.99  		settings.setLocalEntry 
   3.100  			(filepath,"/export/html/saveSettingsInMap","yes");
   3.101  
   3.102 -	// Provide a smaller URL-icon to improve Layout //FIXME-1
   3.103 +	// Provide a smaller URL-icon to improve Layout //FIXME-1 add option to choose this
   3.104  	QPixmap pm;
   3.105  	if (!pm.load(ipath,"PNG") )
   3.106  		QMessageBox::warning( 0, tr( "Warning" ),tr("Could not open %1").arg(ipath));
   3.107 @@ -294,22 +263,6 @@
   3.108  	if(!pm.save (dir + "flags/flag-url-16x16.png","PNG"))
   3.109  		QMessageBox::warning( 0, tr( "Warning" ),tr("Could not write %1").arg(ipath));
   3.110  
   3.111 -	if (!prescript.isEmpty()) runScript (prescript,dir+mapname+".xml");
   3.112 -	
   3.113 -	/* FIXME-1
   3.114 -	if (useImage)
   3.115 -		p.addStringParam ("imagemap","images/"+mapname+".png");
   3.116 -	if (useTextColor)
   3.117 -		p.addStringParam ("use.textcolor","1");
   3.118 -	p.addStringParam ("mapname",mapname+".vym");
   3.119 -	
   3.120 -	p.setOutputFile (dir+mapname+".html");
   3.121 -	p.setInputFile (dir+mapname+".xml");
   3.122 -	p.process();
   3.123 -	*/
   3.124 -
   3.125 -	if (!postscript.isEmpty()) runScript (postscript,dir+mapname+".html");
   3.126 -
   3.127  }
   3.128  
   3.129  void ExportHTMLDialog::setFilePath(const QString &s)
   3.130 @@ -338,31 +291,3 @@
   3.131  }
   3.132  
   3.133  
   3.134 -void ExportHTMLDialog::runScript(QString spath, QString fpath)
   3.135 -{
   3.136 -	spath.replace ("%f",fpath);
   3.137 -	QStringList args=QStringList::split (' ',spath,false);
   3.138 -		
   3.139 -	//FIXME-1 p.addOutput ("vym is executing: \n" + spath+" "+args.join(" ") );	
   3.140 -	scriptProc->start (spath,args);
   3.141 -	if (!scriptProc->waitForStarted() )
   3.142 -	{
   3.143 -		QMessageBox::critical( 0, tr( "Critical Error" ),
   3.144 -					   tr("Could not start %1").arg(spath) );
   3.145 -	} else
   3.146 -	{
   3.147 -		if (!scriptProc->waitForFinished())
   3.148 -			QMessageBox::critical( 0, tr( "Critical Error" ),
   3.149 -			   tr("%1 didn't exit normally").arg(spath) +
   3.150 -			   scriptProc->getErrout() );
   3.151 -		else
   3.152 -			if (scriptProc->exitStatus()>0) showOutput=true;
   3.153 -			
   3.154 -	}	
   3.155 -	/* FIXME-1
   3.156 -	p.addOutput ("\n");
   3.157 -	p.addOutput (scriptProc->getErrout());
   3.158 -	p.addOutput (scriptProc->getStdout());
   3.159 -	*/
   3.160 -}
   3.161 -
     4.1 --- a/exporthtmldialog.h	Thu Feb 25 11:03:52 2010 +0000
     4.2 +++ b/exporthtmldialog.h	Tue Mar 02 13:59:19 2010 +0000
     4.3 @@ -32,34 +32,30 @@
     4.4      virtual void cssChanged();
     4.5  	virtual QString getCSSPath();
     4.6      virtual void browseCSSPressed();
     4.7 -    virtual void prescriptChanged();
     4.8      virtual void postscriptChanged();
     4.9 -    virtual void browsePreExportButtonPressed();
    4.10      virtual void browsePostExportButtonPressed();
    4.11 -    virtual void doExport( const QString & mapname );
    4.12 +    virtual void saveSettings ();
    4.13      virtual void setFilePath( const QString & s );
    4.14      virtual void setMapName( const QString & s );
    4.15  
    4.16 +public:
    4.17 +    bool useImage;
    4.18 +    bool useTextColor;
    4.19 +    QString postscript;
    4.20 +
    4.21  protected:
    4.22 -    bool useTextColor;
    4.23      bool showWarnings;
    4.24      QString css;
    4.25 -    bool useImage;
    4.26      bool showOutput;
    4.27      QString dir;
    4.28      QString filepath;
    4.29 -    QString prescript;
    4.30 -    QString postscript;
    4.31      bool settingsChanged;
    4.32      QString mapname;
    4.33      bool saveSettingsInMap;
    4.34 -    Process *scriptProc;
    4.35  
    4.36  private:
    4.37  	Ui::ExportHTMLDialog ui;
    4.38      void init();
    4.39 -    void destroy();
    4.40 -    void runScript( QString spath, QString fpath );
    4.41  
    4.42  };
    4.43  
     5.1 --- a/exporthtmldialog.ui	Thu Feb 25 11:03:52 2010 +0000
     5.2 +++ b/exporthtmldialog.ui	Tue Mar 02 13:59:19 2010 +0000
     5.3 @@ -6,8 +6,8 @@
     5.4     <rect>
     5.5      <x>0</x>
     5.6      <y>0</y>
     5.7 -    <width>684</width>
     5.8 -    <height>471</height>
     5.9 +    <width>681</width>
    5.10 +    <height>434</height>
    5.11     </rect>
    5.12    </property>
    5.13    <property name="sizePolicy">
    5.14 @@ -89,7 +89,7 @@
    5.15       <property name="title">
    5.16        <string>Options</string>
    5.17       </property>
    5.18 -     <widget class="QWidget" name="">
    5.19 +     <widget class="QWidget" name="layoutWidget">
    5.20        <property name="geometry">
    5.21         <rect>
    5.22          <x>20</x>
    5.23 @@ -257,54 +257,6 @@
    5.24           <number>0</number>
    5.25          </property>
    5.26          <item>
    5.27 -         <widget class="QLabel" name="textLabel1_3">
    5.28 -          <property name="sizePolicy">
    5.29 -           <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
    5.30 -            <horstretch>0</horstretch>
    5.31 -            <verstretch>0</verstretch>
    5.32 -           </sizepolicy>
    5.33 -          </property>
    5.34 -          <property name="minimumSize">
    5.35 -           <size>
    5.36 -            <width>125</width>
    5.37 -            <height>0</height>
    5.38 -           </size>
    5.39 -          </property>
    5.40 -          <property name="text">
    5.41 -           <string>Before export:</string>
    5.42 -          </property>
    5.43 -          <property name="alignment">
    5.44 -           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
    5.45 -          </property>
    5.46 -         </widget>
    5.47 -        </item>
    5.48 -        <item>
    5.49 -         <widget class="QLineEdit" name="lineEditPreScript"/>
    5.50 -        </item>
    5.51 -        <item>
    5.52 -         <widget class="QPushButton" name="browsePreExportButton">
    5.53 -          <property name="sizePolicy">
    5.54 -           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
    5.55 -            <horstretch>0</horstretch>
    5.56 -            <verstretch>0</verstretch>
    5.57 -           </sizepolicy>
    5.58 -          </property>
    5.59 -          <property name="text">
    5.60 -           <string>Browse</string>
    5.61 -          </property>
    5.62 -         </widget>
    5.63 -        </item>
    5.64 -       </layout>
    5.65 -      </item>
    5.66 -      <item row="1" column="0">
    5.67 -       <layout class="QHBoxLayout">
    5.68 -        <property name="spacing">
    5.69 -         <number>6</number>
    5.70 -        </property>
    5.71 -        <property name="margin">
    5.72 -         <number>0</number>
    5.73 -        </property>
    5.74 -        <item>
    5.75           <widget class="QLabel" name="textLabel2_2">
    5.76            <property name="sizePolicy">
    5.77             <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
     6.1 --- a/exports.cpp	Thu Feb 25 11:03:52 2010 +0000
     6.2 +++ b/exports.cpp	Tue Mar 02 13:59:19 2010 +0000
     6.3 @@ -484,7 +484,6 @@
     6.4  	singularDelimiter=": ";
     6.5  	noSingulars=true;	
     6.6  	frameURLs=true;
     6.7 -	useMapColors=true;
     6.8  	cssFileName="vym.css";
     6.9  	cssOriginalPath="";	// Is set in VymModel, based on default setting in ExportHTMLDialog
    6.10  
    6.11 @@ -506,7 +505,7 @@
    6.12  		}
    6.13  		QString col;
    6.14  		QString id=model->getSelectString(current);
    6.15 -		if (useMapColors)
    6.16 +		if (dia.useTextColor)
    6.17  			col=QString("style='color:%1'").arg(current->getHeadingColor().name());
    6.18  		QString s=QString("<span class='vym-branch%1' %2 id='%3'>")
    6.19  			.arg(current->depth())
    6.20 @@ -531,7 +530,7 @@
    6.21  			s+=quotemeta(current->getHeading());
    6.22  		s+="</span>";
    6.23  
    6.24 -		if (vis)
    6.25 +		if (vis && dia.useImage)
    6.26  			imageMap+=QString("  <area shape='rect' coords='%1,%2,%3,%4' href='#%5'>\n")
    6.27  				.arg(hr.left()-offset.x())
    6.28  				.arg(hr.top()-offset.y())
    6.29 @@ -595,9 +594,39 @@
    6.30  	cssOriginalPath=p;
    6.31  }
    6.32  
    6.33 -void ExportHTML::doExport() 
    6.34 +void ExportHTML::doExport(bool useDialog) 
    6.35  {
    6.36 -	//FIXME-1  check for errors// Copy CSS file
    6.37 +	// Execute dialog
    6.38 +	dia.setFilePath (model->getFilePath());
    6.39 +	dia.setMapName (model->getMapName());
    6.40 +	dia.readSettings();
    6.41 +	if (useDialog && dia.exec()!=QDialog::Accepted) return;
    6.42 +
    6.43 +	// Check if destination is not empty
    6.44 +	QDir d=dia.getDir();
    6.45 +	// Check, if warnings should be used before overwriting
    6.46 +	// the output directory
    6.47 +	if (d.exists() && d.count()>0)
    6.48 +	{
    6.49 +		WarningDialog warn;
    6.50 +		warn.showCancelButton (true);
    6.51 +		warn.setText(QString(
    6.52 +			"The directory %1 is not empty.\n"
    6.53 +			"Do you risk to overwrite some of its contents?").arg(d.path() ));
    6.54 +		warn.setCaption("Warning: Directory not empty");
    6.55 +		warn.setShowAgainName("mainwindow/export-XML-overwrite-dir");
    6.56 +
    6.57 +		if (warn.exec()!=QDialog::Accepted) 
    6.58 +		{
    6.59 +			mainWindow->statusMessage(QString(QObject::tr("Export aborted.")));
    6.60 +			return;
    6.61 +		}
    6.62 +	}
    6.63 +
    6.64 +	setFile (d.path()+"/"+model->getMapName()+".html");
    6.65 +	setCSSPath( dia.getCSSPath() );
    6.66 +
    6.67 +	// Copy CSS file
    6.68  	QFile css_src (cssOriginalPath);
    6.69  	QFile css_dst (outDir.path()+"/"+cssFileName);
    6.70  	if (!css_src.open ( QIODevice::ReadOnly))
    6.71 @@ -631,13 +660,19 @@
    6.72  	QTextStream ts( &file );	// use LANG decoding here...
    6.73  	ts.setEncoding (QTextStream::UnicodeUTF8); // Force UTF8
    6.74  
    6.75 +	// Hide stuff during export
    6.76 +	model->setExportMode (true);
    6.77 +
    6.78  	// Write header
    6.79  	ts<<"<html><title>"+model->getMapName()<<"</title><body>";
    6.80  	ts<<" <link rel='stylesheet' id='css.stylesheet' href='"<<cssFileName<<"' />\n";
    6.81  
    6.82  	// Include image
    6.83 -	ts<<"<center><img src=\""<<model->getMapName()<<".png\" usemap='#imagemap'></center>\n";
    6.84 -
    6.85 +	if (dia.useImage)
    6.86 +	{
    6.87 +		ts<<"<center><img src=\""<<model->getMapName()<<".png\" usemap='#imagemap'></center>\n";
    6.88 +		model->exportImage (d.path()+"/"+model->getMapName()+".png",false,"PNG");
    6.89 +	}
    6.90  
    6.91  	// Main loop over all mapcenters
    6.92  	QString s;
    6.93 @@ -667,6 +702,16 @@
    6.94      </table>\n";
    6.95  	ts<<"</body></html>";
    6.96  	file.close();
    6.97 +
    6.98 +	if (!dia.postscript.isEmpty()) 
    6.99 +	{
   6.100 +		Process p;
   6.101 +		p.runScript (dia.postscript,d.path()+"/"+model->getMapName()+".html");
   6.102 +	}
   6.103 +
   6.104 +
   6.105 +	dia.saveSettings();
   6.106 +	model->setExportMode (true);
   6.107  }
   6.108  
   6.109  ////////////////////////////////////////////////////////////////////////
     7.1 --- a/exports.h	Thu Feb 25 11:03:52 2010 +0000
     7.2 +++ b/exports.h	Tue Mar 02 13:59:19 2010 +0000
     7.3 @@ -93,6 +93,7 @@
     7.4  	virtual void doExport();
     7.5  };	
     7.6  
     7.7 +#include "exporthtmldialog.h"
     7.8  ///////////////////////////////////////////////////////////////////////
     7.9  class ExportHTML:public ExportBase
    7.10  {
    7.11 @@ -101,7 +102,7 @@
    7.12  	ExportHTML(VymModel *m);
    7.13  	virtual void init();
    7.14  	virtual void setCSSPath(const QString &path);
    7.15 -	virtual void doExport();
    7.16 +	virtual void doExport(bool useDialog=true);
    7.17  private:
    7.18  	QString getBranchText(BranchItem *);
    7.19  	QString buildList (BranchItem *);
    7.20 @@ -112,9 +113,10 @@
    7.21  	bool frameURLs;
    7.22  	bool noSingulars;
    7.23  	QString singularDelimiter;
    7.24 -	bool useMapColors;
    7.25  
    7.26  	QPointF offset;
    7.27 +
    7.28 +	ExportHTMLDialog dia;
    7.29  };	
    7.30  
    7.31  ///////////////////////////////////////////////////////////////////////
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/findresultitem.cpp	Tue Mar 02 13:59:19 2010 +0000
     8.3 @@ -0,0 +1,109 @@
     8.4 +#include <QStringList>
     8.5 +
     8.6 +#include "findresultitem.h"
     8.7 +
     8.8 +FindResultItem::FindResultItem(const QVector<QVariant> &data, FindResultItem *parent)
     8.9 +{
    8.10 +    parentItem = parent;
    8.11 +    itemData = data;
    8.12 +}
    8.13 +
    8.14 +FindResultItem::~FindResultItem()
    8.15 +{
    8.16 +    qDeleteAll(childItems);
    8.17 +}
    8.18 +
    8.19 +FindResultItem *FindResultItem::child(int number)
    8.20 +{
    8.21 +    return childItems.value(number);
    8.22 +}
    8.23 +
    8.24 +int FindResultItem::childCount() const
    8.25 +{
    8.26 +    return childItems.count();
    8.27 +}
    8.28 +
    8.29 +int FindResultItem::childNumber() const
    8.30 +{
    8.31 +    if (parentItem)
    8.32 +        return parentItem->childItems.indexOf(const_cast<FindResultItem*>(this));
    8.33 +
    8.34 +    return 0;
    8.35 +}
    8.36 +
    8.37 +int FindResultItem::columnCount() const
    8.38 +{
    8.39 +    return itemData.count();
    8.40 +}
    8.41 +
    8.42 +QVariant FindResultItem::data(int column) const
    8.43 +{
    8.44 +    return itemData.value(column);
    8.45 +}
    8.46 +
    8.47 +bool FindResultItem::insertChildren(int position, int count, int columns)
    8.48 +{
    8.49 +    if (position < 0 || position > childItems.size())
    8.50 +        return false;
    8.51 +
    8.52 +    for (int row = 0; row < count; ++row) {
    8.53 +        QVector<QVariant> data(columns);
    8.54 +        FindResultItem *item = new FindResultItem(data, this);
    8.55 +        childItems.insert(position, item);
    8.56 +    }
    8.57 +
    8.58 +    return true;
    8.59 +}
    8.60 +
    8.61 +bool FindResultItem::insertColumns(int position, int columns)
    8.62 +{
    8.63 +    if (position < 0 || position > itemData.size())
    8.64 +        return false;
    8.65 +
    8.66 +    for (int column = 0; column < columns; ++column)
    8.67 +        itemData.insert(position, QVariant());
    8.68 +
    8.69 +    foreach (FindResultItem *child, childItems)
    8.70 +        child->insertColumns(position, columns);
    8.71 +
    8.72 +    return true;
    8.73 +}
    8.74 +
    8.75 +FindResultItem *FindResultItem::parent()
    8.76 +{
    8.77 +    return parentItem;
    8.78 +}
    8.79 +
    8.80 +bool FindResultItem::removeChildren(int position, int count)
    8.81 +{
    8.82 +    if (position < 0 || position + count > childItems.size())
    8.83 +        return false;
    8.84 +
    8.85 +    for (int row = 0; row < count; ++row)
    8.86 +        delete childItems.takeAt(position);
    8.87 +
    8.88 +    return true;
    8.89 +}
    8.90 +
    8.91 +bool FindResultItem::removeColumns(int position, int columns)
    8.92 +{
    8.93 +    if (position < 0 || position + columns > itemData.size())
    8.94 +        return false;
    8.95 +
    8.96 +    for (int column = 0; column < columns; ++column)
    8.97 +        itemData.remove(position);
    8.98 +
    8.99 +    foreach (FindResultItem *child, childItems)
   8.100 +        child->removeColumns(position, columns);
   8.101 +
   8.102 +    return true;
   8.103 +}
   8.104 +
   8.105 +bool FindResultItem::setData(int column, const QVariant &value)
   8.106 +{
   8.107 +    if (column < 0 || column >= itemData.size())
   8.108 +        return false;
   8.109 +
   8.110 +    itemData[column] = value;
   8.111 +    return true;
   8.112 +}
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/findresultitem.h	Tue Mar 02 13:59:19 2010 +0000
     9.3 @@ -0,0 +1,32 @@
     9.4 +#ifndef FINDRESULTITEM_H
     9.5 +#define FINDRESULTITEM_H
     9.6 +
     9.7 +#include <QList>
     9.8 +#include <QVariant>
     9.9 +#include <QVector>
    9.10 +
    9.11 +class FindResultItem
    9.12 +{
    9.13 +public:
    9.14 +    FindResultItem(const QVector<QVariant> &data, FindResultItem *parent = 0);
    9.15 +    ~FindResultItem();
    9.16 +
    9.17 +    FindResultItem *child(int number);
    9.18 +    int childCount() const;
    9.19 +    int columnCount() const;
    9.20 +    QVariant data(int column) const;
    9.21 +    bool insertChildren(int position, int count, int columns);
    9.22 +    bool insertColumns(int position, int columns);
    9.23 +    FindResultItem *parent();
    9.24 +    bool removeChildren(int position, int count);
    9.25 +    bool removeColumns(int position, int columns);
    9.26 +    int childNumber() const;
    9.27 +    bool setData(int column, const QVariant &value);
    9.28 +
    9.29 +private:
    9.30 +    QList<FindResultItem*> childItems;
    9.31 +    QVector<QVariant> itemData;
    9.32 +    FindResultItem *parentItem;
    9.33 +};
    9.34 +
    9.35 +#endif
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/findresultmodel.cpp	Tue Mar 02 13:59:19 2010 +0000
    10.3 @@ -0,0 +1,229 @@
    10.4 +#include <QtGui>
    10.5 +
    10.6 +#include "findresultitem.h"
    10.7 +#include "findresultmodel.h"
    10.8 +
    10.9 +FindResultModel::FindResultModel( QObject *parent)
   10.10 +    : QAbstractItemModel(parent)
   10.11 +{
   10.12 +    QVector<QVariant> rootData;
   10.13 +	rootData << "Foo"<<"bar";
   10.14 +
   10.15 +    rootItem = new FindResultItem(rootData);
   10.16 +    //setupModelData(data.split(QString("\n")), rootItem);
   10.17 +}
   10.18 +
   10.19 +
   10.20 +FindResultModel::~FindResultModel()
   10.21 +{
   10.22 +    delete rootItem;
   10.23 +}
   10.24 +
   10.25 +int FindResultModel::columnCount(const QModelIndex & /* parent */) const
   10.26 +{
   10.27 +    return rootItem->columnCount();
   10.28 +}
   10.29 +
   10.30 +QVariant FindResultModel::data(const QModelIndex &index, int role) const
   10.31 +{
   10.32 +    if (!index.isValid())
   10.33 +        return QVariant();
   10.34 +
   10.35 +    if (role != Qt::DisplayRole && role != Qt::EditRole)
   10.36 +        return QVariant();
   10.37 +
   10.38 +    FindResultItem *item = getItem(index);
   10.39 +
   10.40 +    return item->data(index.column());
   10.41 +}
   10.42 +
   10.43 +Qt::ItemFlags FindResultModel::flags(const QModelIndex &index) const
   10.44 +{
   10.45 +    if (!index.isValid())
   10.46 +        return 0;
   10.47 +
   10.48 +    return Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
   10.49 +}
   10.50 +
   10.51 +FindResultItem *FindResultModel::getItem(const QModelIndex &index) const
   10.52 +{
   10.53 +    if (index.isValid()) {
   10.54 +        FindResultItem *item = static_cast<FindResultItem*>(index.internalPointer());
   10.55 +        if (item) return item;
   10.56 +    }
   10.57 +    return rootItem;
   10.58 +}
   10.59 +
   10.60 +QVariant FindResultModel::headerData(int section, Qt::Orientation orientation,
   10.61 +                               int role) const
   10.62 +{
   10.63 +    if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
   10.64 +        return rootItem->data(section);
   10.65 +
   10.66 +    return QVariant();
   10.67 +}
   10.68 +
   10.69 +QModelIndex FindResultModel::index(int row, int column, const QModelIndex &parent) const
   10.70 +{
   10.71 +    if (parent.isValid() && parent.column() != 0)
   10.72 +        return QModelIndex();
   10.73 +
   10.74 +    FindResultItem *parentItem = getItem(parent);
   10.75 +
   10.76 +    FindResultItem *childItem = parentItem->child(row);
   10.77 +    if (childItem)
   10.78 +        return createIndex(row, column, childItem);
   10.79 +    else
   10.80 +        return QModelIndex();
   10.81 +}
   10.82 +
   10.83 +bool FindResultModel::insertColumns(int position, int columns, const QModelIndex &parent)
   10.84 +{
   10.85 +    bool success;
   10.86 +
   10.87 +    beginInsertColumns(parent, position, position + columns - 1);
   10.88 +    success = rootItem->insertColumns(position, columns);
   10.89 +    endInsertColumns();
   10.90 +
   10.91 +    return success;
   10.92 +}
   10.93 +
   10.94 +bool FindResultModel::insertRows(int position, int rows, const QModelIndex &parent)
   10.95 +{
   10.96 +    FindResultItem *parentItem = getItem(parent);
   10.97 +    bool success;
   10.98 +
   10.99 +    beginInsertRows(parent, position, position + rows - 1);
  10.100 +    success = parentItem->insertChildren(position, rows, rootItem->columnCount());
  10.101 +    endInsertRows();
  10.102 +
  10.103 +    return success;
  10.104 +}
  10.105 +
  10.106 +QModelIndex FindResultModel::parent(const QModelIndex &index) const
  10.107 +{
  10.108 +    if (!index.isValid())
  10.109 +        return QModelIndex();
  10.110 +
  10.111 +    FindResultItem *childItem = getItem(index);
  10.112 +    FindResultItem *parentItem = childItem->parent();
  10.113 +
  10.114 +    if (parentItem == rootItem)
  10.115 +        return QModelIndex();
  10.116 +
  10.117 +    return createIndex(parentItem->childNumber(), 0, parentItem);
  10.118 +}
  10.119 +
  10.120 +bool FindResultModel::removeColumns(int position, int columns, const QModelIndex &parent)
  10.121 +{
  10.122 +    bool success;
  10.123 +
  10.124 +    beginRemoveColumns(parent, position, position + columns - 1);
  10.125 +    success = rootItem->removeColumns(position, columns);
  10.126 +    endRemoveColumns();
  10.127 +
  10.128 +    if (rootItem->columnCount() == 0)
  10.129 +        removeRows(0, rowCount());
  10.130 +
  10.131 +    return success;
  10.132 +}
  10.133 +
  10.134 +bool FindResultModel::removeRows(int position, int rows, const QModelIndex &parent)
  10.135 +{
  10.136 +    FindResultItem *parentItem = getItem(parent);
  10.137 +    bool success = true;
  10.138 +
  10.139 +    beginRemoveRows(parent, position, position + rows - 1);
  10.140 +    success = parentItem->removeChildren(position, rows);
  10.141 +    endRemoveRows();
  10.142 +
  10.143 +    return success;
  10.144 +}
  10.145 +
  10.146 +int FindResultModel::rowCount(const QModelIndex &parent) const
  10.147 +{
  10.148 +    FindResultItem *parentItem = getItem(parent);
  10.149 +
  10.150 +    return parentItem->childCount();
  10.151 +}
  10.152 +
  10.153 +bool FindResultModel::setData(const QModelIndex &index, const QVariant &value,
  10.154 +                        int role)
  10.155 +{
  10.156 +    if (role != Qt::EditRole)
  10.157 +        return false;
  10.158 +
  10.159 +    FindResultItem *item = getItem(index);
  10.160 +    bool result = item->setData(index.column(), value);
  10.161 +
  10.162 +    if (result)
  10.163 +        emit dataChanged(index, index);
  10.164 +
  10.165 +    return result;
  10.166 +}
  10.167 +
  10.168 +bool FindResultModel::setHeaderData(int section, Qt::Orientation orientation,
  10.169 +                              const QVariant &value, int role)
  10.170 +{
  10.171 +    if (role != Qt::EditRole || orientation != Qt::Horizontal)
  10.172 +        return false;
  10.173 +
  10.174 +    bool result = rootItem->setData(section, value);
  10.175 +
  10.176 +    if (result)
  10.177 +        emit headerDataChanged(orientation, section, section);
  10.178 +
  10.179 +    return result;
  10.180 +}
  10.181 +
  10.182 +void FindResultModel::setupModelData(const QStringList &lines, FindResultItem *parent)
  10.183 +{
  10.184 +    QList<FindResultItem*> parents;
  10.185 +    QList<int> indentations;
  10.186 +    parents << parent;
  10.187 +    indentations << 0;
  10.188 +
  10.189 +    int number = 0;
  10.190 +
  10.191 +    while (number < lines.count()) {
  10.192 +        int position = 0;
  10.193 +        while (position < lines[number].length()) {
  10.194 +            if (lines[number].mid(position, 1) != " ")
  10.195 +                break;
  10.196 +            position++;
  10.197 +        }
  10.198 +
  10.199 +        QString lineData = lines[number].mid(position).trimmed();
  10.200 +
  10.201 +        if (!lineData.isEmpty()) {
  10.202 +            // Read the column data from the rest of the line.
  10.203 +            QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts);
  10.204 +            QVector<QVariant> columnData;
  10.205 +            for (int column = 0; column < columnStrings.count(); ++column)
  10.206 +                columnData << columnStrings[column];
  10.207 +
  10.208 +            if (position > indentations.last()) {
  10.209 +                // The last child of the current parent is now the new parent
  10.210 +                // unless the current parent has no children.
  10.211 +
  10.212 +                if (parents.last()->childCount() > 0) {
  10.213 +                    parents << parents.last()->child(parents.last()->childCount()-1);
  10.214 +                    indentations << position;
  10.215 +                }
  10.216 +            } else {
  10.217 +                while (position < indentations.last() && parents.count() > 0) {
  10.218 +                    parents.pop_back();
  10.219 +                    indentations.pop_back();
  10.220 +                }
  10.221 +            }
  10.222 +
  10.223 +            // Append a new item to the current parent's list of children.
  10.224 +            FindResultItem *parent = parents.last();
  10.225 +            parent->insertChildren(parent->childCount(), 1, rootItem->columnCount());
  10.226 +            for (int column = 0; column < columnData.size(); ++column)
  10.227 +                parent->child(parent->childCount() - 1)->setData(column, columnData[column]);
  10.228 +        }
  10.229 +
  10.230 +        number++;
  10.231 +    }
  10.232 +}
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/findresultmodel.h	Tue Mar 02 13:59:19 2010 +0000
    11.3 @@ -0,0 +1,51 @@
    11.4 +#ifndef FINDRESULTMODEL_H
    11.5 +#define FINDRESULTMODEL_H
    11.6 +
    11.7 +#include <QAbstractItemModel>
    11.8 +#include <QModelIndex>
    11.9 +#include <QVariant>
   11.10 +
   11.11 +class FindResultItem;
   11.12 +
   11.13 +class FindResultModel : public QAbstractItemModel
   11.14 +{
   11.15 +    Q_OBJECT
   11.16 +
   11.17 +public:
   11.18 +    FindResultModel( QObject *parent = 0);
   11.19 +    ~FindResultModel();
   11.20 +
   11.21 +    QVariant data(const QModelIndex &index, int role) const;
   11.22 +    QVariant headerData(int section, Qt::Orientation orientation,
   11.23 +                        int role = Qt::DisplayRole) const;
   11.24 +
   11.25 +    QModelIndex index(int row, int column,
   11.26 +                      const QModelIndex &parent = QModelIndex()) const;
   11.27 +    QModelIndex parent(const QModelIndex &index) const;
   11.28 +
   11.29 +    int rowCount(const QModelIndex &parent = QModelIndex()) const;
   11.30 +    int columnCount(const QModelIndex &parent = QModelIndex()) const;
   11.31 +
   11.32 +    Qt::ItemFlags flags(const QModelIndex &index) const;
   11.33 +    bool setData(const QModelIndex &index, const QVariant &value,
   11.34 +                 int role = Qt::EditRole);
   11.35 +    bool setHeaderData(int section, Qt::Orientation orientation,
   11.36 +                       const QVariant &value, int role = Qt::EditRole);
   11.37 +
   11.38 +    bool insertColumns(int position, int columns,
   11.39 +                       const QModelIndex &parent = QModelIndex());
   11.40 +    bool removeColumns(int position, int columns,
   11.41 +                       const QModelIndex &parent = QModelIndex());
   11.42 +    bool insertRows(int position, int rows,
   11.43 +                    const QModelIndex &parent = QModelIndex());
   11.44 +    bool removeRows(int position, int rows,
   11.45 +                    const QModelIndex &parent = QModelIndex());
   11.46 +
   11.47 +private:
   11.48 +    void setupModelData(const QStringList &lines, FindResultItem *parent);
   11.49 +    FindResultItem *getItem(const QModelIndex &index) const;
   11.50 +
   11.51 +    FindResultItem *rootItem;
   11.52 +};
   11.53 +
   11.54 +#endif
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/findresultwidget.cpp	Tue Mar 02 13:59:19 2010 +0000
    12.3 @@ -0,0 +1,65 @@
    12.4 +#include "findresultwidget.h"
    12.5 +
    12.6 +#include <QLineEdit>
    12.7 +#include <QVBoxLayout>
    12.8 +#include <QPushButton>
    12.9 +#include <QTreeView>
   12.10 +
   12.11 +#include <QMenuBar>
   12.12 +#include <QDebug>
   12.13 +
   12.14 +#include "findresultmodel.h"
   12.15 +
   12.16 +extern QString iconPath;
   12.17 +
   12.18 +FindResultWidget::FindResultWidget(QWidget *)
   12.19 +{
   12.20 +	// Create model
   12.21 +	model=new FindResultModel;
   12.22 +
   12.23 +	// Create TreeView
   12.24 +	view = new QTreeView;
   12.25 +	view->setModel (model);
   12.26 +
   12.27 +    QVBoxLayout* mainLayout = new QVBoxLayout;
   12.28 +    QHBoxLayout *row2Layout = new QHBoxLayout;
   12.29 +    
   12.30 +	// Create Buttons
   12.31 +	cancelbutton = new QPushButton;
   12.32 +	//cancelbutton->setText(tr("Cancel"));
   12.33 +	cancelbutton->setIcon (QIcon (iconPath+"fileclose.png"));
   12.34 +	cancelbutton->setShortcut (Qt::Key_Escape);
   12.35 +	connect ( cancelbutton, SIGNAL( clicked() ), this, SLOT( cancelPressed() ) );
   12.36 +
   12.37 +	row2Layout->addWidget (cancelbutton);
   12.38 +	//row2Layout->addWidget(findcombo);
   12.39 +	//row2Layout->addWidget(nextbutton);
   12.40 +
   12.41 +	QMenuBar *mb=new QMenuBar;
   12.42 +	QAction *a=new  QAction ("Foo action",NULL);
   12.43 +	mb->addAction (a);
   12.44 +	mb->insertSeparator();
   12.45 +	mainLayout->addWidget(mb);
   12.46 +	mainLayout->addWidget(view);
   12.47 +	mainLayout->addLayout (row2Layout);
   12.48 +
   12.49 +	setLayout (mainLayout);
   12.50 +}
   12.51 +
   12.52 +void FindResultWidget::popup()
   12.53 +{
   12.54 +	show();
   12.55 +}
   12.56 +
   12.57 +void FindResultWidget::cancelPressed()
   12.58 +{
   12.59 +	emit (hideFindResultWidget() );
   12.60 +}
   12.61 +
   12.62 +#include <QHideEvent>
   12.63 +void FindResultWidget::hideEvent(QHideEvent *event) //FIXME-2 testing only
   12.64 +{
   12.65 +	qDebug()<<"FRW::hideEvent()";
   12.66 +	event->ignore();
   12.67 +}
   12.68 +
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/findresultwidget.h	Tue Mar 02 13:59:19 2010 +0000
    13.3 @@ -0,0 +1,35 @@
    13.4 +#ifndef FINDRESULTWIDGET_H 
    13.5 +#define FINDRESULTWIDGET_H
    13.6 +
    13.7 +#include <QWidget>
    13.8 +
    13.9 +class QTreeView;
   13.10 +class QPushButton;
   13.11 +class FindResultModel;
   13.12 +
   13.13 +class FindResultWidget: public QWidget
   13.14 +{
   13.15 +	Q_OBJECT
   13.16 +
   13.17 +public:
   13.18 +	FindResultWidget (QWidget *parent=NULL);
   13.19 +
   13.20 +public slots:	
   13.21 +	void popup();
   13.22 +	void cancelPressed();
   13.23 +
   13.24 +protected:
   13.25 +	virtual void hideEvent (QHideEvent *event);
   13.26 +
   13.27 +
   13.28 +signals:
   13.29 +	void hideFindResultWidget();
   13.30 +
   13.31 +private:
   13.32 +	FindResultModel *model;
   13.33 +	QTreeView *view;
   13.34 +	QPushButton *cancelbutton;
   13.35 +};
   13.36 +
   13.37 +#endif
   13.38 +
    14.1 --- a/findwidget.cpp	Thu Feb 25 11:03:52 2010 +0000
    14.2 +++ b/findwidget.cpp	Tue Mar 02 13:59:19 2010 +0000
    14.3 @@ -2,10 +2,15 @@
    14.4  #include <QVBoxLayout>
    14.5  #include <QLabel>
    14.6  
    14.7 +#include <QComboBox>
    14.8 +#include <QPushButton>
    14.9 +#include <QGroupBox>
   14.10 +#include <QLabel>
   14.11 +
   14.12 +
   14.13  #include "findwidget.h"
   14.14  
   14.15  
   14.16 -extern QString vymName;
   14.17  extern QString iconPath;
   14.18  
   14.19  FindWidget::FindWidget(QWidget *)
    15.1 --- a/findwidget.h	Thu Feb 25 11:03:52 2010 +0000
    15.2 +++ b/findwidget.h	Tue Mar 02 13:59:19 2010 +0000
    15.3 @@ -1,12 +1,11 @@
    15.4  #ifndef FINDWIDGET_H 
    15.5  #define FINDWIDGET_H
    15.6  
    15.7 -#include <QComboBox>
    15.8 -#include <QPushButton>
    15.9 -#include <QGroupBox>
   15.10 -#include <QLayout>
   15.11 -#include <QLabel>
   15.12 +#include <QWidget>
   15.13  
   15.14 +class QGroupBox;
   15.15 +class QComboBox;
   15.16 +class QPushButton;
   15.17  
   15.18  class FindWidget: public QWidget
   15.19  {
    16.1 --- a/mainwindow.cpp	Thu Feb 25 11:03:52 2010 +0000
    16.2 +++ b/mainwindow.cpp	Tue Mar 02 13:59:19 2010 +0000
    16.3 @@ -11,6 +11,7 @@
    16.4  #include "exportoofiledialog.h"
    16.5  #include "exports.h"
    16.6  #include "file.h"
    16.7 +#include "findresultwidget.h"
    16.8  #include "flagrow.h"
    16.9  #include "historywindow.h"
   16.10  #include "imports.h"
   16.11 @@ -126,6 +127,14 @@
   16.12  	browserPID=new qint64;
   16.13  	*browserPID=0;
   16.14  
   16.15 +	// Dock widgets //FIXME-2 testing...
   16.16 +
   16.17 +	FindResultWidget *findResultWidget=new FindResultWidget;
   16.18 +	QDockWidget *dw= new QDockWidget ("Dock Widget",this);
   16.19 +	dw->setWidget (findResultWidget);
   16.20 +	dw->hide();
   16.21 +	addDockWidget (Qt::RightDockWidgetArea,dw);
   16.22 +
   16.23  	// Satellite windows //////////////////////////////////////////
   16.24  	// history window
   16.25  	historyWindow=new HistoryWindow();
   16.26 @@ -1073,7 +1082,7 @@
   16.27  
   16.28  	a= new QAction(QPixmap(iconPath+"formatcolorbranch.png"), tr( "Color &branch","Edit menu" ), this);
   16.29  	a->setStatusTip ( tr( "Color branch" ) );
   16.30 -	a->setShortcut (Qt::CTRL + Qt::Key_B);
   16.31 +	a->setShortcut (Qt::CTRL + Qt::Key_B + Qt::SHIFT);
   16.32  	connect( a, SIGNAL( triggered() ), this, SLOT( formatColorBranch() ) );
   16.33  	a->setEnabled (false);
   16.34  	a->addTo( tb );
   16.35 @@ -1083,7 +1092,7 @@
   16.36  
   16.37  	a= new QAction(QPixmap(iconPath+"formatcolorsubtree.png"), tr( "Color sub&tree","Edit menu" ), this);
   16.38  	a->setStatusTip ( tr( "Color Subtree" ));
   16.39 -	//FIXME-2 switch back to that a->setShortcut (Qt::CTRL + Qt::Key_T);	// Color subtree
   16.40 +	a->setShortcut (Qt::CTRL + Qt::Key_B);	// Color subtree
   16.41  	connect( a, SIGNAL( triggered() ), this, SLOT( formatColorSubtree() ) );
   16.42  	a->setEnabled (false);
   16.43  	formatMenu->addAction (a);
    17.1 --- a/process.cpp	Thu Feb 25 11:03:52 2010 +0000
    17.2 +++ b/process.cpp	Tue Mar 02 13:59:19 2010 +0000
    17.3 @@ -1,5 +1,10 @@
    17.4  #include "process.h"
    17.5  
    17.6 +#include <QMessageBox>
    17.7 +#include <QDebug>
    17.8 +
    17.9 +extern bool debug;
   17.10 +
   17.11  /////////////////////////////////////////////////////////////////
   17.12  // Process
   17.13  /////////////////////////////////////////////////////////////////
   17.14 @@ -22,6 +27,40 @@
   17.15  	stdOut="";
   17.16  }
   17.17  
   17.18 +void Process::runScript(QString spath, QString fpath)
   17.19 +{
   17.20 +	spath.replace ("%f",fpath);
   17.21 +	QStringList args=QStringList::split (' ',spath,false);
   17.22 +	spath=args.takeFirst();
   17.23 +		
   17.24 +	if (debug)
   17.25 +		qDebug()<<"Process::runScript : " + spath+" "+args.join(" ");	
   17.26 +
   17.27 +	start (spath,args);
   17.28 +	if (!waitForStarted() )
   17.29 +	{
   17.30 +		QMessageBox::critical( 0, tr( "Critical Error" ),
   17.31 +					   tr("Could not start %1").arg(spath) );
   17.32 +	} else
   17.33 +	{
   17.34 +		if (!waitForFinished())
   17.35 +			QMessageBox::critical( 0, tr( "Critical Error" ),
   17.36 +			   tr("%1 didn't exit normally").arg(spath) +
   17.37 +			   getErrout() );
   17.38 +	//	else
   17.39 +	//		if (exitStatus()>0) showOutput=true;
   17.40 +			
   17.41 +	}	
   17.42 +	/* FIXME-3	output for Process::runScript
   17.43 +	qDebug()<<readAllStandardOutput();
   17.44 +	qDebug()<<getStdout();
   17.45 +	qDebug()<<getErrout();
   17.46 +	addOutput ("\n");
   17.47 +	addOutput (getErrout());
   17.48 +	addOutput (getStdout());
   17.49 +	*/
   17.50 +}
   17.51 +
   17.52  void Process::readProcErrout()
   17.53  {
   17.54  	errOut+=readAllStandardError();
    18.1 --- a/process.h	Thu Feb 25 11:03:52 2010 +0000
    18.2 +++ b/process.h	Tue Mar 02 13:59:19 2010 +0000
    18.3 @@ -4,9 +4,6 @@
    18.4  #include <QProcess>
    18.5  #include <QString>
    18.6  
    18.7 -
    18.8 -using namespace std;
    18.9 -
   18.10  class Process:public QProcess
   18.11  {
   18.12  	Q_OBJECT
   18.13 @@ -14,9 +11,9 @@
   18.14      Process ();
   18.15  	~Process ();
   18.16  	void clear();
   18.17 +    void runScript( QString spath, QString fpath );
   18.18  	QString getErrout();
   18.19  	QString getStdout();
   18.20 -	
   18.21  
   18.22  public slots:
   18.23  	virtual void readProcErrout();
    19.1 --- a/settings.cpp	Thu Feb 25 11:03:52 2010 +0000
    19.2 +++ b/settings.cpp	Tue Mar 02 13:59:19 2010 +0000
    19.3 @@ -258,7 +258,7 @@
    19.4  					"setting",
    19.5  					attribut ("key",*itk) 
    19.6  					+attribut ("value",*itv)
    19.7 -				)+"\n";
    19.8 +				);
    19.9  		itp++;
   19.10  		itk++;
   19.11  		itv++;
    20.1 --- a/texteditor.cpp	Thu Feb 25 11:03:52 2010 +0000
    20.2 +++ b/texteditor.cpp	Tue Mar 02 13:59:19 2010 +0000
    20.3 @@ -1,6 +1,5 @@
    20.4  #include "texteditor.h"
    20.5  
    20.6 -#include <iostream>
    20.7  #include <cstdlib>
    20.8  #include <typeinfo>
    20.9  
   20.10 @@ -17,8 +16,6 @@
   20.11  
   20.12  extern bool debug;
   20.13  
   20.14 -using namespace std;
   20.15 -
   20.16  
   20.17  ///////////////////////////////////////////////////////////////////////
   20.18  ///////////////////////////////////////////////////////////////////////
    21.1 --- a/treeeditor.cpp	Thu Feb 25 11:03:52 2010 +0000
    21.2 +++ b/treeeditor.cpp	Tue Mar 02 13:59:19 2010 +0000
    21.3 @@ -3,9 +3,6 @@
    21.4  #include <QAction>
    21.5  #include <QRegExp>
    21.6  
    21.7 -#include <iostream>
    21.8 -using namespace std;
    21.9 -
   21.10  #include "vymmodel.h"
   21.11  
   21.12  ///////////////////////////////////////////////////////////////////////
   21.13 @@ -14,7 +11,7 @@
   21.14  {
   21.15  	model=m;
   21.16  
   21.17 -	// FIXME-2 use proxmodel
   21.18 +	// FIXME-3 use proxmodel
   21.19  	//proxyModel = new MySortFilterProxyModel(this);	
   21.20  	//setModel(proxyModel);
   21.21  	setModel(m);
    22.1 --- a/treemodel.cpp	Thu Feb 25 11:03:52 2010 +0000
    22.2 +++ b/treemodel.cpp	Tue Mar 02 13:59:19 2010 +0000
    22.3 @@ -1,8 +1,5 @@
    22.4  #include <QtGui>
    22.5  
    22.6 -#include <iostream>
    22.7 -using namespace std;
    22.8 -
    22.9  #include "attributeitem.h"
   22.10  #include "branchitem.h"
   22.11  #include "imageitem.h"
    23.1 --- a/version.h	Thu Feb 25 11:03:52 2010 +0000
    23.2 +++ b/version.h	Tue Mar 02 13:59:19 2010 +0000
    23.3 @@ -7,7 +7,7 @@
    23.4  #define __VYM_VERSION "1.13.0"
    23.5  //#define __VYM_CODENAME "Codename: RC-1"
    23.6  #define __VYM_CODENAME "Codename: development version, not for production!"
    23.7 -#define __VYM_BUILD_DATE "2010-02-22"
    23.8 +#define __VYM_BUILD_DATE "2010-02-26"
    23.9  
   23.10  
   23.11  bool checkVersion(const QString &);
    24.1 --- a/vym.pro	Thu Feb 25 11:03:52 2010 +0000
    24.2 +++ b/vym.pro	Tue Mar 02 13:59:19 2010 +0000
    24.3 @@ -51,6 +51,9 @@
    24.4  	extrainfodialog.h \
    24.5  	file.h \
    24.6  	findwidget.h \
    24.7 +	findresultwidget.h \
    24.8 +	findresultitem.h \
    24.9 +	findresultmodel.h \
   24.10  	flag.h \
   24.11  	flagobj.h \
   24.12  	flagrowobj.h \
   24.13 @@ -118,6 +121,9 @@
   24.14  	extrainfodialog.cpp \
   24.15  	file.cpp \
   24.16  	findwidget.cpp \
   24.17 +	findresultwidget.cpp \
   24.18 +	findresultitem.cpp \
   24.19 +	findresultmodel.cpp \
   24.20  	flag.cpp \
   24.21  	flagobj.cpp \
   24.22  	flagrow.cpp \
    25.1 --- a/vymmodel.cpp	Thu Feb 25 11:03:52 2010 +0000
    25.2 +++ b/vymmodel.cpp	Tue Mar 02 13:59:19 2010 +0000
    25.3 @@ -4258,14 +4258,21 @@
    25.4  	}
    25.5  }
    25.6  
    25.7 -void VymModel::exportHTML (const QString &dir, bool askForName)	//FIXME-2 own dialogue missing and also option to save settings in map
    25.8 -{
    25.9 -	ExportHTMLDialog dia(NULL);	
   25.10 +void VymModel::exportHTML (const QString &dir, bool useDialog)	
   25.11 +{
   25.12 +	ExportHTML ex (this);
   25.13 +	ex.setDir (dir);
   25.14 +	ex.doExport(useDialog);
   25.15 +}
   25.16 +
   25.17 +void VymModel::exportXHTML (const QString &dir, bool askForName)
   25.18 +{
   25.19 +	ExportXHTMLDialog dia(NULL);
   25.20  	dia.setFilePath (filePath );
   25.21  	dia.setMapName (mapName );
   25.22  	dia.readSettings();
   25.23  	if (dir!="") dia.setDir (dir);
   25.24 -	QDir d;
   25.25 +
   25.26  	bool ok=true;
   25.27  	
   25.28  	if (askForName)
   25.29 @@ -4274,7 +4281,7 @@
   25.30  			ok=false;
   25.31  		else	
   25.32  		{
   25.33 -			d=dia.getDir();
   25.34 +			QDir d (dia.getDir());
   25.35  			// Check, if warnings should be used before overwriting
   25.36  			// the output directory
   25.37  			if (d.exists() && d.count()>0)
   25.38 @@ -4285,75 +4292,21 @@
   25.39  					"The directory %1 is not empty.\n"
   25.40  					"Do you risk to overwrite some of its contents?").arg(d.path() ));
   25.41  				warn.setCaption("Warning: Directory not empty");
   25.42 -				warn.setShowAgainName("mainwindow/export-XML-overwrite-dir");
   25.43 +				warn.setShowAgainName("mainwindow/overwrite-dir-xhtml");
   25.44  
   25.45  				if (warn.exec()!=QDialog::Accepted) ok=false;
   25.46  			}
   25.47  		}	
   25.48  	}
   25.49 +
   25.50  	if (ok)
   25.51  	{
   25.52 -		// Hide stuff during export, if settings want this
   25.53 -		setExportMode (true);
   25.54 -
   25.55 -		ExportHTML ex (this);
   25.56 -		ex.setFile (d.path()+"/"+mapName+".html");
   25.57 -		//qDebug()<< "VM::exportHTML  writing "<<ex.getFile();
   25.58 -		ex.setCSSPath(dia.getCSSPath() );
   25.59 -		ex.doExport();
   25.60 -		setExportMode (false);
   25.61 -
   25.62 -		//dia.doExport(mapName );
   25.63 +		exportXML (dia.getDir(),false );
   25.64 +		dia.doExport(mapName );
   25.65  		//if (dia.hasChanged()) setChanged();
   25.66 -
   25.67 -		// Write image, too
   25.68 -		exportImage (d.path()+"/"+mapName+".png",false,"PNG");
   25.69 -
   25.70  	}
   25.71  }
   25.72  
   25.73 -void VymModel::exportXHTML (const QString &dir, bool askForName)
   25.74 -{
   25.75 -			ExportXHTMLDialog dia(NULL);
   25.76 -			dia.setFilePath (filePath );
   25.77 -			dia.setMapName (mapName );
   25.78 -			dia.readSettings();
   25.79 -			if (dir!="") dia.setDir (dir);
   25.80 -
   25.81 -			bool ok=true;
   25.82 -			
   25.83 -			if (askForName)
   25.84 -			{
   25.85 -				if (dia.exec()!=QDialog::Accepted) 
   25.86 -					ok=false;
   25.87 -				else	
   25.88 -				{
   25.89 -					QDir d (dia.getDir());
   25.90 -					// Check, if warnings should be used before overwriting
   25.91 -					// the output directory
   25.92 -					if (d.exists() && d.count()>0)
   25.93 -					{
   25.94 -						WarningDialog warn;
   25.95 -						warn.showCancelButton (true);
   25.96 -						warn.setText(QString(
   25.97 -							"The directory %1 is not empty.\n"
   25.98 -							"Do you risk to overwrite some of its contents?").arg(d.path() ));
   25.99 -						warn.setCaption("Warning: Directory not empty");
  25.100 -						warn.setShowAgainName("mainwindow/overwrite-dir-xhtml");
  25.101 -
  25.102 -						if (warn.exec()!=QDialog::Accepted) ok=false;
  25.103 -					}
  25.104 -				}	
  25.105 -			}
  25.106 -
  25.107 -			if (ok)
  25.108 -			{
  25.109 -				exportXML (dia.getDir(),false );
  25.110 -				dia.doExport(mapName );
  25.111 -				//if (dia.hasChanged()) setChanged();
  25.112 -			}
  25.113 -}
  25.114 -
  25.115  void VymModel::exportOOPresentation(const QString &fn, const QString &cf)
  25.116  {
  25.117  	ExportOO ex;
  25.118 @@ -4695,7 +4648,7 @@
  25.119  }
  25.120  
  25.121  
  25.122 -void VymModel::animate()	//FIXME-2 animation causes flicker after cut/undo cut ?!?
  25.123 +void VymModel::animate()	
  25.124  {
  25.125  	animationTimer->stop();
  25.126  	BranchObj *bo;
  25.127 @@ -4724,7 +4677,6 @@
  25.128  
  25.129  void VymModel::startAnimation(BranchObj *bo, const QPointF &start, const QPointF &dest)
  25.130  {
  25.131 -	qDebug()<<"Start animation for "<<bo->getTreeItem()<<getHeading();
  25.132  	if (start==dest) return;
  25.133  	if (bo && bo->getTreeItem()->depth()>0) 
  25.134  	{
    26.1 --- a/vymmodel.h	Thu Feb 25 11:03:52 2010 +0000
    26.2 +++ b/vymmodel.h	Tue Mar 02 13:59:19 2010 +0000
    26.3 @@ -447,7 +447,7 @@
    26.4  	void exportASCII (QString fname="",bool askForName=true);  
    26.5  
    26.6  	/*! Export as HTML to directory */
    26.7 -    void exportHTML(const QString& dir="", bool askForName=true);	
    26.8 +    void exportHTML(const QString& dir="", bool useDialog=true);	
    26.9      void exportXHTML(const QString& dir="", bool askForName=true);	
   26.10  
   26.11      /*! Export as OpenOfficeOrg presentation */
    27.1 --- a/vymview.cpp	Thu Feb 25 11:03:52 2010 +0000
    27.2 +++ b/vymview.cpp	Tue Mar 02 13:59:19 2010 +0000
    27.3 @@ -1,8 +1,5 @@
    27.4  #include "vymview.h"
    27.5  
    27.6 -#include <iostream>
    27.7 -using namespace std;
    27.8 -
    27.9  #include "branchitem.h"
   27.10  #include "findwidget.h"
   27.11  #include "mainwindow.h"
    28.1 --- a/xlinkitem.cpp	Thu Feb 25 11:03:52 2010 +0000
    28.2 +++ b/xlinkitem.cpp	Tue Mar 02 13:59:19 2010 +0000
    28.3 @@ -6,9 +6,6 @@
    28.4  #include "vymmodel.h"
    28.5  #include "xlinkobj.h"
    28.6  
    28.7 -#include <iostream>
    28.8 -using namespace std;
    28.9 -
   28.10  /////////////////////////////////////////////////////////////////
   28.11  // XLinkItem
   28.12  /////////////////////////////////////////////////////////////////
   28.13 @@ -22,12 +19,16 @@
   28.14  
   28.15  XLinkItem::~XLinkItem ()
   28.16  {
   28.17 -	cout << "Destr XLinkItem "<<this<<"  lmo="<<lmo<<endl;
   28.18 -	if (lmo){cout <<" calling delete\n"; delete (lmo);}
   28.19 +	//cout << "Destr XLinkItem "<<this<<"  lmo="<<lmo<<endl;
   28.20 +	if (lmo)
   28.21 +	{
   28.22 +		//cout <<" calling delete (lmo)\n"; 
   28.23 +		delete (lmo);
   28.24 +	}
   28.25  	if (partnerXLink)
   28.26  	{
   28.27  		// Also delete partner 
   28.28 -		cout << "  deleting partner="<<partnerXLink<<endl;
   28.29 +		//cout << "  deleting partner="<<partnerXLink<<endl;
   28.30  		partnerXLink->partnerXLink=NULL;	// avoid endless recusion
   28.31  		model->deleteItem (partnerXLink);
   28.32  	}
    29.1 --- a/xsltproc.cpp	Thu Feb 25 11:03:52 2010 +0000
    29.2 +++ b/xsltproc.cpp	Tue Mar 02 13:59:19 2010 +0000
    29.3 @@ -1,6 +1,8 @@
    29.4  #include "xsltproc.h"
    29.5  
    29.6  #include <iostream>
    29.7 +using namespace std;
    29.8 +
    29.9  #include <qmessagebox.h>
   29.10  
   29.11  #include "process.h"