• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

okteta

  • sources
  • kde-4.12
  • kdesdk
  • okteta
  • kasten
  • controllers
  • view
  • structures
  • datatypes
datainformation.h
Go to the documentation of this file.
1 /*
2  * This file is part of the Okteta Kasten Framework, made within the KDE community.
3  *
4  * Copyright 2009, 2010, 2011, 2012, 2013 Alex Richardson <alex.richardson@gmx.de>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) version 3, or any
10  * later version accepted by the membership of KDE e.V. (or its
11  * successor approved by the membership of KDE e.V.), which shall
12  * act as a proxy defined in Section 6 of version 3 of the license.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
21  */
22 #ifndef DATAINFORMATION_H_
23 #define DATAINFORMATION_H_
24 
25 //Qt core
26 #include <QString>
27 #include <QPair>
28 #include <QScopedPointer>
29 #include <QMetaType>
30 
31 //Okteta
32 #include <size.h>
33 #include <address.h>
34 
35 #include "datainformationbase.h"
36 #include "additionaldata.h"
37 #include "../script/scriptlogger.h"
38 #include "primitivedatatype.h"
39 
42 #define DATAINFORMATION_CLONE_DECL(type, supertype) public: \
43  virtual inline type* clone() const { return new type(*this); } \
44  protected: \
45  type(const type& d)
46 
49 #define DATAINFORMATION_CLONE(type, supertype) DATAINFORMATION_CLONE_DECL(type, supertype) : supertype(d)
50 
51 namespace Okteta
52 {
53 class AbstractByteArrayModel;
54 }
55 
56 class QScriptContext;
57 class QScriptEngine;
58 class QScriptValue;
59 class QScriptClass;
60 class QVariant;
61 class QWidget;
62 class ScriptLogger;
63 class TopLevelDataInformation;
64 class ScriptHandlerInfo;
65 
67 class DataInformation : public DataInformationBase
68 {
69  friend class ScriptHandler; //so mHasBeenUpdated/hasBeenValidated can be set
70  friend class PrimitiveDataInformationWrapper; //to set mHasBeenUpdated
71  friend class PointerDataInformation; //to set mWasAbleToRead on pointer target
72  friend class DefaultScriptClass; //to set mValidationSucessful and validationError
73  template<PrimitiveDataTypeEnum type> friend class PrimitiveArrayData; //to set mWasAbleToRead (when returning a script value)
74 protected:
75  explicit DataInformation(const DataInformation&);
76 
77 public:
78  virtual DataInformation* clone() const = 0;
79  explicit DataInformation(const QString& name, DataInformationBase* parent = NULL);
80  virtual ~DataInformation();
81 
82  enum Columns
83  {
84  ColumnName = 0, ColumnType, ColumnValue, COLUMN_COUNT
85  };
86  enum DataInformationEndianess
87  {
88  EndianessFromSettings = 0, EndianessInherit, EndianessLittle, EndianessBig
89  };
90 
91  //methods for children:
93  virtual bool canHaveChildren() const = 0;
94  virtual unsigned int childCount() const = 0;
95  virtual DataInformation* childAt(unsigned int) const = 0;
100  virtual DataInformation* child(const QString& name) const;
105  virtual BitCount64 positionInFile(Okteta::Address start) const;
111  virtual BitCount64 childPosition(const DataInformation* child, Okteta::Address start) const = 0;
112 
113  //for the model:
114  virtual Qt::ItemFlags flags(int column, bool fileLoaded = true) const;
115  int row() const;
117  virtual QVariant data(int column, int role) const;
118 
119  QString typeName() const;
121  QString valueString() const;
122  QString name() const;
123  void setName(const QString& newName);
124  virtual QString tooltipString() const;
126  virtual QString sizeString() const;
127 
128  //delegate functions:
130  virtual QWidget* createEditWidget(QWidget* parent) const = 0;
132  virtual QVariant dataFromWidget(const QWidget* w) const = 0;
134  virtual void setWidgetData(QWidget* w) const = 0;
135 
136  //reading and writing
138  virtual BitCount32 size() const = 0;
139 
150  virtual qint64 readData(Okteta::AbstractByteArrayModel *input, Okteta::Address address,
151  BitCount64 bitsRemaining, quint8* bitOffset) = 0;
154  void beginRead();
165  virtual bool setData(const QVariant& value, Okteta::AbstractByteArrayModel* out,
166  Okteta::Address address, BitCount64 bitsRemaining, quint8 bitOffset) = 0;
167 
168  virtual bool isTopLevel() const;
169  TopLevelDataInformation* topLevelDataInformation() const;
170  DataInformation* mainStructure();
171 
172  QScriptValue updateFunc() const;
173  void setUpdateFunc(const QScriptValue& func);
174  QScriptValue validationFunc() const;
175  void setValidationFunc(const QScriptValue& func);
176  QString validationError() const;
177  bool validationSuccessful() const;
178 
179  bool hasBeenUpdated() const;
180  bool hasBeenValidated() const;
181  DataInformationEndianess byteOrder() const;
182  QSysInfo::Endian effectiveByteOrder() const;
183  void setByteOrder(DataInformationEndianess newEndianess);
184  QString fullObjectPath() const;
185 
186  virtual void resetValidationState(); //virtual for DataInformationWithChildren
187  bool wasAbleToRead() const;
195  virtual QScriptValue toScriptValue(QScriptEngine* engine, ScriptHandlerInfo* handlerInfo);
197  QScriptValue toScriptValue(TopLevelDataInformation* top);
198  void setParent(DataInformationBase* newParent);
199  DataInformationBase* parent() const;
200  ScriptLogger* logger() const;
202  QDebug logInfo() const;
204  QDebug logWarn() const;
206  QDebug logError() const;
210  ScriptLogger::LogLevel loggedData() const;
211  void setLoggedData(ScriptLogger::LogLevel lvl) const;
212 
217  virtual int indexOf(const DataInformation* const data) const = 0;
221  void setCustomTypeName(const QString& customTypeName);
222  QScriptValue toStringFunction() const;
223  void setToStringFunction(const QScriptValue& value);
224 protected:
225  static QVariant eofReachedData(int role);
226  void setAdditionalFunction(AdditionalData::AdditionalDataType entry, const QScriptValue& value, const char* name);
227 private:
228  virtual QString valueStringImpl() const;
229  virtual QString typeNameImpl() const = 0;
231  virtual QScriptClass* scriptClass(ScriptHandlerInfo* handlerInfo) const = 0;
232 private:
233  void setValidationError(QString errorMessage); //only called by ScriptHandler
234  QSysInfo::Endian byteOrderFromSettings() const; //so there is no need to include structviewpreferences.h here
235  QString customToString(const QScriptValue& func) const;
236 protected:
237  AdditionalData mAdditionalData;
238  DataInformationBase* mParent;
239  QString mName;
240  bool mValidationSuccessful :1;
241  bool mHasBeenValidated :1;
242  bool mHasBeenUpdated :1;
243  bool mWasAbleToRead :1;
244  DataInformationEndianess mByteOrder :2;
245  mutable ScriptLogger::LogLevel mLoggedData :2; //mutable is ugly but i guess it is the best solution
246 };
247 
248 Q_DECLARE_METATYPE(DataInformation*)
249 Q_DECLARE_METATYPE(const DataInformation*)
250 
251 inline Qt::ItemFlags DataInformation::flags(int column, bool fileLoaded) const
252 {
253  Q_UNUSED(column)
254  Q_UNUSED(fileLoaded);
255  return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
256 }
257 
258 inline QString DataInformation::name() const
259 {
260  return mName;
261 }
262 
263 inline void DataInformation::setName(const QString& newName)
264 {
265  mName = newName;
266 }
267 
268 inline DataInformation* DataInformation::childAt(unsigned int) const
269 {
270  return 0;
271 }
272 
273 inline bool DataInformation::canHaveChildren() const
274 {
275  return false;
276 }
277 
278 inline unsigned int DataInformation::childCount() const
279 {
280  return 0;
281 }
282 
283 inline bool DataInformation::wasAbleToRead() const
284 {
285  return mWasAbleToRead;
286 }
287 
288 inline DataInformation::DataInformationEndianess DataInformation::byteOrder() const
289 {
290  return mByteOrder;
291 }
292 
293 inline void DataInformation::setByteOrder(DataInformation::DataInformationEndianess newByteOrder)
294 {
295  mByteOrder = newByteOrder;
296 }
297 
298 inline bool DataInformation::isTopLevel() const
299 {
300  return false;
301 }
302 
303 inline void DataInformation::setParent(DataInformationBase* newParent)
304 {
305  Q_CHECK_PTR(newParent);
306  mParent = newParent;
307 }
308 
309 inline DataInformationBase* DataInformation::parent() const
310 {
311  return mParent;
312 }
313 
314 inline QDebug DataInformation::logInfo() const
315 {
316  return logger()->info(this);
317 }
318 
319 inline QDebug DataInformation::logWarn() const
320 {
321  return logger()->warn(this);
322 }
323 
324 inline QDebug DataInformation::logError() const
325 {
326  return logger()->error(this);
327 }
328 
329 inline ScriptLogger::LogLevel DataInformation::loggedData() const
330 {
331  return mLoggedData;
332 }
333 
334 inline void DataInformation::setLoggedData(ScriptLogger::LogLevel lvl) const
335 {
336  mLoggedData = lvl;
337 }
338 
339 inline bool DataInformation::hasBeenUpdated() const
340 {
341  return mHasBeenUpdated;
342 }
343 
344 inline bool DataInformation::validationSuccessful() const
345 {
346  return mValidationSuccessful;
347 }
348 
349 inline bool DataInformation::hasBeenValidated() const
350 {
351  return mHasBeenValidated;
352 }
353 
354 inline QScriptValue DataInformation::updateFunc() const
355 {
356  return mAdditionalData.get(AdditionalData::UpdateFunction).value<QScriptValue>();
357 }
358 
359 inline QScriptValue DataInformation::validationFunc() const
360 {
361  return mAdditionalData.get(AdditionalData::ValidationFunction).value<QScriptValue>();
362 }
363 
364 inline QScriptValue DataInformation::toStringFunction() const
365 {
366  return mAdditionalData.get(AdditionalData::ToStringFunction).value<QScriptValue>();
367 }
368 
369 inline void DataInformation::setUpdateFunc(const QScriptValue& func)
370 {
371  setAdditionalFunction(AdditionalData::UpdateFunction, func, "update function");
372 }
373 
374 inline void DataInformation::setValidationFunc(const QScriptValue& func)
375 {
376  setAdditionalFunction(AdditionalData::ValidationFunction, func, "validation function");
377 }
378 
379 inline void DataInformation::setToStringFunction(const QScriptValue& func)
380 {
381  setAdditionalFunction(AdditionalData::ToStringFunction, func, "to string function");
382 }
383 
384 inline QString DataInformation::validationError() const
385 {
386  return mAdditionalData.get(AdditionalData::ValidationError).toString();
387 }
388 
389 inline QSysInfo::Endian DataInformation::effectiveByteOrder() const
390 {
391  switch (mByteOrder)
392  {
393  case EndianessBig:
394  return QSysInfo::BigEndian;
395  case EndianessLittle:
396  return QSysInfo::LittleEndian;
397  case EndianessFromSettings:
398  return byteOrderFromSettings();
399  default: //inherit
400  if (mParent && !mParent->isTopLevel())
401  return mParent->asDataInformation()->effectiveByteOrder();
402  return byteOrderFromSettings();
403  }
404 }
405 
406 inline QString DataInformation::typeName() const
407 {
408  QVariant v = mAdditionalData.get(AdditionalData::CustomTypeName);
409  if (Q_UNLIKELY(v.isValid())) //custom type names will be used rarely
410  return v.toString();
411  return typeNameImpl();
412 }
413 
414 inline QString DataInformation::valueString() const
415 {
416  QVariant v = mAdditionalData.get(AdditionalData::ToStringFunction);
417  if (Q_UNLIKELY(v.isValid())) //custom to string functions will be used rarely
418  return customToString(v.value<QScriptValue>());
419  return valueStringImpl();
420 }
421 
422 #endif /* DATAINFORMATION_H_ */
DataInformation::valueString
QString valueString() const
by default just returns an empty QString
Definition: datainformation.h:414
AdditionalData::UpdateFunction
Definition: additionaldata.h:35
DataInformation
Interface that must be implemented by all datatypes.
Definition: datainformation.h:67
Okteta::Address
qint32 Address
Definition: address.h:34
Okteta::AbstractByteArrayModel
could it be useful to hide the data access behind an iterator? * class KDataBufferIterator { public: ...
Definition: abstractbytearraymodel.h:79
DataInformation::name
QString name() const
Definition: datainformation.h:258
DataInformation::fullObjectPath
QString fullObjectPath() const
Definition: datainformation.cpp:258
DataInformation::effectiveByteOrder
QSysInfo::Endian effectiveByteOrder() const
Definition: datainformation.h:389
DataInformation::topLevelDataInformation
TopLevelDataInformation * topLevelDataInformation() const
Definition: datainformation.cpp:240
QScriptClass
DataInformation::mValidationSuccessful
bool mValidationSuccessful
Definition: datainformation.h:240
DataInformation::wasAbleToRead
bool wasAbleToRead() const
Definition: datainformation.h:283
AdditionalData::ToStringFunction
Definition: additionaldata.h:35
ScriptLogger::LogLevel
LogLevel
Definition: scriptlogger.h:46
PointerDataInformation
Definition: pointerdatainformation.h:30
BitCount64
quint64 BitCount64
Definition: datainformationbase.h:42
DataInformation::childCount
virtual unsigned int childCount() const =0
Definition: datainformation.h:278
DataInformation::setName
void setName(const QString &newName)
Definition: datainformation.h:263
QWidget
DataInformation::typeName
QString typeName() const
Definition: datainformation.h:406
DataInformation::mByteOrder
DataInformationEndianess mByteOrder
Definition: datainformation.h:244
DataInformation::tooltipString
virtual QString tooltipString() const
Definition: datainformation.cpp:202
DataInformation::setData
virtual bool setData(const QVariant &value, Okteta::AbstractByteArrayModel *out, Okteta::Address address, BitCount64 bitsRemaining, quint8 bitOffset)=0
Writes the current data contained in this object to out.
AdditionalData::CustomTypeName
Definition: additionaldata.h:35
DataInformation::beginRead
void beginRead()
sets mWasAbleToRead to false for all children and this object.
Definition: datainformation.cpp:118
DataInformation::DataInformationEndianess
DataInformationEndianess
Definition: datainformation.h:86
AdditionalData::get
QVariant get(AdditionalDataType entry) const
Definition: additionaldata.h:50
DataInformation::ColumnType
Definition: datainformation.h:84
DataInformation::logger
ScriptLogger * logger() const
Definition: datainformation.cpp:134
BitCount32
quint32 BitCount32
Definition: datainformationbase.h:37
DataInformation::ColumnValue
Definition: datainformation.h:84
DataInformation::flags
virtual Qt::ItemFlags flags(int column, bool fileLoaded=true) const
Definition: datainformation.h:251
DataInformation::EndianessBig
Definition: datainformation.h:88
BigEndian
Definition: endianness.h:33
DataInformation::hasBeenUpdated
bool hasBeenUpdated() const
Definition: datainformation.h:339
DataInformation::setValidationFunc
void setValidationFunc(const QScriptValue &func)
Definition: datainformation.h:374
DataInformation::DataInformation
DataInformation(const DataInformation &)
Definition: datainformation.cpp:43
DataInformation::mainStructure
DataInformation * mainStructure()
Definition: datainformation.cpp:85
DataInformation::childAt
virtual DataInformation * childAt(unsigned int) const =0
Definition: datainformation.h:268
DataInformation::mName
QString mName
Definition: datainformation.h:239
DataInformation::validationFunc
QScriptValue validationFunc() const
Definition: datainformation.h:359
DataInformation::sizeString
virtual QString sizeString() const
needs to be virtual for bitfields
Definition: datainformation.cpp:56
DataInformation::mWasAbleToRead
bool mWasAbleToRead
Definition: datainformation.h:243
TopLevelDataInformation
Definition: topleveldatainformation.h:46
DataInformation::setToStringFunction
void setToStringFunction(const QScriptValue &value)
Definition: datainformation.h:379
AdditionalData::AdditionalDataType
AdditionalDataType
Definition: additionaldata.h:34
DataInformation::byteOrder
DataInformationEndianess byteOrder() const
Definition: datainformation.h:288
DataInformation::logInfo
QDebug logInfo() const
just a shorthand for logger->info(this)
Definition: datainformation.h:314
AdditionalData::ValidationFunction
Definition: additionaldata.h:35
DataInformation::setParent
void setParent(DataInformationBase *newParent)
Definition: datainformation.h:303
DataInformation::canHaveChildren
virtual bool canHaveChildren() const =0
true for unions and structs and arrays
Definition: datainformation.h:273
DataInformation::setByteOrder
void setByteOrder(DataInformationEndianess newEndianess)
Definition: datainformation.h:293
DataInformation::readData
virtual qint64 readData(Okteta::AbstractByteArrayModel *input, Okteta::Address address, BitCount64 bitsRemaining, quint8 *bitOffset)=0
Reads the necessary data from input and returns the number of bytes read.
ScriptHandler
Definition: scripthandler.h:39
DataInformation::updateFunc
QScriptValue updateFunc() const
Definition: datainformation.h:354
DataInformation::mHasBeenUpdated
bool mHasBeenUpdated
Definition: datainformation.h:242
DataInformation::indexOf
virtual int indexOf(const DataInformation *const data) const =0
Find the index of a DataInformation in this object, needed to calculate the row.
address.h
ScriptLogger
NOT THREAD SAFE!
Definition: scriptlogger.h:35
DataInformationBase::isTopLevel
virtual bool isTopLevel() const =0
DataInformation::toScriptValue
virtual QScriptValue toScriptValue(QScriptEngine *engine, ScriptHandlerInfo *handlerInfo)
This method is virtual since DummyDataInformation has to override it.
Definition: datainformation.cpp:275
datainformationbase.h
DataInformation::child
virtual DataInformation * child(const QString &name) const
Looks for a child of this object with given name.
Definition: datainformation.cpp:228
DataInformation::dataFromWidget
virtual QVariant dataFromWidget(const QWidget *w) const =0
get the needed data from the widget
size.h
DataInformation::ColumnName
Definition: datainformation.h:84
DataInformation::mAdditionalData
AdditionalData mAdditionalData
Definition: datainformation.h:237
DataInformation::EndianessFromSettings
Definition: datainformation.h:88
DataInformation::mParent
DataInformationBase * mParent
Definition: datainformation.h:238
DataInformation::setCustomTypeName
void setCustomTypeName(const QString &customTypeName)
Set a custom string to be used for typeName() instead of the default.
Definition: datainformation.cpp:103
AdditionalData::ValidationError
Definition: additionaldata.h:35
PrimitiveArrayData
Definition: primitivearraydata.h:32
DataInformation::data
virtual QVariant data(int column, int role) const
get the necessary data (for the model)
Definition: datainformation.cpp:156
DataInformation::hasBeenValidated
bool hasBeenValidated() const
Definition: datainformation.h:349
ScriptLogger::info
QDebug info(const DataInformation *origin)
Definition: scriptlogger.h:66
PrimitiveDataInformationWrapper
A base class for data types which just wrap an underlying primitive data type.
Definition: primitivedatainformation.h:76
DataInformation::loggedData
ScriptLogger::LogLevel loggedData() const
whether data was logged from here (and which level it was)
Definition: datainformation.h:329
DataInformationBase::asDataInformation
DataInformation * asDataInformation()
Definition: datainformationbase.h:107
DataInformation::Columns
Columns
Definition: datainformation.h:82
DataInformation::validationError
QString validationError() const
Definition: datainformation.h:384
DataInformation::isTopLevel
virtual bool isTopLevel() const
Definition: datainformation.h:298
primitivedatatype.h
ScriptHandlerInfo
Definition: scripthandlerinfo.h:39
ScriptLogger::error
QDebug error(const DataInformation *origin)
Definition: scriptlogger.h:68
DataInformation::resetValidationState
virtual void resetValidationState()
Definition: datainformation.cpp:111
DataInformation::EndianessLittle
Definition: datainformation.h:88
DataInformation::positionInFile
virtual BitCount64 positionInFile(Okteta::Address start) const
Definition: datainformation.cpp:75
ScriptLogger::warn
QDebug warn(const DataInformation *origin)
Definition: scriptlogger.h:67
DataInformation::setLoggedData
void setLoggedData(ScriptLogger::LogLevel lvl) const
Definition: datainformation.h:334
DataInformation::validationSuccessful
bool validationSuccessful() const
Definition: datainformation.h:344
DataInformation::parent
DataInformationBase * parent() const
Definition: datainformation.h:309
DataInformationBase
Definition: datainformationbase.h:44
DataInformation::clone
virtual DataInformation * clone() const =0
DataInformation::mLoggedData
ScriptLogger::LogLevel mLoggedData
Definition: datainformation.h:245
DataInformation::setWidgetData
virtual void setWidgetData(QWidget *w) const =0
initialize the delegate widget with the correct data
DefaultScriptClass
Definition: defaultscriptclass.h:36
DataInformation::childPosition
virtual BitCount64 childPosition(const DataInformation *child, Okteta::Address start) const =0
DataInformation::setAdditionalFunction
void setAdditionalFunction(AdditionalData::AdditionalDataType entry, const QScriptValue &value, const char *name)
Definition: datainformation.cpp:139
DataInformation::setUpdateFunc
void setUpdateFunc(const QScriptValue &func)
Definition: datainformation.h:369
DataInformation::createEditWidget
virtual QWidget * createEditWidget(QWidget *parent) const =0
create a QWidget for the QItemDelegate
DataInformation::COLUMN_COUNT
Definition: datainformation.h:84
DataInformation::mHasBeenValidated
bool mHasBeenValidated
Definition: datainformation.h:241
DataInformation::row
int row() const
Definition: datainformation.cpp:249
LittleEndian
Definition: endianness.h:32
DataInformation::size
virtual BitCount32 size() const =0
the size in bits of this element
DataInformation::toStringFunction
QScriptValue toStringFunction() const
Definition: datainformation.h:364
DataInformation::logWarn
QDebug logWarn() const
just a shorthand for logger->warn(this)
Definition: datainformation.h:319
DataInformation::EndianessInherit
Definition: datainformation.h:88
DataInformation::~DataInformation
virtual ~DataInformation()
Definition: datainformation.cpp:50
DataInformation::eofReachedData
static QVariant eofReachedData(int role)
Definition: datainformation.cpp:189
AdditionalData
Additional data which is not needed frequently.
Definition: additionaldata.h:31
DataInformation::logError
QDebug logError() const
just a shorthand for logger->error(this)
Definition: datainformation.h:324
additionaldata.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:07 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okteta

Skip menu "okteta"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal