Developer documentation | Axl-2.5.1

axlAbstractDataCompositeWriter.cpp
Go to the documentation of this file.
1 /* axlAbstractDataCompositeWriter.cpp ---
2  *
3  * Author: Meriadeg Perrinel
4  * Copyright (C) 2008-2011 - Meriadeg Perrinel, Inria.
5  * Created: Wed Sep 21 11:36:52 2011 (+0200)
6  * Version: $Id$
7  * Last-Updated: Wed Sep 21 12:11:29 2011 (+0200)
8  * By: Meriadeg Perrinel
9  * Update #: 88
10  */
11 
12 /* Commentary:
13  *
14  */
15 
16 /* Change log:
17  *
18  */
19 
21 
23 #include <axlCore/axlDataDynamic.h>
24 
25 #include <dtkCoreSupport/dtkAbstractData.h>
26 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
27 
28 #include <QtGui>
29 
30 // /////////////////////////////////////////////////////////////////
31 // axlAbstractDataCompositeWriter
32 // /////////////////////////////////////////////////////////////////
33 
35 {
36  this->setObjectName(this->description());
37 }
38 
40 {
41 
42 }
43 
45 {
46  return "axlAbstractDataCompositeWriter";
47 }
48 
50 {
51  return "axlAbstractDataCompositeWriter";
52 }
53 
55 {
56  return QStringList() << "axlAbstractDataComposite";
57 }
58 
60 {
61  return dtkAbstractDataFactory::instance()->registerDataWriterType("axlAbstractDataCompositeWriter", QStringList(), createaxlAbstractDataCompositeWriter);
62 }
63 
64 bool axlAbstractDataCompositeWriter::accept(dtkAbstractData *data)
65 {
66  axlAbstractDataComposite *composite = qobject_cast<axlAbstractDataComposite *>(data);
67  if(composite && !(dynamic_cast<axlDataDynamic *>(composite)))
68  return true;
69 
70  return false;
71 }
72 
73 bool axlAbstractDataCompositeWriter::reject(dtkAbstractData *data)
74 {
75  return !this->accept(data);
76 }
77 
78 QDomElement axlAbstractDataCompositeWriter::write(QDomDocument *doc, dtkAbstractData *data)
79 {
80  axlAbstractDataComposite *composite = qobject_cast<axlAbstractDataComposite *>(data);
81 
82  QDomElement compositeElement = doc->createElement("composite");
83  compositeElement.setAttribute("name",composite->name());
84 
85  QColor qcolor = composite->color();
86  QString color ;
87  QTextStream(&color) << QString::number(qcolor.red()) << " "
88  << QString::number(qcolor.green()) << " "
89  << QString::number(qcolor.blue()) ;
90  compositeElement.setAttribute("color", color);
91  QString shader = composite->shader();
92  QFileInfo shaderFileInfo(shader);
93  compositeElement.setAttribute("shader", shaderFileInfo.fileName());
94 
95  for(int i = 0; i < composite->count(); i ++)
96  {
97  bool founded = false;
98 
99  // test for all reader registered in the factory
100  foreach(QString writer, dtkAbstractDataFactory::instance()->writers()) {
101 
102 
103  axlAbstractDataWriter *axl_writer = qobject_cast<axlAbstractDataWriter *>(dtkAbstractDataFactory::instance()->writer(writer));
104  QDomElement element = this->elementByWriter(axl_writer, doc, composite->get(i));
105 
106  if(element.hasChildNodes()) {
107  compositeElement.appendChild(element);
108  founded = true;
109  }
110 
111  }// end generic case
112 
113  if(!founded)
114  {
116  QDomElement element = this->elementByWriter(axl_writer, doc, composite->get(i));
117 
118  if(element.hasChildNodes()) {
119  compositeElement.appendChild(element);
120  founded = true;
121  }
122  }// end particular dataComposite case
123 
124  if (!founded) {
125  dtkWarn() << "No writer found for composite item:"<< composite->get(i)->identifier();
126  }
127  }
128 
129  return compositeElement;
130 }
131 
132 
133 QDomElement axlAbstractDataCompositeWriter::elementByWriter(axlAbstractDataWriter *axl_writer, QDomDocument *doc, dtkAbstractData *data)
134 {
135  QDomElement element;
136 
137  if(!axl_writer)
138  return element;
139 
140  if(!axl_writer->accept(data))
141  return element;
142 
143  element = axl_writer->write(doc, data);
144 
145  return element;
146 }
147 
148 dtkAbstractDataWriter *createaxlAbstractDataCompositeWriter(void)
149 {
151 }
virtual bool accept(dtkAbstractData *data)=0
dtkAbstractDataWriter * createaxlAbstractDataCompositeWriter(void)
QDomElement write(QDomDocument *doc, dtkAbstractData *data)
virtual QDomElement write(QDomDocument *doc, dtkAbstractData *data)=0
bool get(dtkAbstractData *data)