diff options
| author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 | 
|---|---|---|
| committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 | 
| commit | e9ae80694875f869892f13f4fcaf1170a00dea41 (patch) | |
| tree | aa2f8d8a217e2d376224c8d46b7397b68d35de2d /quanta/components/debugger/variableslistview.cpp | |
| download | tdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.tar.gz tdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.zip | |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdewebdev@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'quanta/components/debugger/variableslistview.cpp')
| -rw-r--r-- | quanta/components/debugger/variableslistview.cpp | 290 | 
1 files changed, 290 insertions, 0 deletions
| diff --git a/quanta/components/debugger/variableslistview.cpp b/quanta/components/debugger/variableslistview.cpp new file mode 100644 index 00000000..c9d77de3 --- /dev/null +++ b/quanta/components/debugger/variableslistview.cpp @@ -0,0 +1,290 @@ +/*************************************************************************** +                          variableslistview.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.                                    * + *                                                                          * + ***************************************************************************/ + +// KDE Includes +#include <klocale.h> +#include <kdebug.h> +#include <kiconloader.h> +#include <kdeversion.h> +#include <kinputdialog.h> +#include <qclipboard.h> + +// Quanta includes +#include "variableslistview.h" +#include "debuggervariable.h" +#include "resource.h" +#include "quanta.h" +#include "messageoutput.h" +#include "debuggerclient.h" +#include "debuggermanager.h" + +namespace VariablesListViewColumns +{ +  // The enums must correspond to the order of the columns +  // If you change here, change the column adding +  enum Columns +  { +    Name = 0, +    Status, +    Value, +    Type, +    Size + +  }; +} + +VariablesListView::VariablesListView(QWidget *parent, const char *name) +    : KListView(parent, name) +{ +  // If you change here, change the VariablesListViewColumns enums above +  addColumn(i18n("Name")); +  addColumn(QString::null); +  addColumn(i18n("Value")); +  addColumn(i18n("Type")); +  addColumn(i18n("Size")); +  setRootIsDecorated(true); +  setSorting(-1); // No sorting +   +  m_variablePopup = new KPopupMenu(this); +  m_variablePopup->insertItem(SmallIcon("editdelete"), i18n("&Remove"), this, SLOT(slotRemoveSelected()), 0, removeWatch); + +  if(quantaApp->debugger()->client()->supports(DebuggerClientCapabilities::VariableSetValue)) +    m_variablePopup->insertItem(SmallIcon("edit"), i18n("&Set Value"), this, SLOT(slotVariableSetValue()), 0, setValue); + +  m_variablePopup->insertItem(SmallIcon("viewmag"), i18n("&Dump in Messages Log"), this, SLOT(slotVariableDump()), 0, dumpValue); +   +  m_variablePopup->insertItem(SmallIcon("editcopy"), i18n("&Copy to Clipboard"), this, SLOT(slotVariableCopyToClipboard()), 0, copyValue); + +  connect(this, SIGNAL( contextMenu( KListView *, QListViewItem *, const QPoint & ) ), this, SLOT(slotVariableContextMenu(KListView *, QListViewItem *, const QPoint &))); +} + + +VariablesListView::~VariablesListView() +{} + +DebuggerVariable* VariablesListView::selected(bool traverse) +{ +  if(!selectedItem()) +    return NULL; + +  DebuggerVariable* v, *found; +  for( v = m_variablesList.first(); v; v = m_variablesList.next()) +  { +    found = v->findItem(selectedItem(), traverse); +    if(found) +      return found; +  } +   +  return NULL; +} + +void VariablesListView::slotRemoveSelected() +{ +  DebuggerVariable* v = selected(); + +  if(!v) +    return; + +  emit removeVariable(v); +  m_variablesList.remove(v); +  delete v; +} + +void VariablesListView::keyPressEvent(QKeyEvent *e) +{ +  if(e->key() != Qt::Key_Delete) +  { +    e->ignore(); +    return; +  } + +  DebuggerVariable* v = selected(); + +  if(!v) +    return; + +  emit removeVariable(v); +  m_variablesList.remove(v); +  delete v; +} + +void VariablesListView::addVariable(DebuggerVariable* variable) +{  +  if(!variable) +  { +    kdDebug(24002) << k_funcinfo << " Tried to show NULL variable!" << endl; +    return; +  } + +  // Find the old variable in the tree if it is there  +  for(DebuggerVariable* v = m_variablesList.first(); v; v = m_variablesList.next()) +  { +    if(v->name() == variable->name()) +    { +      replaceVariable(v, variable); +      return; +    } +  } + +  // Insert the new variable +  DebuggerVariable *newvar = new DebuggerVariable(variable); +  m_variablesList.append(newvar); + +  KListViewItem * item = new KListViewItem(this); +  insertItem(item); +  newvar->setItem(item); +  replaceVariable(newvar, variable); +} + +void VariablesListView::clear() +{ +  KListView::clear(); +  m_variablesList.clear(); +} + +void VariablesListView::replaceVariable(DebuggerVariable* oldvar, DebuggerVariable* newvar) +{  +  KListViewItem * item; +   +  // Remove children that doesen't exist anymore +  QPtrList<DebuggerVariable> oldlist = oldvar->values(); +  for(DebuggerVariable* oldchild = oldlist.last(); oldchild; oldchild = oldlist.prev()) +  { +    bool found = false; +    QPtrList<DebuggerVariable> newlist = newvar->values(); +    for(DebuggerVariable* newchild = newlist.last(); newchild; newchild = newlist.prev()) +    { +      if(newchild->name() == oldchild->name()) +      { +        found = true; +        break; +      } +    } +    if(!found) +      oldvar->deleteChild(oldchild); +  } + +  // Update and add children +  QPtrList<DebuggerVariable> newlist = newvar->values(); +  for(DebuggerVariable* newchild = newlist.last(); newchild; newchild = newlist.prev()) +  { +    bool found = false; +    QPtrList<DebuggerVariable> oldlist = oldvar->values(); +    for(DebuggerVariable* oldchild = oldlist.last(); oldchild; oldchild = oldlist.prev())   +    { +      if(newchild->name() == oldchild->name()) +      { +        found = true; +        replaceVariable( oldchild, newchild); +        break; +      } +    } +    if(!found) +    { +      DebuggerVariable* child = new DebuggerVariable(); +      item = new KListViewItem(oldvar->item()); +      child->setItem(item); +      replaceVariable( child, newchild); +      oldvar->append(child); +    } +  } +   +  item = oldvar->item(); +   +  if(oldvar->value() != newvar->value()) +    item->setPixmap(VariablesListViewColumns::Status, SmallIcon("ok")); +  else +    item->setPixmap(VariablesListViewColumns::Status, KPixmap()); +   +  oldvar->copy(newvar, false); +   +  item->setText(VariablesListViewColumns::Name, oldvar->name()); +  item->setText(VariablesListViewColumns::Type, oldvar->typeName()); +  item->setText(VariablesListViewColumns::Size, oldvar->sizeName()); +  item->setText(VariablesListViewColumns::Value, (newvar->isScalar() ? oldvar->value() : QString())); +   +} + +void VariablesListView::slotVariableContextMenu(KListView *, QListViewItem *, const QPoint& point) +{ +  if(!selectedItem()) +    return; + +  m_variablePopup->setItemEnabled(removeWatch, selected()); +  if(quantaApp->debugger()->client()->supports(DebuggerClientCapabilities::VariableSetValue)) +    m_variablePopup->setItemEnabled(setValue, selected()); + +  DebuggerVariable *v = selected(true); +  m_variablePopup->setItemEnabled(dumpValue, v && v->isScalar()); +  m_variablePopup->setItemEnabled(copyValue, v && v->isScalar()); + +  m_variablePopup->popup(point); +} + +void VariablesListView::slotVariableSetValue() +{ +  if(!selected()) +    return; + +  DebuggerVariable v(selected()); + +  QString newvalue; +  switch(v.type()) +  { +    case DebuggerVariableTypes::String: +      newvalue = "\"" + v.value() + "\""; +      break; + +    case DebuggerVariableTypes::Float: +    case DebuggerVariableTypes::Boolean: +    case DebuggerVariableTypes::Integer: +    //case DebuggerVariableTypes::Array: +      newvalue = v.value(); +      break; + +    default: +      newvalue = ""; +  } +  newvalue = KInputDialog::getMultiLineText(i18n("Set Variable"), i18n("New value:"), newvalue, 0, this); +  if(newvalue.isNull()) +    return; + +  v.setValue(newvalue); +  quantaApp->debugger()->client()->variableSetValue(v); + +} + +void VariablesListView::slotVariableDump( ) +{ +  DebuggerVariable *v = selected(true); +  if(!v) +    return; + +  quantaApp->messageOutput()->showMessage(i18n("Contents of variable %1:\n>>>\n").arg(v->name())); +  quantaApp->messageOutput()->showMessage(v->value()); +  quantaApp->messageOutput()->showMessage("<<<\n"); +} + +void VariablesListView::slotVariableCopyToClipboard( ) +{ +  DebuggerVariable *v = selected(true); +  if(!v) +    return; +  QApplication::clipboard()->setText(v->value()); +} + +#include "variableslistview.moc" | 
