#include "QFramework/TQPresenter.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQPathManager.h"
#include <fstream>

#define _DEBUG_

#include "QFramework/TQLibrary.h"


////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQPresenter:
//
// The abstract TQPresenter class provides a base class for all types
// of data visualization appliances by providing extensive handling of
// configurations for cuts and processes in a physics analysis. The
// TQPlotter, TQCutflowPrinter and TQCutflowPlotter class inherit from
// TQPresenter.
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQPresenter)

TQPresenter::TQPresenter() : 
fReader(NULL),
  fOwnerOfReader(false),
  fNormalizationInfo(NULL),
  fCuts(new TObjArray()),
  fProcesses(new TObjArray()),
  fSystematics(new TQFolder("systematics"))
{
  // default constructor
  this->fCuts->SetOwner(true);
  this->fProcesses->SetOwner(true);
}

TQPresenter::TQPresenter(TQSampleDataReader* reader) : 
  fReader(reader),
  fOwnerOfReader(false),
  fNormalizationInfo(NULL),
  fCuts(new TObjArray()),
  fProcesses(new TObjArray()),
  fSystematics(new TQFolder("systematics"))
{
  // default constructor
  this->fCuts->SetOwner(true);
  this->fProcesses->SetOwner(true);
}

TQPresenter::TQPresenter(TQSampleFolder* samples) : 
  fReader(samples ? new TQSampleDataReader(samples) : NULL),
  fOwnerOfReader(samples),
  fNormalizationInfo(NULL),
  fCuts(new TObjArray()),
  fProcesses(new TObjArray()),
  fSystematics(new TQFolder("systematics"))
{
  // default constructor
  this->fCuts->SetOwner(true);
  this->fProcesses->SetOwner(true);
}

int TQPresenter::nProcesses() const{
  // return the number of currently listed processes
  return this->fProcesses->GetEntries();
}
  
int TQPresenter::nCuts() const{
  // return the number of currently listed cuts
  return this->fCuts->GetEntries();
}

std::vector<TString> TQPresenter::getProcessPaths(const TString& processFilter) const{
  // get a list of all individual paths accessed by this presenter
  std::vector<TString> paths;
  this->appendProcessPaths(processFilter,paths);
  return paths;
}

int TQPresenter::appendProcessPaths(const TString& processFilter, std::vector<TString>* paths) const{
  // append to a list all individual paths accessed by this presenter
  if(!paths) throw std::runtime_error("unable to append to NULL pointer!");
  return this->appendProcessPaths(processFilter,*paths);
}

int TQPresenter::appendProcessPaths(const TString& processFilter, std::vector<TString>& paths) const{
  // append to a list all individual paths accessed by this presenter
  TQTaggableIterator pitr(this->fProcesses);
  int i=0;
  while(pitr.hasNext()){
    TQNamedTaggable* process = pitr.readNext();
    if(!process) continue;
    if(TQStringUtils::matches(process->GetName(),processFilter)){
      paths.push_back(process->getTagStringDefault(".path",""));
      ++i;
    }
  }
  return i;
}

void TQPresenter::addCut (const TString& cutName, const TString& cutTitle, const TString& tags){
  // add a cut with the given name, title, and tags
  TQNamedTaggable* cut = new TQNamedTaggable(cutName);
  cut->SetTitle(cutTitle);
  cut->importTags(tags);
  cut->setTagString(".name",cutName);
  cut->setTagString(".title",cutTitle);
  this->fCuts->Add(cut);
}

void TQPresenter::addProcess(const TString& processName, const TString& processTitle, const TString& tags){
  // add a process with the given name, title, and tags
  TQNamedTaggable* process = new TQNamedTaggable(processName);
  process->SetTitle(processTitle);
  process->importTags(tags);
  process->setTagString(".path",processName);
  process->setTagString(".name",TQFolder::makeValidIdentifier(processName));
  process->setTagString(".title",processTitle);
  this->fProcesses->Add(process);
}

void TQPresenter::addCut (const TString& cutName, const TString& cutTitle, TQTaggable& tags){
  // add a cut with the given name, title, and tags
  TQNamedTaggable* cut = new TQNamedTaggable(cutName);
  cut->SetTitle(cutTitle);
  cut->importTags(tags);
  cut->setTagString(".name",cutName);
  cut->setTagString(".title",cutTitle);
  this->fCuts->Add(cut);
}

void TQPresenter::addProcess(const TString& processName, const TString& processTitle, TQTaggable& tags){
  // add a process with the given name, title, and tags
  TQNamedTaggable* process = new TQNamedTaggable(processName);
  process->SetTitle(processTitle);
  process->importTags(tags);
  process->setTagString(".path",processName);
  process->setTagString(".name",TQFolder::makeValidIdentifier(processName));
  process->setTagString(".title",processTitle);
  this->fProcesses->Add(process);
}

void TQPresenter::addCut (const TString& cutName, const TString& tags){
  // add a cut with the given name and tags
  TQNamedTaggable* cut = new TQNamedTaggable(cutName);
  cut->importTags(tags);
  if(cut->getNTags() < 1){
    cut->setTagString(".title",tags);
    cut->setName(tags);
  }
  cut->setTagString(".name",cutName);
  this->fCuts->Add(cut);
}

void TQPresenter::addProcess(const TString& processName, const TString& tags){
  // add a process with the given name and tags
  TQNamedTaggable* process = new TQNamedTaggable(processName);
  process->importTags(tags);
  process->setTagString(".name",TQFolder::makeValidIdentifier(processName));
  process->setTagString(".path",processName);
  this->fProcesses->Add(process);
}

void TQPresenter::addCut (const TString& cutName, TQTaggable& tags){
  // add a cut with the given name and tags
  TQNamedTaggable* cut = new TQNamedTaggable(cutName);
  cut->importTags(tags);
  cut->setTagString(".name",cutName);
  this->fCuts->Add(cut);
}

void TQPresenter::addProcess(const TString& processName, TQTaggable* tags){
  // add a process with the given name and tags
  TQNamedTaggable* process = new TQNamedTaggable(processName);
  process->importTags(tags);
  process->setTagString(".name",TQFolder::makeValidIdentifier(processName));
  process->setTagString(".path",processName);
  this->fProcesses->Add(process);
}

void TQPresenter::addProcess(const TString& processName, TQTaggable& tags){
  // add a process with the given name and tags
  TQNamedTaggable* process = new TQNamedTaggable(processName);
  process->importTags(tags);
  process->setTagString(".name",TQFolder::makeValidIdentifier(processName));
  process->setTagString(".path",processName);
  this->fProcesses->Add(process);
}

void TQPresenter::addCut (const TString& tags){
  // add a cut with the given tags
  TQNamedTaggable* cut = new TQNamedTaggable("");
  cut->importTags(tags);
  if(cut->getNTags() < 1){
    cut->setTagString(".name",tags);
    cut->setName(tags);
  }
  this->fCuts->Add(cut);
}

void TQPresenter::addProcess(const TString& tags){
  // add a process with the given tags
  TQNamedTaggable* process = new TQNamedTaggable("");
  process->importTags(tags);
  TString name;
  process->getTagString(".name",name);
  if(name.IsNull()){
    name=tags;
  }
  process->setName(name);
  this->fProcesses->Add(process);
}

void TQPresenter::addCut (TQTaggable& tags){
  // add a cut with the given tags
  TQNamedTaggable* cut = new TQNamedTaggable("");
  cut->importTags(tags);
  TString name;
  cut->getTagStringDefault(".name",name);
  if(name.IsNull()){
    name=tags.exportTagsAsString();
  }
  cut->setName(name);
  this->fCuts->Add(cut);
}

void TQPresenter::addProcess(TQTaggable& tags){
  // add a process with the given tags
  TString name = tags.getTagStringDefault(".name","");
  TQNamedTaggable* process = new TQNamedTaggable(name);
  process->importTags(tags);
  this->fProcesses->Add(process);
}

int TQPresenter::sanitizeProcesses() {
  // sanitize all processes 
  // this is a no-op function to be overwritten by derived classes
  // it should return the number of removed items
  return 0;
}

int TQPresenter::sanitizeCuts() {
  // sanitize all cuts 
  // this is a no-op function to be overwritten by derived classes
  // it should return the number of removed items
  return 0;
}

void TQPresenter::reset() {
  // reset everything
  this->resetProcesses();
  this->resetCuts();
  this->fSystematics->deleteAll();
}

void TQPresenter::resetCuts() {
  // reset all cuts
  this->fCuts->Clear();
}

void TQPresenter::resetProcesses() {
  // reset all processes
  this->fProcesses->Clear();
}

void TQPresenter::setReader(TQSampleDataReader * reader) {
  // set the sample data reader to be used to obtain data
  if (fReader && fOwnerOfReader) delete fReader;
  fReader = reader;
  fOwnerOfReader = false;
}

TQSampleDataReader * TQPresenter::getReader() {
  // get the data reader to be used to obtain data
  return fReader;
}

void TQPresenter::setSampleFolder(TQSampleFolder* sf){
  // set/change the base sample folder
  if(this->fReader && this->fOwnerOfReader){
    delete this->fReader;
  }
  if(sf){
    this->fReader = new TQSampleDataReader(sf);
    this->fOwnerOfReader = true;
  } else {
    this->fReader = NULL;
  } 
}

TQSampleFolder* TQPresenter::getSampleFolder(){
  // retrieve the base sample folder
  if(!this->fReader) return NULL;
  return this->fReader->getSampleFolder();
}

void TQPresenter::exportScheme(TQTaggable* tags){
  // exports the current scheme to some taggable object
  if(!tags) return;
  tags->importTags(this);
  TQTaggableIterator pitr(this->fProcesses);
  while(pitr.hasNext()){
    TQNamedTaggable* entry = pitr.readNext();
    if(!entry) continue;
    tags->importTagsWithPrefix(entry,TString::Format(".processes.%d.",pitr.getLastIndex()));
  }
  TQTaggableIterator citr(this->fCuts);
  while(citr.hasNext()){
    TQNamedTaggable* entry = citr.readNext();
    if(!entry) continue;
    tags->importTagsWithPrefix(entry,TString::Format(".cuts.%d.",citr.getLastIndex()));
  }
}

void TQPresenter::importScheme(TQTaggable* tags){
  // imports the scheme from the given taggable object
  if(!tags) return;
  this->reset();
  this->importTags(tags);
  this->removeTags(".processes.*");
  this->removeTags(".cuts.*");
  int idx = 0;
  TString name;
  while(tags->getTagString(TString::Format(".processes.%d..name",idx),name)){
		if(tags->getTagString(TString::Format(".processes.%d..name",idx),name)){
			TQNamedTaggable* process = new TQNamedTaggable(name);
			process->importTagsWithoutPrefix(tags,TString::Format(".processes.%d.",idx));
			this->fProcesses->Add(process);
			idx++;
		}
	}
	idx = 0;
  while(tags->getTagString(TString::Format(".cuts.%d..name",idx),name)){
    TQNamedTaggable* cut = new TQNamedTaggable(name);
    cut->importTagsWithoutPrefix(tags,TString::Format(".cuts.%d.",idx));
    this->fCuts->Add(cut);
    idx++;
  }
}

void TQPresenter::clearProcesses(){
  // remove all scheduled processes
  this->fProcesses->Clear();
}

void TQPresenter::clearCuts(){
  // remove all scheduled processes
  this->fCuts->Clear();
}

void TQPresenter::importSchemeFromPath(const TString& path){
  // imports the scheme from a folder at the given path
  if(!this->fReader || !this->fReader->getSampleFolder()) return;
  this->importScheme(this->fReader->getSampleFolder()->getFolder(path));
}

void TQPresenter::printProcesses(){
  // print all currently defined processes
  TQTaggableIterator itr(fProcesses);
  while(itr.hasNext()){
    TQNamedTaggable* tags = itr.readNext();
    if(!tags){
      std::cout << TQStringUtils::makeBoldYellow("<invalid NULL entry>") << std::endl;
      continue;
    } 
    std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::fixedWidth(tags->GetName(),30));
    std::cout << " ";
    std::cout << tags->exportTagsAsString();
    std::cout << std::endl;
  }
}


void TQPresenter::printCuts(){
  // print all currently defined processes
  TQTaggableIterator itr(fCuts);
  while(itr.hasNext()){
    TQNamedTaggable* tags = itr.readNext();
    if(!tags){
      std::cout << TQStringUtils::makeBoldYellow("<invalid NULL entry>") << std::endl;
      continue;
    } 
    std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::fixedWidth(tags->GetName(),30));
    std::cout << " ";
    std::cout << tags->exportTagsAsString();
    std::cout << std::endl;
  }
}

void TQPresenter::removeProcessesByName(const TString& nameFilter){
  // remove all processes matching the given name
  TQTaggableIterator itr(fProcesses);
  std::vector<TQNamedTaggable*> removals;
  while(itr.hasNext()){
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(TQStringUtils::matches(process->getTagStringDefault(".name",process->GetName()),nameFilter)){
      removals.push_back(process);
    }
  }
  for(size_t i=0; i<removals.size(); i++){
    fProcesses->Remove(removals[i]);
    delete removals[i];
  }
}

void TQPresenter::removeCutsByName(const TString& nameFilter){
  // remove all cuts matching the given name
  TQTaggableIterator itr(fCuts);
  std::vector<TQNamedTaggable*> removals;
  while(itr.hasNext()){
    TQNamedTaggable* cut = itr.readNext();
    if(!cut) continue;
    if(TQStringUtils::matches(cut->getTagStringDefault(".name",cut->GetName()),nameFilter)){
      removals.push_back(cut);
    }
  }
  for(size_t i=0; i<removals.size(); i++){
    fCuts->Remove(removals[i]);
    delete removals[i];
  }
}


int TQPresenter::importProcessesFromFile(const TString& fileName,const TString& tags){
  // read processes from a file - each line is interpreted as a TQTaggable string
  // text replacements are made from the given tags
  TQTaggable tmp(tags);
  return this->importProcessesFromFile(fileName,tmp);
}

int TQPresenter::importCutsFromFile(const TString& fileName, const TString& tags){
  // read cuts from a file - each line is interpreted as a TQTaggable string
  // text replacements are made from the given tags
  TQTaggable tmp(tags);
  return this->importCutsFromFile(fileName,tmp);
}

int TQPresenter::importProcessesFromFile(const TString& fileName,TQTaggable& tags){
  // read processes from a file - each line is interpreted as a TQTaggable string
  // text replacements are made from the given tags
  int retval = 0;
  std::vector<TString>* lines = TQStringUtils::readFileLines(TQPathManager::getPathManager()->findConfigPath(fileName).c_str());
  if(!lines){
    ERRORclass("unable to read file '%s'",fileName.Data());
    return 0;
  }
  // get list of tag lines
  for(size_t i=0; i<lines->size(); i++){
    TQNamedTaggable* thisTags = new TQNamedTaggable("");
    thisTags->importTags(tags.replaceInText(lines->at(i)));
    // TQSampleFolder being analyzed should have an identifier name, set by ".name" or ".path"
    // if neither are found (e.g. special), the line is processed standalone
    TString thisName = thisTags->getTagStringDefault(".name",thisTags->getTagStringDefault(".path",thisTags->GetName()));
    thisTags->SetName(thisName);
    // check if vline
    bool vline = thisName.EqualTo("|") || thisName.EqualTo("||");
    // check if a previous line specifying the process already exists
    TQNamedTaggable* processTags = !thisName.IsNull() ? this->getProcess(thisName) : nullptr;
    if (vline) {
      // vertical lines or special processes are always standalone
      this->fProcesses->Add(thisTags);
    } else if (processTags) {
      // tags specifying the same process are merged into one
      processTags->importTags(thisTags);
      delete thisTags;
    } else {
      // line is added standalone if process is new or not valid.
      this->fProcesses->Add(thisTags);
    }
    // count imported line
    retval++;
  }
  retval -= this->sanitizeProcesses();
  delete lines;
  return retval;
}

int TQPresenter::importCutsFromFile(const TString& fileName, TQTaggable& tags){
  // read cuts from a file - each line is interpreted as a TQTaggable string
  // text replacements are made from the given tags
  int retval = 0;
  std::vector<TString>* lines = TQStringUtils::readFileLines(fileName);
  if(!lines){
    ERRORclass("unable to read file '%s'",fileName.Data());
    return 0;
  }
  // get list of tag lines
  for(size_t i=0; i<lines->size(); i++){
    TQNamedTaggable* thisTags = new TQNamedTaggable("");
    thisTags->importTags(tags.replaceInText(lines->at(i)));
    // TQCut being processed an identifier name, set by ".name" or ".path"
    // if neither are found, the line is forcibly added standalone
    TString thisName = thisTags->getTagStringDefault(".name");
    thisTags->SetName(thisName);
    // check if hline
    bool hline = thisName.EqualTo("|") || thisName.EqualTo("||");
    // check if a previous line specifying the cut already exists
    TQNamedTaggable* cutTags = !thisName.IsNull() ? this->getCut(thisName) : nullptr;
    if (hline) {
      // hlines are always added standalone
      this->fCuts->Add(thisTags);
    } else if (cutTags) {
      // check if tags specifying cut already exists, merge into one.
      cutTags->importTags(thisTags);
      delete thisTags;
    } else {
      // line is added standalone
      this->fCuts->Add(thisTags);
    }
    // count imported line
    retval++;
  }
  retval -= this->sanitizeCuts();
  delete lines;
  return retval;
}

int TQPresenter::exportProcessesToFile(const TString& fileName,const TString& tags){
  // write processes to a file - each line is formatted as a TQTaggable string
  TQTaggable tmp(tags);
  return this->exportProcessesToFile(fileName,tmp);
}

int TQPresenter::exportCutsToFile(const TString& fileName, const TString& tags){
  // write cuts to a file - each line is formatted as a TQTaggable string
  TQTaggable tmp(tags);
  return this->exportCutsToFile(fileName,tmp);
}

int TQPresenter::exportProcessesToFile(const TString& fileName,TQTaggable&/*tags*/){
  // write processes to a file - each line is formatted as a TQTaggable string
  TQTaggableIterator itr(this->fProcesses);
  std::ofstream ofile(fileName);
  if(!ofile.is_open()) return -1;
  int retval = 0;
  while(itr.hasNext()){
    TQTaggable* process = itr.readNext();
    if(!process) continue;
    ofile << process->exportTagsAsString() << std::endl;
    retval++;
  }
  ofile.close();
  return retval;
}

int TQPresenter::exportCutsToFile(const TString& fileName, TQTaggable&/*tags*/){
  // write cuts to a file - each line is formatted as a TQTaggable string
  TQTaggableIterator itr(this->fCuts);
  std::ofstream ofile(fileName);
  if(!ofile.is_open()) return -1;
  int retval = 0;
  while(itr.hasNext()){
    TQTaggable* cut = itr.readNext();
    if(!cut) continue;
    ofile << cut->exportTagsAsString() << std::endl;
    retval++;
  }
  ofile.close();
  return retval;
}

TQPresenter::~TQPresenter(){
  // default destructor
  delete this->fProcesses;
  delete this->fCuts;
  if(this->fOwnerOfReader) delete this->fReader;
  delete this->fSystematics;
}


TQFolder* TQPresenter::setNormalizationInfo(const TString& path){
  // set the normalization info folder
  if(this->fReader && this->fReader->getSampleFolder()){
    this->fNormalizationInfo = this->fReader->getSampleFolder()->getFolder(path);
  }
  return this->fNormalizationInfo;
}

void TQPresenter::setNormalizationInfo(TQFolder* f){
  // set the normalization info folder
  this->fNormalizationInfo = f;
}

TQFolder* TQPresenter::getNormalizationInfo(){
  // retrieve the normalization info folder
  return this->fNormalizationInfo;
}

const TQNamedTaggable* TQPresenter::getCutConst(const TString& cutName) const{
  // get the title of a cut
  TQTaggableIterator itr(this->fCuts);
  while(itr.hasNext()){
    TQNamedTaggable* cut = itr.readNext();
    if(!cut) continue;
    if(!TQStringUtils::matches(cut->GetName(),cutName)) continue;
    return cut;
  }
  return NULL;
}

TQNamedTaggable* TQPresenter::getCut(const TString& cutName){
  // get the title of a cut
  TQTaggableIterator itr(this->fCuts);
  while(itr.hasNext()){
    TQNamedTaggable* cut = itr.readNext();
    if(!cut) continue;
    if(!TQStringUtils::matches(cut->GetName(),cutName)) continue;
    return cut;
  }
  return NULL;
}

TString TQPresenter::getCutTitle(const TString& cutName) const{
  // get the title of a cut
  TQNamedTaggable* cut = const_cast<TQNamedTaggable*>(this->getCutConst(cutName));
  if(cut) return cut->getTagStringDefault(".title",cut->GetTitle());
  return "";
}

bool TQPresenter::hasProcess(const TString& processName) const{
  // return true if a process exists
  return (bool)(this->getProcessConst(processName));
}

bool TQPresenter::hasCut(const TString& cutName) const{
  // return true if a process exists
  return (bool)(this->getCutConst(cutName));
}


const TQNamedTaggable* TQPresenter::getProcessConst(const TString& processName) const{
  // get a process
  TQTaggableIterator itr(this->fProcesses);
  while(itr.hasNext()){
    const TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(!TQStringUtils::matches(process->GetName(),processName)) continue;
    return process;
  }
  return NULL;
}

TQNamedTaggable* TQPresenter::getProcess(const TString& processName){
  // get a process
  TQTaggableIterator itr(this->fProcesses);
  while(itr.hasNext()){
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(!TQStringUtils::matches(process->GetName(),processName)) continue;
    return process;
  }
  return NULL;
}
 
TString TQPresenter::getProcessTitle(const TString& processName) const{
  // get the title of a process
  TQNamedTaggable* process = const_cast<TQNamedTaggable*>(this->getProcessConst(processName));
  if(process) return process->getTagStringDefault(".title",process->GetTitle());
  return "";
}

TString TQPresenter::getCutTags(const TString& cutName) const{
  // get the tags of a cut
  TQNamedTaggable* cut = const_cast<TQNamedTaggable*>(this->getCutConst(cutName));
  if(cut) return cut->exportTagsAsString();
  return "";
}

TString TQPresenter::getProcessTags(const TString& processName) const{
  // get the tags of a process
  TQNamedTaggable* process = const_cast<TQNamedTaggable*>(this->getProcessConst(processName));
  if(process) return process->exportTagsAsString();
  return "";
}

TCollection* TQPresenter::getListOfProcessNames() const{
  // get the list of process names
  TList * retval = new TList();
  TQTaggableIterator itr(this->fProcesses);
  while(itr.hasNext()){
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    retval->Add(new TObjString(process->getTagStringDefault(".name",process->GetName())));
  }
  return retval;
}

TCollection* TQPresenter::getListOfCutNames() const{
  // get the list of process names
  TList * retval = new TList();
  TQTaggableIterator itr(this->fCuts);
  while(itr.hasNext()){
    TQNamedTaggable* cut = itr.readNext();
    if(!cut) continue;
    retval->Add(new TObjString(cut->getTagStringDefault(".name",cut->GetName())));
  }
  return retval;
}

TString TQPresenter::getProcessPath(const TString& processName) const{
  // get the tags of a process
  TQTaggableIterator itr(this->fProcesses);
  while(itr.hasNext()){
    TQNamedTaggable* process = itr.readNext();
    if(!process) continue;
    if(TQStringUtils::matches(process->GetName(),processName))
      return process->getTagStringDefault(".path","");
  }
  return "";
}

bool TQPresenter::loadSystematics(const TString& path, const TString& id){
  // load a systematics file and save the contents under the given ID
  TString importPath(path+">>::"+id);
  return this->loadSystematics(importPath);
}

bool TQPresenter::loadSystematics(TQFolder* f){
  // add a systematics folder under the given ID
  this->fSystematics->addObject(f->copy());
  return true;
}

bool TQPresenter::loadSystematics(const TString& importPath){
  // load a systematics file and save the contents under the given ID
  bool retval = this->fSystematics->importObject(importPath);
  if(!retval) WARNclass("unable to load systematics folder from '%s'",importPath.Data());
  return retval;
}

TQFolder* TQPresenter::getSystematics(const TString& id){
	// obtain a systematics TQFolder by its ID string
  return this->fSystematics->getFolder(id);
}

int TQPresenter::importProcesses(const TQPresenter* other){
  // import processes from another instance
  int i=0;
  TQTaggableIterator itr(other->fProcesses);
  while(itr.hasNext()){
    TQNamedTaggable* tags = itr.readNext();
    this->fProcesses->Add(new TQNamedTaggable(tags));
    i++;
  }
  return i;
}


int TQPresenter::importCuts(const TQPresenter* other){
  // import processes from another instance
  int i=0;
  TQTaggableIterator itr(other->fCuts);
  while(itr.hasNext()){
    TQNamedTaggable* tags = itr.readNext();
    this->fCuts->Add(new TQNamedTaggable(tags));
    i++;
  }
  return i;
}

 TQPresenter.cxx:1
 TQPresenter.cxx:2
 TQPresenter.cxx:3
 TQPresenter.cxx:4
 TQPresenter.cxx:5
 TQPresenter.cxx:6
 TQPresenter.cxx:7
 TQPresenter.cxx:8
 TQPresenter.cxx:9
 TQPresenter.cxx:10
 TQPresenter.cxx:11
 TQPresenter.cxx:12
 TQPresenter.cxx:13
 TQPresenter.cxx:14
 TQPresenter.cxx:15
 TQPresenter.cxx:16
 TQPresenter.cxx:17
 TQPresenter.cxx:18
 TQPresenter.cxx:19
 TQPresenter.cxx:20
 TQPresenter.cxx:21
 TQPresenter.cxx:22
 TQPresenter.cxx:23
 TQPresenter.cxx:24
 TQPresenter.cxx:25
 TQPresenter.cxx:26
 TQPresenter.cxx:27
 TQPresenter.cxx:28
 TQPresenter.cxx:29
 TQPresenter.cxx:30
 TQPresenter.cxx:31
 TQPresenter.cxx:32
 TQPresenter.cxx:33
 TQPresenter.cxx:34
 TQPresenter.cxx:35
 TQPresenter.cxx:36
 TQPresenter.cxx:37
 TQPresenter.cxx:38
 TQPresenter.cxx:39
 TQPresenter.cxx:40
 TQPresenter.cxx:41
 TQPresenter.cxx:42
 TQPresenter.cxx:43
 TQPresenter.cxx:44
 TQPresenter.cxx:45
 TQPresenter.cxx:46
 TQPresenter.cxx:47
 TQPresenter.cxx:48
 TQPresenter.cxx:49
 TQPresenter.cxx:50
 TQPresenter.cxx:51
 TQPresenter.cxx:52
 TQPresenter.cxx:53
 TQPresenter.cxx:54
 TQPresenter.cxx:55
 TQPresenter.cxx:56
 TQPresenter.cxx:57
 TQPresenter.cxx:58
 TQPresenter.cxx:59
 TQPresenter.cxx:60
 TQPresenter.cxx:61
 TQPresenter.cxx:62
 TQPresenter.cxx:63
 TQPresenter.cxx:64
 TQPresenter.cxx:65
 TQPresenter.cxx:66
 TQPresenter.cxx:67
 TQPresenter.cxx:68
 TQPresenter.cxx:69
 TQPresenter.cxx:70
 TQPresenter.cxx:71
 TQPresenter.cxx:72
 TQPresenter.cxx:73
 TQPresenter.cxx:74
 TQPresenter.cxx:75
 TQPresenter.cxx:76
 TQPresenter.cxx:77
 TQPresenter.cxx:78
 TQPresenter.cxx:79
 TQPresenter.cxx:80
 TQPresenter.cxx:81
 TQPresenter.cxx:82
 TQPresenter.cxx:83
 TQPresenter.cxx:84
 TQPresenter.cxx:85
 TQPresenter.cxx:86
 TQPresenter.cxx:87
 TQPresenter.cxx:88
 TQPresenter.cxx:89
 TQPresenter.cxx:90
 TQPresenter.cxx:91
 TQPresenter.cxx:92
 TQPresenter.cxx:93
 TQPresenter.cxx:94
 TQPresenter.cxx:95
 TQPresenter.cxx:96
 TQPresenter.cxx:97
 TQPresenter.cxx:98
 TQPresenter.cxx:99
 TQPresenter.cxx:100
 TQPresenter.cxx:101
 TQPresenter.cxx:102
 TQPresenter.cxx:103
 TQPresenter.cxx:104
 TQPresenter.cxx:105
 TQPresenter.cxx:106
 TQPresenter.cxx:107
 TQPresenter.cxx:108
 TQPresenter.cxx:109
 TQPresenter.cxx:110
 TQPresenter.cxx:111
 TQPresenter.cxx:112
 TQPresenter.cxx:113
 TQPresenter.cxx:114
 TQPresenter.cxx:115
 TQPresenter.cxx:116
 TQPresenter.cxx:117
 TQPresenter.cxx:118
 TQPresenter.cxx:119
 TQPresenter.cxx:120
 TQPresenter.cxx:121
 TQPresenter.cxx:122
 TQPresenter.cxx:123
 TQPresenter.cxx:124
 TQPresenter.cxx:125
 TQPresenter.cxx:126
 TQPresenter.cxx:127
 TQPresenter.cxx:128
 TQPresenter.cxx:129
 TQPresenter.cxx:130
 TQPresenter.cxx:131
 TQPresenter.cxx:132
 TQPresenter.cxx:133
 TQPresenter.cxx:134
 TQPresenter.cxx:135
 TQPresenter.cxx:136
 TQPresenter.cxx:137
 TQPresenter.cxx:138
 TQPresenter.cxx:139
 TQPresenter.cxx:140
 TQPresenter.cxx:141
 TQPresenter.cxx:142
 TQPresenter.cxx:143
 TQPresenter.cxx:144
 TQPresenter.cxx:145
 TQPresenter.cxx:146
 TQPresenter.cxx:147
 TQPresenter.cxx:148
 TQPresenter.cxx:149
 TQPresenter.cxx:150
 TQPresenter.cxx:151
 TQPresenter.cxx:152
 TQPresenter.cxx:153
 TQPresenter.cxx:154
 TQPresenter.cxx:155
 TQPresenter.cxx:156
 TQPresenter.cxx:157
 TQPresenter.cxx:158
 TQPresenter.cxx:159
 TQPresenter.cxx:160
 TQPresenter.cxx:161
 TQPresenter.cxx:162
 TQPresenter.cxx:163
 TQPresenter.cxx:164
 TQPresenter.cxx:165
 TQPresenter.cxx:166
 TQPresenter.cxx:167
 TQPresenter.cxx:168
 TQPresenter.cxx:169
 TQPresenter.cxx:170
 TQPresenter.cxx:171
 TQPresenter.cxx:172
 TQPresenter.cxx:173
 TQPresenter.cxx:174
 TQPresenter.cxx:175
 TQPresenter.cxx:176
 TQPresenter.cxx:177
 TQPresenter.cxx:178
 TQPresenter.cxx:179
 TQPresenter.cxx:180
 TQPresenter.cxx:181
 TQPresenter.cxx:182
 TQPresenter.cxx:183
 TQPresenter.cxx:184
 TQPresenter.cxx:185
 TQPresenter.cxx:186
 TQPresenter.cxx:187
 TQPresenter.cxx:188
 TQPresenter.cxx:189
 TQPresenter.cxx:190
 TQPresenter.cxx:191
 TQPresenter.cxx:192
 TQPresenter.cxx:193
 TQPresenter.cxx:194
 TQPresenter.cxx:195
 TQPresenter.cxx:196
 TQPresenter.cxx:197
 TQPresenter.cxx:198
 TQPresenter.cxx:199
 TQPresenter.cxx:200
 TQPresenter.cxx:201
 TQPresenter.cxx:202
 TQPresenter.cxx:203
 TQPresenter.cxx:204
 TQPresenter.cxx:205
 TQPresenter.cxx:206
 TQPresenter.cxx:207
 TQPresenter.cxx:208
 TQPresenter.cxx:209
 TQPresenter.cxx:210
 TQPresenter.cxx:211
 TQPresenter.cxx:212
 TQPresenter.cxx:213
 TQPresenter.cxx:214
 TQPresenter.cxx:215
 TQPresenter.cxx:216
 TQPresenter.cxx:217
 TQPresenter.cxx:218
 TQPresenter.cxx:219
 TQPresenter.cxx:220
 TQPresenter.cxx:221
 TQPresenter.cxx:222
 TQPresenter.cxx:223
 TQPresenter.cxx:224
 TQPresenter.cxx:225
 TQPresenter.cxx:226
 TQPresenter.cxx:227
 TQPresenter.cxx:228
 TQPresenter.cxx:229
 TQPresenter.cxx:230
 TQPresenter.cxx:231
 TQPresenter.cxx:232
 TQPresenter.cxx:233
 TQPresenter.cxx:234
 TQPresenter.cxx:235
 TQPresenter.cxx:236
 TQPresenter.cxx:237
 TQPresenter.cxx:238
 TQPresenter.cxx:239
 TQPresenter.cxx:240
 TQPresenter.cxx:241
 TQPresenter.cxx:242
 TQPresenter.cxx:243
 TQPresenter.cxx:244
 TQPresenter.cxx:245
 TQPresenter.cxx:246
 TQPresenter.cxx:247
 TQPresenter.cxx:248
 TQPresenter.cxx:249
 TQPresenter.cxx:250
 TQPresenter.cxx:251
 TQPresenter.cxx:252
 TQPresenter.cxx:253
 TQPresenter.cxx:254
 TQPresenter.cxx:255
 TQPresenter.cxx:256
 TQPresenter.cxx:257
 TQPresenter.cxx:258
 TQPresenter.cxx:259
 TQPresenter.cxx:260
 TQPresenter.cxx:261
 TQPresenter.cxx:262
 TQPresenter.cxx:263
 TQPresenter.cxx:264
 TQPresenter.cxx:265
 TQPresenter.cxx:266
 TQPresenter.cxx:267
 TQPresenter.cxx:268
 TQPresenter.cxx:269
 TQPresenter.cxx:270
 TQPresenter.cxx:271
 TQPresenter.cxx:272
 TQPresenter.cxx:273
 TQPresenter.cxx:274
 TQPresenter.cxx:275
 TQPresenter.cxx:276
 TQPresenter.cxx:277
 TQPresenter.cxx:278
 TQPresenter.cxx:279
 TQPresenter.cxx:280
 TQPresenter.cxx:281
 TQPresenter.cxx:282
 TQPresenter.cxx:283
 TQPresenter.cxx:284
 TQPresenter.cxx:285
 TQPresenter.cxx:286
 TQPresenter.cxx:287
 TQPresenter.cxx:288
 TQPresenter.cxx:289
 TQPresenter.cxx:290
 TQPresenter.cxx:291
 TQPresenter.cxx:292
 TQPresenter.cxx:293
 TQPresenter.cxx:294
 TQPresenter.cxx:295
 TQPresenter.cxx:296
 TQPresenter.cxx:297
 TQPresenter.cxx:298
 TQPresenter.cxx:299
 TQPresenter.cxx:300
 TQPresenter.cxx:301
 TQPresenter.cxx:302
 TQPresenter.cxx:303
 TQPresenter.cxx:304
 TQPresenter.cxx:305
 TQPresenter.cxx:306
 TQPresenter.cxx:307
 TQPresenter.cxx:308
 TQPresenter.cxx:309
 TQPresenter.cxx:310
 TQPresenter.cxx:311
 TQPresenter.cxx:312
 TQPresenter.cxx:313
 TQPresenter.cxx:314
 TQPresenter.cxx:315
 TQPresenter.cxx:316
 TQPresenter.cxx:317
 TQPresenter.cxx:318
 TQPresenter.cxx:319
 TQPresenter.cxx:320
 TQPresenter.cxx:321
 TQPresenter.cxx:322
 TQPresenter.cxx:323
 TQPresenter.cxx:324
 TQPresenter.cxx:325
 TQPresenter.cxx:326
 TQPresenter.cxx:327
 TQPresenter.cxx:328
 TQPresenter.cxx:329
 TQPresenter.cxx:330
 TQPresenter.cxx:331
 TQPresenter.cxx:332
 TQPresenter.cxx:333
 TQPresenter.cxx:334
 TQPresenter.cxx:335
 TQPresenter.cxx:336
 TQPresenter.cxx:337
 TQPresenter.cxx:338
 TQPresenter.cxx:339
 TQPresenter.cxx:340
 TQPresenter.cxx:341
 TQPresenter.cxx:342
 TQPresenter.cxx:343
 TQPresenter.cxx:344
 TQPresenter.cxx:345
 TQPresenter.cxx:346
 TQPresenter.cxx:347
 TQPresenter.cxx:348
 TQPresenter.cxx:349
 TQPresenter.cxx:350
 TQPresenter.cxx:351
 TQPresenter.cxx:352
 TQPresenter.cxx:353
 TQPresenter.cxx:354
 TQPresenter.cxx:355
 TQPresenter.cxx:356
 TQPresenter.cxx:357
 TQPresenter.cxx:358
 TQPresenter.cxx:359
 TQPresenter.cxx:360
 TQPresenter.cxx:361
 TQPresenter.cxx:362
 TQPresenter.cxx:363
 TQPresenter.cxx:364
 TQPresenter.cxx:365
 TQPresenter.cxx:366
 TQPresenter.cxx:367
 TQPresenter.cxx:368
 TQPresenter.cxx:369
 TQPresenter.cxx:370
 TQPresenter.cxx:371
 TQPresenter.cxx:372
 TQPresenter.cxx:373
 TQPresenter.cxx:374
 TQPresenter.cxx:375
 TQPresenter.cxx:376
 TQPresenter.cxx:377
 TQPresenter.cxx:378
 TQPresenter.cxx:379
 TQPresenter.cxx:380
 TQPresenter.cxx:381
 TQPresenter.cxx:382
 TQPresenter.cxx:383
 TQPresenter.cxx:384
 TQPresenter.cxx:385
 TQPresenter.cxx:386
 TQPresenter.cxx:387
 TQPresenter.cxx:388
 TQPresenter.cxx:389
 TQPresenter.cxx:390
 TQPresenter.cxx:391
 TQPresenter.cxx:392
 TQPresenter.cxx:393
 TQPresenter.cxx:394
 TQPresenter.cxx:395
 TQPresenter.cxx:396
 TQPresenter.cxx:397
 TQPresenter.cxx:398
 TQPresenter.cxx:399
 TQPresenter.cxx:400
 TQPresenter.cxx:401
 TQPresenter.cxx:402
 TQPresenter.cxx:403
 TQPresenter.cxx:404
 TQPresenter.cxx:405
 TQPresenter.cxx:406
 TQPresenter.cxx:407
 TQPresenter.cxx:408
 TQPresenter.cxx:409
 TQPresenter.cxx:410
 TQPresenter.cxx:411
 TQPresenter.cxx:412
 TQPresenter.cxx:413
 TQPresenter.cxx:414
 TQPresenter.cxx:415
 TQPresenter.cxx:416
 TQPresenter.cxx:417
 TQPresenter.cxx:418
 TQPresenter.cxx:419
 TQPresenter.cxx:420
 TQPresenter.cxx:421
 TQPresenter.cxx:422
 TQPresenter.cxx:423
 TQPresenter.cxx:424
 TQPresenter.cxx:425
 TQPresenter.cxx:426
 TQPresenter.cxx:427
 TQPresenter.cxx:428
 TQPresenter.cxx:429
 TQPresenter.cxx:430
 TQPresenter.cxx:431
 TQPresenter.cxx:432
 TQPresenter.cxx:433
 TQPresenter.cxx:434
 TQPresenter.cxx:435
 TQPresenter.cxx:436
 TQPresenter.cxx:437
 TQPresenter.cxx:438
 TQPresenter.cxx:439
 TQPresenter.cxx:440
 TQPresenter.cxx:441
 TQPresenter.cxx:442
 TQPresenter.cxx:443
 TQPresenter.cxx:444
 TQPresenter.cxx:445
 TQPresenter.cxx:446
 TQPresenter.cxx:447
 TQPresenter.cxx:448
 TQPresenter.cxx:449
 TQPresenter.cxx:450
 TQPresenter.cxx:451
 TQPresenter.cxx:452
 TQPresenter.cxx:453
 TQPresenter.cxx:454
 TQPresenter.cxx:455
 TQPresenter.cxx:456
 TQPresenter.cxx:457
 TQPresenter.cxx:458
 TQPresenter.cxx:459
 TQPresenter.cxx:460
 TQPresenter.cxx:461
 TQPresenter.cxx:462
 TQPresenter.cxx:463
 TQPresenter.cxx:464
 TQPresenter.cxx:465
 TQPresenter.cxx:466
 TQPresenter.cxx:467
 TQPresenter.cxx:468
 TQPresenter.cxx:469
 TQPresenter.cxx:470
 TQPresenter.cxx:471
 TQPresenter.cxx:472
 TQPresenter.cxx:473
 TQPresenter.cxx:474
 TQPresenter.cxx:475
 TQPresenter.cxx:476
 TQPresenter.cxx:477
 TQPresenter.cxx:478
 TQPresenter.cxx:479
 TQPresenter.cxx:480
 TQPresenter.cxx:481
 TQPresenter.cxx:482
 TQPresenter.cxx:483
 TQPresenter.cxx:484
 TQPresenter.cxx:485
 TQPresenter.cxx:486
 TQPresenter.cxx:487
 TQPresenter.cxx:488
 TQPresenter.cxx:489
 TQPresenter.cxx:490
 TQPresenter.cxx:491
 TQPresenter.cxx:492
 TQPresenter.cxx:493
 TQPresenter.cxx:494
 TQPresenter.cxx:495
 TQPresenter.cxx:496
 TQPresenter.cxx:497
 TQPresenter.cxx:498
 TQPresenter.cxx:499
 TQPresenter.cxx:500
 TQPresenter.cxx:501
 TQPresenter.cxx:502
 TQPresenter.cxx:503
 TQPresenter.cxx:504
 TQPresenter.cxx:505
 TQPresenter.cxx:506
 TQPresenter.cxx:507
 TQPresenter.cxx:508
 TQPresenter.cxx:509
 TQPresenter.cxx:510
 TQPresenter.cxx:511
 TQPresenter.cxx:512
 TQPresenter.cxx:513
 TQPresenter.cxx:514
 TQPresenter.cxx:515
 TQPresenter.cxx:516
 TQPresenter.cxx:517
 TQPresenter.cxx:518
 TQPresenter.cxx:519
 TQPresenter.cxx:520
 TQPresenter.cxx:521
 TQPresenter.cxx:522
 TQPresenter.cxx:523
 TQPresenter.cxx:524
 TQPresenter.cxx:525
 TQPresenter.cxx:526
 TQPresenter.cxx:527
 TQPresenter.cxx:528
 TQPresenter.cxx:529
 TQPresenter.cxx:530
 TQPresenter.cxx:531
 TQPresenter.cxx:532
 TQPresenter.cxx:533
 TQPresenter.cxx:534
 TQPresenter.cxx:535
 TQPresenter.cxx:536
 TQPresenter.cxx:537
 TQPresenter.cxx:538
 TQPresenter.cxx:539
 TQPresenter.cxx:540
 TQPresenter.cxx:541
 TQPresenter.cxx:542
 TQPresenter.cxx:543
 TQPresenter.cxx:544
 TQPresenter.cxx:545
 TQPresenter.cxx:546
 TQPresenter.cxx:547
 TQPresenter.cxx:548
 TQPresenter.cxx:549
 TQPresenter.cxx:550
 TQPresenter.cxx:551
 TQPresenter.cxx:552
 TQPresenter.cxx:553
 TQPresenter.cxx:554
 TQPresenter.cxx:555
 TQPresenter.cxx:556
 TQPresenter.cxx:557
 TQPresenter.cxx:558
 TQPresenter.cxx:559
 TQPresenter.cxx:560
 TQPresenter.cxx:561
 TQPresenter.cxx:562
 TQPresenter.cxx:563
 TQPresenter.cxx:564
 TQPresenter.cxx:565
 TQPresenter.cxx:566
 TQPresenter.cxx:567
 TQPresenter.cxx:568
 TQPresenter.cxx:569
 TQPresenter.cxx:570
 TQPresenter.cxx:571
 TQPresenter.cxx:572
 TQPresenter.cxx:573
 TQPresenter.cxx:574
 TQPresenter.cxx:575
 TQPresenter.cxx:576
 TQPresenter.cxx:577
 TQPresenter.cxx:578
 TQPresenter.cxx:579
 TQPresenter.cxx:580
 TQPresenter.cxx:581
 TQPresenter.cxx:582
 TQPresenter.cxx:583
 TQPresenter.cxx:584
 TQPresenter.cxx:585
 TQPresenter.cxx:586
 TQPresenter.cxx:587
 TQPresenter.cxx:588
 TQPresenter.cxx:589
 TQPresenter.cxx:590
 TQPresenter.cxx:591
 TQPresenter.cxx:592
 TQPresenter.cxx:593
 TQPresenter.cxx:594
 TQPresenter.cxx:595
 TQPresenter.cxx:596
 TQPresenter.cxx:597
 TQPresenter.cxx:598
 TQPresenter.cxx:599
 TQPresenter.cxx:600
 TQPresenter.cxx:601
 TQPresenter.cxx:602
 TQPresenter.cxx:603
 TQPresenter.cxx:604
 TQPresenter.cxx:605
 TQPresenter.cxx:606
 TQPresenter.cxx:607
 TQPresenter.cxx:608
 TQPresenter.cxx:609
 TQPresenter.cxx:610
 TQPresenter.cxx:611
 TQPresenter.cxx:612
 TQPresenter.cxx:613
 TQPresenter.cxx:614
 TQPresenter.cxx:615
 TQPresenter.cxx:616
 TQPresenter.cxx:617
 TQPresenter.cxx:618
 TQPresenter.cxx:619
 TQPresenter.cxx:620
 TQPresenter.cxx:621
 TQPresenter.cxx:622
 TQPresenter.cxx:623
 TQPresenter.cxx:624
 TQPresenter.cxx:625
 TQPresenter.cxx:626
 TQPresenter.cxx:627
 TQPresenter.cxx:628
 TQPresenter.cxx:629
 TQPresenter.cxx:630
 TQPresenter.cxx:631
 TQPresenter.cxx:632
 TQPresenter.cxx:633
 TQPresenter.cxx:634
 TQPresenter.cxx:635
 TQPresenter.cxx:636
 TQPresenter.cxx:637
 TQPresenter.cxx:638
 TQPresenter.cxx:639
 TQPresenter.cxx:640
 TQPresenter.cxx:641
 TQPresenter.cxx:642
 TQPresenter.cxx:643
 TQPresenter.cxx:644
 TQPresenter.cxx:645
 TQPresenter.cxx:646
 TQPresenter.cxx:647
 TQPresenter.cxx:648
 TQPresenter.cxx:649
 TQPresenter.cxx:650
 TQPresenter.cxx:651
 TQPresenter.cxx:652
 TQPresenter.cxx:653
 TQPresenter.cxx:654
 TQPresenter.cxx:655
 TQPresenter.cxx:656
 TQPresenter.cxx:657
 TQPresenter.cxx:658
 TQPresenter.cxx:659
 TQPresenter.cxx:660
 TQPresenter.cxx:661
 TQPresenter.cxx:662
 TQPresenter.cxx:663
 TQPresenter.cxx:664
 TQPresenter.cxx:665
 TQPresenter.cxx:666
 TQPresenter.cxx:667
 TQPresenter.cxx:668
 TQPresenter.cxx:669
 TQPresenter.cxx:670
 TQPresenter.cxx:671
 TQPresenter.cxx:672
 TQPresenter.cxx:673
 TQPresenter.cxx:674
 TQPresenter.cxx:675
 TQPresenter.cxx:676
 TQPresenter.cxx:677
 TQPresenter.cxx:678
 TQPresenter.cxx:679
 TQPresenter.cxx:680
 TQPresenter.cxx:681
 TQPresenter.cxx:682
 TQPresenter.cxx:683
 TQPresenter.cxx:684
 TQPresenter.cxx:685
 TQPresenter.cxx:686
 TQPresenter.cxx:687
 TQPresenter.cxx:688
 TQPresenter.cxx:689
 TQPresenter.cxx:690
 TQPresenter.cxx:691
 TQPresenter.cxx:692
 TQPresenter.cxx:693
 TQPresenter.cxx:694
 TQPresenter.cxx:695
 TQPresenter.cxx:696
 TQPresenter.cxx:697
 TQPresenter.cxx:698
 TQPresenter.cxx:699
 TQPresenter.cxx:700
 TQPresenter.cxx:701
 TQPresenter.cxx:702
 TQPresenter.cxx:703
 TQPresenter.cxx:704
 TQPresenter.cxx:705
 TQPresenter.cxx:706
 TQPresenter.cxx:707
 TQPresenter.cxx:708
 TQPresenter.cxx:709
 TQPresenter.cxx:710
 TQPresenter.cxx:711
 TQPresenter.cxx:712
 TQPresenter.cxx:713
 TQPresenter.cxx:714
 TQPresenter.cxx:715
 TQPresenter.cxx:716
 TQPresenter.cxx:717
 TQPresenter.cxx:718
 TQPresenter.cxx:719
 TQPresenter.cxx:720
 TQPresenter.cxx:721
 TQPresenter.cxx:722
 TQPresenter.cxx:723
 TQPresenter.cxx:724
 TQPresenter.cxx:725
 TQPresenter.cxx:726
 TQPresenter.cxx:727
 TQPresenter.cxx:728
 TQPresenter.cxx:729
 TQPresenter.cxx:730
 TQPresenter.cxx:731
 TQPresenter.cxx:732
 TQPresenter.cxx:733
 TQPresenter.cxx:734
 TQPresenter.cxx:735
 TQPresenter.cxx:736
 TQPresenter.cxx:737
 TQPresenter.cxx:738
 TQPresenter.cxx:739
 TQPresenter.cxx:740
 TQPresenter.cxx:741
 TQPresenter.cxx:742
 TQPresenter.cxx:743
 TQPresenter.cxx:744
 TQPresenter.cxx:745
 TQPresenter.cxx:746
 TQPresenter.cxx:747
 TQPresenter.cxx:748
 TQPresenter.cxx:749
 TQPresenter.cxx:750
 TQPresenter.cxx:751
 TQPresenter.cxx:752
 TQPresenter.cxx:753
 TQPresenter.cxx:754
 TQPresenter.cxx:755
 TQPresenter.cxx:756
 TQPresenter.cxx:757
 TQPresenter.cxx:758
 TQPresenter.cxx:759
 TQPresenter.cxx:760
 TQPresenter.cxx:761
 TQPresenter.cxx:762