Index: debuggers/gdb/CMakeLists.txt =================================================================== --- debuggers/gdb/CMakeLists.txt +++ debuggers/gdb/CMakeLists.txt @@ -1,4 +1,17 @@ project(gdb) + +find_package( OktetaCore ) +set_package_properties(KastenControllers PROPERTIES + PURPOSE "Required for building MemoryViewer Widget." + URL "http://kde.org/" + TYPE OPTIONAL) + +find_package(OktetaGui) +set_package_properties(OktetaGui PROPERTIES + PURPOSE "Required for building MemoryViewer Widget." + URL "http://kde.org/" + TYPE OPTIONAL) + add_definitions(-DTRANSLATION_DOMAIN=\"kdevgdb\") add_subdirectory(unittests) @@ -23,8 +36,23 @@ gdbvariable.cpp ) -if(OKTETA_FOUND) - add_definitions(-DWITH_OKTETA=1) +set(kdevtest_gdb_LINK_LIBS + Qt5::Test + KDev::Shell + KDev::Interfaces + KDev::Project + KDev::Debugger + KDev::Tests + KDev::Util + KF5::KIOWidgets + KF5::TextEditor + KF5::Parts + kdevdebuggercommon +) + + +if (OktetaGui_FOUND AND OktetaCore_FOUND) + add_definitions(-DWITH_MEMVIEW=1) list(APPEND kdevgdb_SRCS memviewdlg.cpp) endif() @@ -38,6 +66,13 @@ ki18n_wrap_ui(kdevgdb_SRCS ${kdevgdb_UI}) qt5_add_resources(kdevgdb_SRCS kdevgdb.qrc) kdevplatform_add_plugin(kdevgdb JSON kdevgdb.json SOURCES ${kdevgdb_SRCS}) + +if(OktetaGui_FOUND AND OktetaCore_FOUND) + target_link_libraries(kdevgdb okteta2core okteta2gui) + list(APPEND kdevtest_gdb_LINK_LIBS + okteta2core okteta2gui) +endif() + target_link_libraries(kdevgdb KDev::Sublime KDev::Interfaces @@ -53,18 +88,7 @@ set(test_gdb_SRCS unittests/test_gdb.cpp ${kdevgdb_SRCS}) ecm_add_test(${test_gdb_SRCS} TEST_NAME test_gdb - LINK_LIBRARIES - Qt5::Test - KDev::Shell - KDev::Interfaces - KDev::Project - KDev::Debugger - KDev::Tests - KDev::Util - KF5::KIOWidgets - KF5::TextEditor - KF5::Parts - kdevdebuggercommon + LINK_LIBRARIES ${kdevtest_gdb_LINK_LIBS} ) if (HAVE_PATH_WITH_SPACES_TEST) Index: debuggers/gdb/debuggerplugin.cpp =================================================================== --- debuggers/gdb/debuggerplugin.cpp +++ debuggers/gdb/debuggerplugin.cpp @@ -80,7 +80,7 @@ i18n("GDB"), gdbfactory); -#ifndef WITH_OKTETA +#ifndef WITH_MEMVIEW memoryviewerfactory = nullptr; #else memoryviewerfactory = new DebuggerToolFactory( Index: debuggers/gdb/memviewdlg.h =================================================================== --- debuggers/gdb/memviewdlg.h +++ debuggers/gdb/memviewdlg.h @@ -13,22 +13,29 @@ * * ***************************************************************************/ -#ifndef _MEMVIEW_H_ -#define _MEMVIEW_H_ +#ifndef MEMVIEW_H_ +#define MEMVIEW_H_ #include "dbgglobal.h" #include "mi/mi.h" #include #include +namespace Okteta { +class ByteArrayModel; +} +namespace Okteta { +class ByteArrayColumnView; +} namespace KDevelop { class IDebugSession; } class QLineEdit; class QToolBox; +class QPushButton; namespace KDevMI { @@ -38,6 +45,26 @@ class MemoryView; class GDBController; + /** Container for controls that select memory range. + * + The memory range selection is embedded into memory view widget, + it's not a standalone dialog. However, we want to have easy way + to hide/show all controls, so we group them in this class. + */ + class MemoryRangeSelector : public QWidget + { + Q_OBJECT + MemoryRangeSelector(QWidget* parent); + private: + QLineEdit* startAddressLineEdit; + QLineEdit* amountLineEdit; + QPushButton* okButton; + QPushButton* cancelButton; + + friend class MemoryView; + }; + + class MemoryViewerWidget : public QWidget { Q_OBJECT @@ -57,8 +84,8 @@ void slotChildDestroyed(QObject* child); private: // Data - QToolBox* toolBox_; - QList memoryViews_; + QToolBox* m_toolBox; + QList m_memoryViews; }; class MemoryView : public QWidget @@ -77,20 +104,16 @@ void memoryRead(const MI::ResultRecord& r); + // Returns true is we successfully created the memoryView, and + // can work. + bool isOk() const; + private Q_SLOTS: void memoryEdited(int start, int end); /** Informs the view about changes in debugger state. * Allows view to disable itself when debugger is not running. */ void slotStateChanged(DBGStateFlags oldState, DBGStateFlags newState); - private: - // Returns true is we successfully created the hexeditor, and so - // can work. - bool isOk() const; - - - - private Q_SLOTS: /** Invoked when user has changed memory range. Gets memory for the new range. */ void slotChangeMemoryRange(); @@ -100,19 +123,18 @@ private: // QWidget overrides void contextMenuEvent(QContextMenuEvent* e) override; - private: void initWidget(); - private: - class MemoryRangeSelector* rangeSelector_; - QWidget* khexedit2_widget; + MemoryRangeSelector* m_rangeSelector; + Okteta::ByteArrayModel *m_memViewModel; + Okteta::ByteArrayColumnView *m_memViewView; - uint amount_; - quintptr start_; - QString startAsString_, amountAsString_; - char* data_; + uint m_memAmount; + quintptr m_memStart; + QString m_memStartStr, m_memAmountStr; + char* m_memData; + int m_debuggerState; - int debuggerState_; private slots: void currentSessionChanged(KDevelop::IDebugSession* session); }; Index: debuggers/gdb/memviewdlg.cpp =================================================================== --- debuggers/gdb/memviewdlg.cpp +++ debuggers/gdb/memviewdlg.cpp @@ -25,9 +25,8 @@ #include #include -#include -#include -#include +#include +#include #include #include @@ -48,73 +47,58 @@ using namespace KDevMI::GDB; using KDevMI::MI::CommandType; -/** Container for controls that select memory range. - - The memory range selection is embedded into memory view widget, - it's not a standalone dialog. However, we want to have easy way - to hide/show all controls, so we group them in this class. -*/ -class MemoryRangeSelector : public QWidget +MemoryRangeSelector::MemoryRangeSelector(QWidget* parent) +: QWidget(parent) { -public: - QLineEdit* startAddressLineEdit; - QLineEdit* amountLineEdit; - QPushButton* okButton; - QPushButton* cancelButton; - - MemoryRangeSelector(QWidget* parent) - : QWidget(parent) - { - QVBoxLayout* l = new QVBoxLayout(this); + QVBoxLayout* l = new QVBoxLayout(); - // Grid layout: labels + address field - QGridLayout* gl = new QGridLayout(this); - l->addLayout(gl); + // Grid layout: labels + address field + QGridLayout* gl = new QGridLayout(); + l->addLayout(gl); - QLabel* l1 = new QLabel(i18n("Start"), this); - gl->addWidget(l1, 0, 1); + QLabel* l1 = new QLabel(i18n("Start")); + gl->addWidget(l1, 0, 1); - startAddressLineEdit = new QLineEdit(this); - gl->addWidget(startAddressLineEdit, 0, 3); + startAddressLineEdit = new QLineEdit(); + gl->addWidget(startAddressLineEdit, 0, 3); - QLabel* l2 = new QLabel(i18n("Amount"), this); - gl->addWidget(l2, 2, 1); + QLabel* l2 = new QLabel(i18n("Amount")); + gl->addWidget(l2, 2, 1); - amountLineEdit = new QLineEdit(this); - gl->addWidget(amountLineEdit, 2, 3); + amountLineEdit = new QLineEdit(); + gl->addWidget(amountLineEdit, 2, 3); - l->addSpacing(2); + l->addSpacing(2); - QHBoxLayout* hb = new QHBoxLayout(this); - l->addLayout(hb); - hb->addStretch(); + QHBoxLayout* hb = new QHBoxLayout(); + l->addLayout(hb); + hb->addStretch(); - okButton = new QPushButton(i18n("OK"), this); - hb->addWidget(okButton); + okButton = new QPushButton(i18n("OK")); + hb->addWidget(okButton); - cancelButton = new QPushButton(i18n("Cancel"), this); - hb->addWidget(cancelButton); + cancelButton = new QPushButton(i18n("Cancel")); + hb->addWidget(cancelButton); - l->addSpacing(2); - setLayout(l); - - connect(startAddressLineEdit, SIGNAL(returnPressed()), - okButton, SLOT(animateClick())); - - connect(amountLineEdit, SIGNAL(returnPressed()), - okButton, SLOT(animateClick())); - } -}; + l->addSpacing(2); + setLayout(l); + connect(startAddressLineEdit, &QLineEdit::returnPressed, [=]() { + okButton->animateClick(); + }); + connect(amountLineEdit, &QLineEdit::returnPressed, [=]() { + okButton->animateClick(); + }); +} MemoryView::MemoryView(QWidget* parent) : QWidget(parent), // New memory view can be created only when debugger is active, // so don't set s_appNotStarted here. - khexedit2_widget(0), - amount_(0), data_(0), - debuggerState_(0) + m_memViewView(0), + m_memAmount(0), m_memData(0), + m_debuggerState(0) { setWindowTitle(i18n("Memory view")); emit captionChanged(windowTitle()); @@ -124,18 +108,21 @@ if (isOk()) slotEnableOrDisable(); - connect(KDevelop::ICore::self()->debugController(), - SIGNAL(currentSessionChanged(KDevelop::IDebugSession*)), - SLOT(currentSessionChanged(KDevelop::IDebugSession*))); + KDevelop::IDebugController* pDC = KDevelop::ICore::self()->debugController(); + Q_ASSERT(pDC); + + connect(pDC, + &KDevelop::IDebugController::currentSessionChanged, + this, &MemoryView::currentSessionChanged); } void MemoryView::currentSessionChanged(KDevelop::IDebugSession* s) { DebugSession *session = qobject_cast(s); if (!session) return; - connect(session, - SIGNAL(gdbStateChanged(DBGStateFlags,DBGStateFlags)), - SLOT(slotStateChanged(DBGStateFlags,DBGStateFlags))); + + connect(session, &DebugSession::debuggerStateChanged, + this, &MemoryView::slotStateChanged); } void MemoryView::slotStateChanged(DBGStateFlags oldState, DBGStateFlags newState) @@ -149,133 +136,119 @@ QVBoxLayout *l = new QVBoxLayout(this); l->setContentsMargins(0, 0, 0, 0); - khexedit2_widget = KHE::createBytesEditWidget(this); - if (!khexedit2_widget) - { - QTextEdit* edit = new QTextEdit(this); - l->addWidget(edit); + m_memViewModel = new Okteta::ByteArrayModel; + m_memViewView = new Okteta::ByteArrayColumnView(this); + m_memViewView->setByteArrayModel(m_memViewModel); - edit->setText( - "

Not Available

" - "

Could not open a KHexEdit2 interface. " - "Installing Okteta should provide the required components.

"); - return; - } + m_memViewModel->setReadOnly(false); + m_memViewView->setReadOnly(false); + m_memViewView->setOverwriteMode(true); + m_memViewView->setOverwriteOnly(true); + m_memViewModel->setAutoDelete(false); - KHE::BytesEditInterface *bytesEdit = KHE::bytesEditInterface(khexedit2_widget); - if (bytesEdit) - { - bytesEdit->setReadOnly(false); - bytesEdit->setOverwriteMode(true); - bytesEdit->setOverwriteOnly(true); - bytesEdit->setAutoDelete(false); - } + m_memViewView->setValueCoding( Okteta::ByteArrayColumnView::HexadecimalCoding ); + m_memViewView->setNoOfGroupedBytes(4); + m_memViewView->setByteSpacingWidth(2); + m_memViewView->setGroupSpacingWidth(12); + //m_memViewView->setResizeStyle(); - Currently not able to see which function I need to call here - KHE::ValueColumnInterface *valueColumn = KHE::valueColumnInterface(khexedit2_widget); - if (valueColumn) - { - valueColumn->setCoding(KHE::ValueColumnInterface::HexadecimalCoding); - valueColumn->setNoOfGroupedBytes(4); - valueColumn->setByteSpacingWidth(2); - valueColumn->setGroupSpacingWidth(12); - valueColumn->setResizeStyle(KHE::ValueColumnInterface::LockGrouping); - } - KHE::CharColumnInterface *charColumn = KHE::charColumnInterface(khexedit2_widget); - if(charColumn) - { - charColumn->setShowUnprintable(false); - charColumn->setSubstituteChar('*'); - } + m_memViewView->setShowsNonprinting(false); + m_memViewView->setSubstituteChar('*'); - rangeSelector_ = new MemoryRangeSelector(this); - l->addWidget(rangeSelector_); + m_rangeSelector = new MemoryRangeSelector(this); + l->addWidget(m_rangeSelector); - connect(rangeSelector_->okButton, SIGNAL(clicked()), - this, SLOT(slotChangeMemoryRange())); + connect(m_rangeSelector->okButton, &QPushButton::clicked, + this, &MemoryView::slotChangeMemoryRange); - connect(rangeSelector_->cancelButton, SIGNAL(clicked()), - this, SLOT(slotHideRangeDialog())); + connect(m_rangeSelector->cancelButton, &QPushButton::clicked, + this, &MemoryView::slotHideRangeDialog); - connect(rangeSelector_->startAddressLineEdit, - SIGNAL(textChanged(QString)), + connect(m_rangeSelector->startAddressLineEdit, + &QLineEdit::textChanged, this, - SLOT(slotEnableOrDisable())); + &MemoryView::slotEnableOrDisable); - connect(rangeSelector_->amountLineEdit, - SIGNAL(textChanged(QString)), + connect(m_rangeSelector->amountLineEdit, + &QLineEdit::textChanged, this, - SLOT(slotEnableOrDisable())); + &MemoryView::slotEnableOrDisable); - l->addWidget(khexedit2_widget); + l->addWidget(m_memViewView); } void MemoryView::debuggerStateChanged(DBGStateFlags state) { if (isOk()) { - debuggerState_ = state; + m_debuggerState = state; slotEnableOrDisable(); } } void MemoryView::slotHideRangeDialog() { - rangeSelector_->hide(); + m_rangeSelector->hide(); } void MemoryView::slotChangeMemoryRange() { DebugSession *session = qobject_cast( KDevelop::ICore::self()->debugController()->currentSession()); if (!session) return; - QString amount = rangeSelector_->amountLineEdit->text(); + QString amount = m_rangeSelector->amountLineEdit->text(); if(amount.isEmpty()) - amount = QString("sizeof(%1)").arg(rangeSelector_->startAddressLineEdit->text()); + amount = QString("sizeof(%1)").arg(m_rangeSelector->startAddressLineEdit->text()); - session->addCommand(new ExpressionValueCommand(amount, this, &MemoryView::sizeComputed)); + session->addCommand(new MI::ExpressionValueCommand(amount, this, &MemoryView::sizeComputed)); } void MemoryView::sizeComputed(const QString& size) { DebugSession *session = qobject_cast( KDevelop::ICore::self()->debugController()->currentSession()); if (!session) return; - session->addCommand(new GDBCommand(MI::DataReadMemory, + session->addCommand(MI::DataReadMemory, QString("%1 x 1 1 %2") - .arg(rangeSelector_->startAddressLineEdit->text()) + .arg(m_rangeSelector->startAddressLineEdit->text()) .arg(size), this, - &MemoryView::memoryRead)); + &MemoryView::memoryRead); } void MemoryView::memoryRead(const MI::ResultRecord& r) { const MI::Value& content = r["memory"][0]["data"]; bool startStringConverted; - start_ = r["addr"].literal().toULongLong(&startStringConverted, 16); - amount_ = content.size(); + m_memStart = r["addr"].literal().toULongLong(&startStringConverted, 16); + m_memAmount = content.size(); - startAsString_ = rangeSelector_->startAddressLineEdit->text(); - amountAsString_ = rangeSelector_->amountLineEdit->text(); + m_memStartStr = m_rangeSelector->startAddressLineEdit->text(); + m_memAmountStr = m_rangeSelector->amountLineEdit->text(); - setWindowTitle(i18np("%2 (1 byte)","%2 (%1 bytes)",amount_,startAsString_)); + setWindowTitle(i18np("%2 (1 byte)","%2 (%1 bytes)",m_memAmount,m_memStartStr)); emit captionChanged(windowTitle()); - KHE::BytesEditInterface* bytesEditor = KHE::bytesEditInterface(khexedit2_widget); - bytesEditor->setData(this->data_, 0); - - delete[] this->data_; - this->data_ = new char[amount_]; + delete[] this->m_memData; + this->m_memData = new char[m_memAmount]; for(int i = 0; i < content.size(); ++i) { - this->data_[i] = content[i].literal().toInt(0, 16); + this->m_memData[i] = content[i].literal().toInt(0, 16); } - bytesEditor->setData(this->data_, amount_); + Okteta::ByteArrayModel* OldModel = m_memViewModel; + m_memViewModel = new Okteta::ByteArrayModel( reinterpret_cast(this->m_memData), m_memAmount ); + + // get attributes + m_memViewModel->setReadOnly( OldModel->isReadOnly() ); + m_memViewModel->setAutoDelete( OldModel->autoDelete() ); + + m_memViewView->setByteArrayModel( m_memViewModel ); + delete OldModel; slotHideRangeDialog(); } @@ -289,62 +262,59 @@ for(int i = start; i <= end; ++i) { - session->addCommand(new GDBCommand(MI::GdbSet, + session->addCommand(MI::GdbSet, QString("*(char*)(%1 + %2) = %3") - .arg(start_) + .arg(m_memStart) .arg(i) - .arg(QString::number(data_[i])))); + .arg(QString::number(m_memData[i]))); } } void MemoryView::contextMenuEvent(QContextMenuEvent *e) { if (!isOk()) return; - KHE::BytesEditInterface *bytesEdit = KHE::bytesEditInterface(khexedit2_widget); - KHE::ValueColumnInterface *valueColumn = KHE::valueColumnInterface(khexedit2_widget); - QMenu menu; - bool app_running = !(debuggerState_ & s_appNotStarted); + bool app_running = !(m_debuggerState & s_appNotStarted); QAction* reload = menu.addAction(i18n("&Reload")); reload->setIcon(QIcon::fromTheme("view-refresh")); - reload->setEnabled(app_running && amount_ != 0); + reload->setEnabled(app_running && m_memAmount != 0); QActionGroup *formatGroup = NULL; QActionGroup *groupingGroup = NULL; - if (valueColumn) + if (m_memViewModel && m_memViewView) { // make Format menu with action group QMenu *formatMenu = new QMenu(i18n("&Format")); formatGroup = new QActionGroup(formatMenu); QAction *binary = formatGroup->addAction(i18n("&Binary")); - binary->setData(KHE::ValueColumnInterface::BinaryCoding); + binary->setData(Okteta::ByteArrayColumnView::BinaryCoding); binary->setShortcut(Qt::Key_B); formatMenu->addAction(binary); QAction *octal = formatGroup->addAction(i18n("&Octal")); - octal->setData(KHE::ValueColumnInterface::OctalCoding); + octal->setData(Okteta::ByteArrayColumnView::OctalCoding); octal->setShortcut(Qt::Key_O); formatMenu->addAction(octal); QAction *decimal = formatGroup->addAction(i18n("&Decimal")); - decimal->setData(KHE::ValueColumnInterface::DecimalCoding); + decimal->setData(Okteta::ByteArrayColumnView::DecimalCoding); decimal->setShortcut(Qt::Key_D); formatMenu->addAction(decimal); QAction *hex = formatGroup->addAction(i18n("&Hexadecimal")); - hex->setData(KHE::ValueColumnInterface::HexadecimalCoding); + hex->setData(Okteta::ByteArrayColumnView::HexadecimalCoding); hex->setShortcut(Qt::Key_H); formatMenu->addAction(hex); foreach(QAction* act, formatGroup->actions()) { act->setCheckable(true); - act->setChecked(act->data().toInt() == valueColumn->coding()); + act->setChecked(act->data().toInt() == m_memViewView->valueCoding()); act->setShortcutContext(Qt::WidgetWithChildrenShortcut); } @@ -388,19 +358,19 @@ foreach(QAction* act, groupingGroup->actions()) { act->setCheckable(true); - act->setChecked(act->data().toInt() == valueColumn->noOfGroupedBytes()); + act->setChecked(act->data().toInt() == m_memViewView->noOfGroupedBytes()); act->setShortcutContext(Qt::WidgetWithChildrenShortcut); } menu.addMenu(groupingMenu); } QAction* write = menu.addAction(i18n("Write changes")); write->setIcon(QIcon::fromTheme("document-save")); - write->setEnabled(app_running && bytesEdit && bytesEdit->isModified()); + write->setEnabled(app_running && m_memViewView && m_memViewView->isModified()); QAction* range = menu.addAction(i18n("Change memory range")); - range->setEnabled(app_running && !rangeSelector_->isVisible()); + range->setEnabled(app_running && !m_rangeSelector->isVisible()); range->setIcon(QIcon::fromTheme("document-edit")); QAction* close = menu.addAction(i18n("Close this view")); @@ -412,57 +382,57 @@ if (result == reload) { - // We use numeric start_ and amount_ stored in this, - // not textual startAsString_ and amountAsString_, + // We use m_memStart and m_memAmount stored in this, + // not textual m_memStartStr and m_memAmountStr, // because program position might have changes and expressions // are no longer valid. DebugSession *session = qobject_cast( KDevelop::ICore::self()->debugController()->currentSession()); if (session) { - session->addCommand(new GDBCommand(MI::DataReadMemory, - QString("%1 x 1 1 %2").arg(start_).arg(amount_), + session->addCommand(MI::DataReadMemory, + QString("%1 x 1 1 %2").arg(m_memStart).arg(m_memAmount), this, - &MemoryView::memoryRead)); + &MemoryView::memoryRead); } } if (result && formatGroup && formatGroup == result->actionGroup()) - valueColumn->setCoding((KHE::ValueColumnInterface::KCoding)result->data().toInt()); + m_memViewView->setValueCoding( (Okteta::ByteArrayColumnView::ValueCoding)result->data().toInt()); if (result && groupingGroup && groupingGroup == result->actionGroup()) - valueColumn->setNoOfGroupedBytes(result->data().toInt()); + m_memViewView->setNoOfGroupedBytes(result->data().toInt()); if (result == write) { - memoryEdited(0, amount_); - bytesEdit->setModified(false); + memoryEdited(0, m_memAmount); + m_memViewView->setModified(false); } if (result == range) { - rangeSelector_->startAddressLineEdit->setText(startAsString_); - rangeSelector_->amountLineEdit->setText(amountAsString_); + m_rangeSelector->startAddressLineEdit->setText(m_memStartStr); + m_rangeSelector->amountLineEdit->setText(m_memAmountStr); - rangeSelector_->show(); - rangeSelector_->startAddressLineEdit->setFocus(); + m_rangeSelector->show(); + m_rangeSelector->startAddressLineEdit->setFocus(); } if (result == close) delete this; } bool MemoryView::isOk() const { - return khexedit2_widget; + return m_memViewView; } void MemoryView::slotEnableOrDisable() { - bool app_started = !(debuggerState_ & s_appNotStarted); + bool app_started = !(m_debuggerState & s_appNotStarted); - bool enabled_ = app_started && !rangeSelector_->startAddressLineEdit->text().isEmpty(); + bool enabled_ = app_started && !m_rangeSelector->startAddressLineEdit->text().isEmpty(); - rangeSelector_->okButton->setEnabled(enabled_); + m_rangeSelector->okButton->setEnabled(enabled_); } @@ -477,15 +447,15 @@ newMemoryViewerAction->setText(i18n("New memory viewer")); newMemoryViewerAction->setToolTip(i18nc("@info:tooltip", "Open a new memory viewer.")); newMemoryViewerAction->setIcon(QIcon::fromTheme("window-new")); - connect(newMemoryViewerAction, SIGNAL(triggered(bool)), this, SLOT(slotAddMemoryView())); + connect(newMemoryViewerAction, &QAction::triggered, this , &MemoryViewerWidget::slotAddMemoryView); addAction(newMemoryViewerAction); QVBoxLayout *l = new QVBoxLayout(this); l->setContentsMargins(0, 0, 0, 0); - toolBox_ = new QToolBox(this); - toolBox_->setContentsMargins(0, 0, 0, 0); - l->addWidget(toolBox_); + m_toolBox = new QToolBox(this); + m_toolBox->setContentsMargins(0, 0, 0, 0); + l->addWidget(m_toolBox); setLayout(l); @@ -496,15 +466,15 @@ void MemoryViewerWidget::slotAddMemoryView() { MemoryView* widget = new MemoryView(this); - toolBox_->addItem(widget, widget->windowTitle()); - toolBox_->setCurrentIndex(toolBox_->indexOf(widget)); - memoryViews_.push_back(widget); + m_toolBox->addItem(widget, widget->windowTitle()); + m_toolBox->setCurrentIndex(m_toolBox->indexOf(widget)); + m_memoryViews.push_back(widget); - connect(widget, SIGNAL(captionChanged(QString)), - this, SLOT(slotChildCaptionChanged(QString))); + connect(widget, &MemoryView::captionChanged, + this, &MemoryViewerWidget::slotChildCaptionChanged); - connect(widget, SIGNAL(destroyed(QObject*)), - this, SLOT(slotChildDestroyed(QObject*))); + connect(widget, &MemoryView::destroyed, + this, &MemoryViewerWidget::slotChildDestroyed); } void MemoryViewerWidget::slotChildCaptionChanged(const QString& caption) @@ -514,17 +484,17 @@ QString cap = caption; // Prevent intepreting '&' as accelerator specifier. cap.replace('&', "&&"); - toolBox_->setItemText(toolBox_->indexOf(ncs), cap); + m_toolBox->setItemText(m_toolBox->indexOf(ncs), cap); } void MemoryViewerWidget::slotChildDestroyed(QObject* child) { QList::iterator i, e; - for(i = memoryViews_.begin(), e = memoryViews_.end(); i != e; ++i) + for(i = m_memoryViews.begin(), e = m_memoryViews.end(); i != e; ++i) { if (*i == child) { - memoryViews_.erase(i); + m_memoryViews.erase(i); break; } }