diff options
Diffstat (limited to 'quanta/components/debugger/debuggervariable.cpp')
-rw-r--r-- | quanta/components/debugger/debuggervariable.cpp | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/quanta/components/debugger/debuggervariable.cpp b/quanta/components/debugger/debuggervariable.cpp new file mode 100644 index 00000000..b6a4f76a --- /dev/null +++ b/quanta/components/debugger/debuggervariable.cpp @@ -0,0 +1,283 @@ +/*************************************************************************** + debuggervariable.cpp + ------------------------ + begin : 2004-04-04 + copyright : (C) 2004 Thiago Silva + + ***************************************************************************/ + +/**************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "debuggervariable.h" +#include <kdebug.h> +#include <klocale.h> + +DebuggerVariable::DebuggerVariable() + : m_isReference(false) + , m_size(0) + , m_type(DebuggerVariableTypes::Undefined) + , m_item(NULL) +{} + +DebuggerVariable::DebuggerVariable(const QString& name) + : m_isReference(false) + , m_size(0) + , m_type(DebuggerVariableTypes::Undefined) + , m_item(NULL) +{ + m_name = name; +} + +DebuggerVariable::DebuggerVariable(const QString& name, const QString& value, int type) + : m_isReference(false) + , m_size(0) + , m_item(NULL) +{ + m_name = name; + m_value = value; + m_type = type; + if(type == DebuggerVariableTypes::String) + m_size = value.length(); +} + +DebuggerVariable::DebuggerVariable(const QString& name, const QString& value, int type, int size) + : m_isReference(false) + , m_item(NULL) +{ + m_name = name; + m_value = value; + m_type = type; + m_size = size; +} + +DebuggerVariable::DebuggerVariable(const QString& name, const ValueList_t& values, int type) + : m_isReference(false) + , m_item(NULL) +{ + m_name = name; + m_valueList = values; + m_type = type; + m_size = values.count(); +} + +DebuggerVariable::DebuggerVariable(DebuggerVariable* v, bool copyitem ) +{ + m_name = v->name(); + m_size = v->size(); + m_value = v->value(); + m_type = v->type(); + m_isReference = v->isReference(); + if(copyitem) + { + m_item = v->item(); + v->setItem(NULL); + } + else + m_item = NULL; + + // We cant just assign m_valuelist to v->values(), it would make a shallow copy... + for(DebuggerVariable * v2 = v->values().first(); v2; v2 = v->values().next()) + m_valueList.append(new DebuggerVariable(v2, copyitem)); +} + + +void DebuggerVariable::setName(const QString& name) +{ + m_name = name; +} +QString DebuggerVariable::name() const +{ + return m_name; +} +void DebuggerVariable::setValue(const QString& value) +{ + m_value = value; +} + +QString DebuggerVariable::value() const +{ + if(isScalar()) + return m_value; + else + return i18n("Non scalar value"); +} + +bool DebuggerVariable::isScalar() const +{ + switch(m_type) + { + case DebuggerVariableTypes::Reference: + case DebuggerVariableTypes::Resource: + case DebuggerVariableTypes::String: + case DebuggerVariableTypes::Integer: + case DebuggerVariableTypes::Float: + case DebuggerVariableTypes::Boolean: + case DebuggerVariableTypes::Undefined: + case DebuggerVariableTypes::Error: + return true; + } + return false; +} + +void DebuggerVariable::setValues(const ValueList_t& valueList) +{ + m_valueList = valueList; +} + +ValueList_t DebuggerVariable::values() const +{ + return m_valueList; +} + +void DebuggerVariable::setType(int type) +{ + m_type = type; +} + +int DebuggerVariable::type() const +{ + return m_type; +} + +const QString DebuggerVariable::typeName() const +{ + switch(m_type) + { + case DebuggerVariableTypes::Array: + return i18n("Array"); + case DebuggerVariableTypes::Object: + return i18n("Object"); + case DebuggerVariableTypes::Reference: + return i18n("Reference"); + case DebuggerVariableTypes::Resource: + return i18n("Resource"); + case DebuggerVariableTypes::String: + return i18n("String"); + case DebuggerVariableTypes::Integer: + return i18n("Integer"); + case DebuggerVariableTypes::Float: + return i18n("Float"); + case DebuggerVariableTypes::Boolean: + return i18n("Boolean"); + case DebuggerVariableTypes::Undefined: + return i18n("Undefined"); + case DebuggerVariableTypes::Error: + return i18n("Error"); + default: + return i18n("Unknown"); + } +} + + +void DebuggerVariable::setSize(long size) +{ + m_size = size; +} + +long DebuggerVariable::size() const +{ + return m_size; +} + +QString DebuggerVariable::sizeName() const +{ + switch(m_type) + { + case DebuggerVariableTypes::Reference: + case DebuggerVariableTypes::Resource: + case DebuggerVariableTypes::Integer: + case DebuggerVariableTypes::Float: + case DebuggerVariableTypes::Boolean: + case DebuggerVariableTypes::Undefined: + case DebuggerVariableTypes::Error: + return ""; + } + return QString::number(m_size); +} + +void DebuggerVariable::setReference(bool ref) +{ + m_isReference = ref; +} +bool DebuggerVariable::isReference() const +{ + return m_isReference; +} + + +DebuggerVariable::~DebuggerVariable() +{ + DebuggerVariable * v; + while((v = m_valueList.first())) + { + m_valueList.remove(v); + delete v; + } + // If this variable is shown in the treeview, remove it + if(m_item) + delete m_item; + +} + + +void DebuggerVariable::deleteChild( DebuggerVariable * child ) +{ + + for(DebuggerVariable *v = m_valueList.first(); v; v = m_valueList.next()) + { + if(v->name() == child->name()) + { + m_valueList.remove(v); + delete v; + return; + } + } +} + +DebuggerVariable* DebuggerVariable::findItem( QListViewItem * item, bool traverse ) +{ + if(item == m_item) + return this; + + if(!traverse) + return NULL; + + for(DebuggerVariable * v = m_valueList.first(); v; v = m_valueList.next()) + { + DebuggerVariable * v2 = v->findItem(item, true); + if(v2) + return v2; + } + return NULL; +} + +void DebuggerVariable::copy( DebuggerVariable * v, bool copychildren ) +{ + m_name = v->name(); + m_size = (v->isScalar() || copychildren ? v->size() : m_valueList.count()); + m_value = v->value(); + m_type = v->type(); + m_isReference = v->isReference(); + + // We cant just assign m_valuelist to v->values(), it would make a shallow copy... +// + if(copychildren) + { + m_valueList.clear(); + for(DebuggerVariable * v2 = v->values().first(); v2; v2 = v->values().next()) + m_valueList.append(new DebuggerVariable(v2, true)); + } +} + +void DebuggerVariable::append( DebuggerVariable * v ) +{ + m_valueList.append(v); +} + |