From abdc85f070989fb48b54b4675beffdcc6681ac79 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Thu, 13 Aug 2009 16:16:19 +0200 Subject: [PATCH] debugger: register view cosmetics Show the current number base in the view. --- src/plugins/debugger/cdb/cdbdebugengine.cpp | 21 +----- src/plugins/debugger/debuggeractions.cpp | 74 +-------------------- src/plugins/debugger/debuggeractions.h | 15 ----- src/plugins/debugger/debuggerplugin.cpp | 15 +---- src/plugins/debugger/gdb/gdbengine.cpp | 21 +----- src/plugins/debugger/registerhandler.cpp | 31 +++++++-- src/plugins/debugger/registerhandler.h | 4 +- src/plugins/debugger/registerwindow.cpp | 59 ++++++++-------- 8 files changed, 65 insertions(+), 175 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbdebugengine.cpp b/src/plugins/debugger/cdb/cdbdebugengine.cpp index 787926468b5..f14a4a72fd3 100644 --- a/src/plugins/debugger/cdb/cdbdebugengine.cpp +++ b/src/plugins/debugger/cdb/cdbdebugengine.cpp @@ -1320,28 +1320,9 @@ QList<Symbol> CdbDebugEngine::moduleSymbols(const QString &moduleName) return rc; } -static inline int registerFormatBase() -{ - switch(checkedRegisterFormatAction()) { - case FormatHexadecimal: - return 16; - case FormatDecimal: - return 10; - case FormatOctal: - return 8; - case FormatBinary: - return 2; - break; - case FormatRaw: - case FormatNatural: - break; - } - return 10; -} - void CdbDebugEngine::reloadRegisters() { - const int intBase = registerFormatBase(); + const int intBase = 10; if (debugCDB) qDebug() << Q_FUNC_INFO << intBase; QList<Register> registers; diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 0617307ba72..e411444c039 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -36,7 +36,6 @@ #include <QtCore/QSettings> #include <QtGui/QAction> -#include <QtGui/QActionGroup> #include <QtGui/QAbstractButton> #include <QtGui/QRadioButton> #include <QtGui/QCheckBox> @@ -54,7 +53,7 @@ namespace Internal { ////////////////////////////////////////////////////////////////////////// DebuggerSettings::DebuggerSettings(QObject *parent) - : QObject(parent), m_registerFormatGroup(0) + : QObject(parent) {} DebuggerSettings::~DebuggerSettings() @@ -222,68 +221,6 @@ DebuggerSettings *DebuggerSettings::instance() instance->insertItem(SynchronizeBreakpoints, item); - // - // Registers - // - - instance->m_registerFormatGroup = new QActionGroup(instance); - instance->m_registerFormatGroup->setExclusive(true); - - item = new SavedAction(instance); - item->setText(tr("Hexadecimal")); - item->setCheckable(true); - item->setSettingsKey(debugModeGroup, QLatin1String("FormatHexadecimal")); - item->setChecked(true); - item->setDefaultValue(false); - item->setData(FormatHexadecimal); - instance->insertItem(FormatHexadecimal, item); - instance->m_registerFormatGroup->addAction(item); - - item = new SavedAction(instance); - item->setText(tr("Decimal")); - item->setCheckable(true); - item->setSettingsKey(debugModeGroup, QLatin1String("FormatDecimal")); - item->setDefaultValue(false); - item->setData(FormatDecimal); - instance->insertItem(FormatDecimal, item); - instance->m_registerFormatGroup->addAction(item); - - item = new SavedAction(instance); - item->setText(tr("Octal")); - item->setCheckable(true); - item->setSettingsKey(debugModeGroup, QLatin1String("FormatOctal")); - item->setDefaultValue(false); - item->setData(FormatOctal); - instance->insertItem(FormatOctal, item); - instance->m_registerFormatGroup->addAction(item); - - item = new SavedAction(instance); - item->setText(tr("Binary")); - item->setCheckable(true); - item->setSettingsKey(debugModeGroup, QLatin1String("FormatBinary")); - item->setDefaultValue(false); - item->setData(FormatBinary); - instance->insertItem(FormatBinary, item); - instance->m_registerFormatGroup->addAction(item); - - item = new SavedAction(instance); - item->setText(tr("Raw")); - item->setCheckable(true); - item->setSettingsKey(debugModeGroup, QLatin1String("FormatRaw")); - item->setDefaultValue(false); - item->setData(FormatRaw); - instance->insertItem(FormatRaw, item); - instance->m_registerFormatGroup->addAction(item); - - item = new SavedAction(instance); - item->setText(tr("Natural")); - item->setCheckable(true); - item->setSettingsKey(debugModeGroup, QLatin1String("FormatNatural")); - item->setDefaultValue(true); - item->setData(FormatNatural); - instance->insertItem(FormatNatural, item); - instance->m_registerFormatGroup->addAction(item); - // // Settings // @@ -373,10 +310,6 @@ DebuggerSettings *DebuggerSettings::instance() return instance; } -int DebuggerSettings::checkedRegisterFormatAction() const -{ - return m_registerFormatGroup->checkedAction()->data().toInt(); -} ////////////////////////////////////////////////////////////////////////// // @@ -389,11 +322,6 @@ SavedAction *theDebuggerAction(int code) return DebuggerSettings::instance()->item(code); } -int checkedRegisterFormatAction() -{ - return DebuggerSettings::instance()->checkedRegisterFormatAction(); -} - bool theDebuggerBoolSetting(int code) { return DebuggerSettings::instance()->item(code)->value().toBool(); diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h index fa283bde6ad..83771460379 100644 --- a/src/plugins/debugger/debuggeractions.h +++ b/src/plugins/debugger/debuggeractions.h @@ -55,16 +55,12 @@ public: static DebuggerSettings *instance(); - // Return one of FormatHexadecimal, FormatDecimal,... - int checkedRegisterFormatAction() const; - public slots: void readSettings(QSettings *settings); void writeSettings(QSettings *settings) const; private: QHash<int, Core::Utils::SavedAction *> m_items; - QActionGroup *m_registerFormatGroup; }; @@ -120,22 +116,11 @@ enum DebuggerActionCode SelectedPluginBreakpoints, NoPluginBreakpoints, SelectedPluginBreakpointsPattern, - - // Registers - FormatHexadecimal, - FormatDecimal, - FormatOctal, - FormatBinary, - FormatRaw, - FormatNatural, }; // singleton access Core::Utils::SavedAction *theDebuggerAction(int code); -// Return one of FormatHexadecimal, FormatDecimal,... -int checkedRegisterFormatAction(); - // convenience bool theDebuggerBoolSetting(int code); QString theDebuggerStringSetting(int code); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index d9606327583..0ea4fd85003 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -762,20 +762,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess connect(resetToSimpleAction, SIGNAL(triggered()), m_manager, SLOT(setSimpleDockWidgetArrangement())); - connect(theDebuggerAction(FormatHexadecimal), SIGNAL(triggered()), - m_manager, SLOT(reloadRegisters())); - connect(theDebuggerAction(FormatDecimal), SIGNAL(triggered()), - m_manager, SLOT(reloadRegisters())); - connect(theDebuggerAction(FormatOctal), SIGNAL(triggered()), - m_manager, SLOT(reloadRegisters())); - connect(theDebuggerAction(FormatBinary), SIGNAL(triggered()), - m_manager, SLOT(reloadRegisters())); - connect(theDebuggerAction(FormatRaw), SIGNAL(triggered()), - m_manager, SLOT(reloadRegisters())); - connect(theDebuggerAction(FormatNatural), SIGNAL(triggered()), - m_manager, SLOT(reloadRegisters())); - - // FIXME: + // FIXME: addAutoReleasedObject(new CommonOptionsPage); addAutoReleasedObject(new DebuggingHelperOptionPage); foreach (Core::IOptionsPage* op, engineOptionPages) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index a327bf9ad5e..3a023e97ccd 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -2652,28 +2652,9 @@ void GdbEngine::handleStackListThreads(const GdbResultRecord &record, const QVar // ////////////////////////////////////////////////////////////////////// -static inline char registerFormatChar() -{ - switch(checkedRegisterFormatAction()) { - case FormatHexadecimal: - return 'x'; - case FormatDecimal: - return 'd'; - case FormatOctal: - return 'o'; - case FormatBinary: - return 't'; - case FormatRaw: - return 'r'; - default: - break; - } - return 'N'; -} - void GdbEngine::reloadRegisters() { - postCommand(_("-data-list-register-values ") + _c(registerFormatChar()), + postCommand(_("-data-list-register-values d"), Discardable, CB(handleRegisterListValues)); } diff --git a/src/plugins/debugger/registerhandler.cpp b/src/plugins/debugger/registerhandler.cpp index 63300d675b5..0ae29a4569c 100644 --- a/src/plugins/debugger/registerhandler.cpp +++ b/src/plugins/debugger/registerhandler.cpp @@ -50,8 +50,9 @@ using namespace Debugger::Constants; ////////////////////////////////////////////////////////////////// RegisterHandler::RegisterHandler(QObject *parent) - : QAbstractTableModel(parent) -{} + : QAbstractTableModel(parent), m_base(16) +{ +} int RegisterHandler::rowCount(const QModelIndex &parent) const { @@ -66,19 +67,33 @@ int RegisterHandler::columnCount(const QModelIndex &parent) const QVariant RegisterHandler::data(const QModelIndex &index, int role) const { static const QVariant red = QColor(200, 0, 0); + + if (role == Qt::UserRole) + return m_base; + if (!index.isValid() || index.row() >= m_registers.size()) return QVariant(); const Register ® = m_registers.at(index.row()); + const QString padding = " "; if (role == Qt::DisplayRole) { switch (index.column()) { - case 0: return reg.name; - case 1: return reg.value; + case 0: return padding + reg.name + padding; + case 1: { + bool ok = true; + qulonglong value = reg.value.toULongLong(&ok, 0); + return padding + QString::number(value, m_base) + padding; + } } } + + if (role == Qt::TextAlignmentRole && index.column() == 1) + return Qt::AlignRight; + if (role == Qt::TextColorRole && reg.changed && index.column() == 1) return red; + return QVariant(); } @@ -88,7 +103,7 @@ QVariant RegisterHandler::headerData(int section, Qt::Orientation orientation, if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { switch (section) { case 0: return tr("Name"); - case 1: return tr("Value"); + case 1: return tr("Value (base %1)").arg(m_base); }; } return QVariant(); @@ -115,3 +130,9 @@ QList<Register> RegisterHandler::registers() const { return m_registers; } + +void RegisterHandler::setNumberBase(int base) +{ + m_base = base; + emit reset(); +} diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h index dba7f0e619a..450d56a2b39 100644 --- a/src/plugins/debugger/registerhandler.h +++ b/src/plugins/debugger/registerhandler.h @@ -60,6 +60,7 @@ public: void setRegisters(const QList<Register> ®isters); QList<Register> registers() const; void removeAll(); + Q_SLOT void setNumberBase(int base); private: int rowCount(const QModelIndex &parent = QModelIndex()) const; @@ -67,8 +68,9 @@ private: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - + QList<Register> m_registers; + int m_base; }; } // namespace Internal diff --git a/src/plugins/debugger/registerwindow.cpp b/src/plugins/debugger/registerwindow.cpp index 92d29d06222..6f3ab0fb460 100644 --- a/src/plugins/debugger/registerwindow.cpp +++ b/src/plugins/debugger/registerwindow.cpp @@ -67,46 +67,51 @@ void RegisterWindow::resizeEvent(QResizeEvent *ev) void RegisterWindow::contextMenuEvent(QContextMenuEvent *ev) { - enum { Adjust, AlwaysAdjust, Reload, AlwaysReload, Count }; - QMenu menu; - QAction *actions[Count]; - //QString format = model()->property(PROPERTY_REGISTER_FORMAT).toString(); - //qDebug() << "FORMAT: " << format; - - actions[Adjust] = menu.addAction(tr("Adjust column widths to contents")); - - actions[AlwaysAdjust] = menu.addAction(tr("Always adjust column widths to contents")); - actions[AlwaysAdjust]->setCheckable(true); - actions[AlwaysAdjust]->setChecked(m_alwaysResizeColumnsToContents); - - actions[Reload] = menu.addAction(tr("Reload register listing")); - actions[AlwaysReload] = menu.addAction(tr("Always reload register listing")); - actions[AlwaysReload]->setCheckable(true); - actions[AlwaysReload]->setChecked(m_alwaysReloadContents); + QAction *actAdjust = menu.addAction(tr("Adjust column widths to contents")); + QAction *actAlwaysAdjust = + menu.addAction(tr("Always adjust column widths to contents")); + actAlwaysAdjust->setCheckable(true); + actAlwaysAdjust->setChecked(m_alwaysResizeColumnsToContents); + QAction *actReload = menu.addAction(tr("Reload register listing")); + QAction *actAlwaysReload = menu.addAction(tr("Always reload register listing")); + actAlwaysReload->setCheckable(true); + actAlwaysReload->setChecked(m_alwaysReloadContents); menu.addSeparator(); - menu.addAction(theDebuggerAction(FormatHexadecimal)); - menu.addAction(theDebuggerAction(FormatDecimal)); - menu.addAction(theDebuggerAction(FormatOctal)); - menu.addAction(theDebuggerAction(FormatBinary)); - menu.addAction(theDebuggerAction(FormatRaw)); - menu.addAction(theDebuggerAction(FormatNatural)); + int base = model()->data(QModelIndex(), Qt::UserRole).toInt(); + QAction *act16 = menu.addAction(tr("Hexadecimal")); + act16->setCheckable(true); + act16->setChecked(base == 16); + QAction *act10 = menu.addAction(tr("Decimal")); + act10->setCheckable(true); + act10->setChecked(base == 10); + QAction *act8 = menu.addAction(tr("Octal")); + act8->setCheckable(true); + act8->setChecked(base == 8); + QAction *act2 = menu.addAction(tr("Binary")); + act2->setCheckable(true); + act2->setChecked(base == 2); menu.addSeparator(); + menu.addAction(theDebuggerAction(SettingsDialog)); QAction *act = menu.exec(ev->globalPos()); - - if (act == actions[Adjust]) + + if (act == actAdjust) resizeColumnsToContents(); - else if (act == actions[AlwaysAdjust]) + else if (act == actAlwaysAdjust) setAlwaysResizeColumnsToContents(!m_alwaysResizeColumnsToContents); - else if (act == actions[Reload]) + else if (act == actReload) reloadContents(); - else if (act == actions[AlwaysReload]) + else if (act == actAlwaysReload) setAlwaysReloadContents(!m_alwaysReloadContents); + else if (act) { + base = (act == act10 ? 10 : act == act8 ? 8 : act == act2 ? 2 : 16); + QMetaObject::invokeMethod(model(), "setNumberBase", Q_ARG(int, base)); + } } void RegisterWindow::resizeColumnsToContents() -- GitLab