From 3cf3f14d7f2425fb7fd0656cc244ed2bd26ebc65 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Tue, 16 Nov 2010 10:50:11 +0100
Subject: [PATCH] debugger: more breakpoint refactoring

---
 src/plugins/debugger/breakhandler.cpp       | 64 ++++++++++++---------
 src/plugins/debugger/breakhandler.h         |  3 +-
 src/plugins/debugger/breakwindow.cpp        | 36 +++++-------
 src/plugins/debugger/lldb/ipcenginehost.cpp |  2 +-
 4 files changed, 53 insertions(+), 52 deletions(-)

diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index a969bbf2d06..2d083496991 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -195,8 +195,8 @@ void BreakHandler::setWatchpointByAddress(quint64 address)
 {
     const int id = findWatchpointByAddress(address);
     if (id == -1) {
-        BreakpointData data(Watchpoint);
-        data.setAddress(address);
+        BreakpointParameters data(Watchpoint);
+        data.address = address;
         appendBreakpoint(data);
         scheduleSynchronization();
     } else {
@@ -257,39 +257,37 @@ void BreakHandler::loadBreakpoints()
     //clear();
     foreach (const QVariant &var, list) {
         const QMap<QString, QVariant> map = var.toMap();
-        BreakpointData data(BreakpointByFileAndLine);
+        BreakpointParameters data(BreakpointByFileAndLine);
         QVariant v = map.value(_("filename"));
         if (v.isValid())
-            data.setFileName(v.toString());
+            data.fileName = v.toString();
         v = map.value(_("linenumber"));
         if (v.isValid())
-            data.setLineNumber(v.toString().toInt());
+            data.lineNumber = v.toString().toInt();
         v = map.value(_("condition"));
         if (v.isValid())
-            data.setCondition(v.toString().toLatin1());
+            data.condition = v.toString().toLatin1();
         v = map.value(_("address"));
         if (v.isValid())
-            data.setAddress(v.toString().toULongLong());
+            data.address = v.toString().toULongLong();
         v = map.value(_("ignorecount"));
         if (v.isValid())
-            data.setIgnoreCount(v.toString().toInt());
+            data.ignoreCount = v.toString().toInt();
         v = map.value(_("threadspec"));
         if (v.isValid())
-            data.setThreadSpec(v.toString().toLatin1());
+            data.threadSpec = v.toString().toLatin1();
         v = map.value(_("funcname"));
         if (v.isValid())
-            data.setFunctionName(v.toString());
+            data.functionName = v.toString();
         v = map.value(_("disabled"));
         if (v.isValid())
-            data.setEnabled(!v.toInt());
+            data.enabled = !v.toInt();
         v = map.value(_("usefullpath"));
         if (v.isValid())
-            data.setUseFullPath(bool(v.toInt()));
+            data.useFullPath = bool(v.toInt());
         v = map.value(_("type"));
         if (v.isValid() && v.toInt() != UnknownType)
-            data.setType(BreakpointType(v.toInt()));
-        data.setMarkerFileName(data.fileName());
-        data.setMarkerLineNumber(data.lineNumber());
+            data.type = BreakpointType(v.toInt());
         appendBreakpoint(data);
     }
     //qDebug() << "LOADED BREAKPOINTS" << this << list.size();
@@ -618,9 +616,9 @@ void BreakHandler::removeBreakpoint(BreakpointId id)
     }
 }
 
-void BreakHandler::appendBreakpoint(const BreakpointData &data)
+void BreakHandler::appendBreakpoint(const BreakpointParameters &data)
 {
-    QTC_ASSERT(data.type() != UnknownType, return);
+    QTC_ASSERT(data.type != UnknownType, return);
 
     // Ok to be not thread-safe. The order does not matter and only the gui
     // produces authoritative ids.
@@ -628,7 +626,9 @@ void BreakHandler::appendBreakpoint(const BreakpointData &data)
 
     BreakpointId id(++currentId);
     BreakpointItem item;
-    item.data = data;
+    BreakpointData d;
+    d.m_parameters = data;
+    item.data = d;
     m_storage.insert(id, item);
     scheduleSynchronization();
 }
@@ -649,17 +649,15 @@ void BreakHandler::toggleBreakpoint(const QString &fileName, int lineNumber,
     if (id != BreakpointId(-1)) {
         removeBreakpoint(id);
     } else {
-        BreakpointData data;
+        BreakpointParameters data;
         if (address) {
-            data.setType(BreakpointByAddress);
-            data.setAddress(address);
+            data.type = BreakpointByAddress;
+            data.address = address;
         } else {
-            data.setType(BreakpointByFileAndLine);
-            data.setFileName(fileName);
-            data.setLineNumber(lineNumber);
+            data.type = BreakpointByFileAndLine;
+            data.fileName = fileName;
+            data.lineNumber = lineNumber;
         }
-        data.setMarkerFileName(fileName);
-        data.setMarkerLineNumber(lineNumber);
         appendBreakpoint(data);
     }
     debuggerCore()->synchronizeBreakpoints();
@@ -688,8 +686,8 @@ void BreakHandler::breakByFunction(const QString &functionName)
                 && data.ignoreCount() == 0)
             return;
     }
-    BreakpointData data(BreakpointByFunction);
-    data.setFunctionName(functionName);
+    BreakpointParameters data(BreakpointByFunction);
+    data.functionName = functionName;
     appendBreakpoint(data);
 }
 
@@ -857,6 +855,16 @@ void BreakHandler::setResponse(BreakpointId id, const BreakpointResponse &data)
     updateMarker(id);
 }
 
+void BreakHandler::setData(BreakpointId id, const BreakpointParameters &data)
+{
+    Iterator it = m_storage.find(id);
+    QTC_ASSERT(it != m_storage.end(), return);
+    if (data == it->data.m_parameters)
+        return;
+    it->data.m_parameters = data;
+    updateMarker(id);
+    layoutChanged();
+}
 
 //////////////////////////////////////////////////////////////////
 //
diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h
index eb62bba9ede..494a067ca28 100644
--- a/src/plugins/debugger/breakhandler.h
+++ b/src/plugins/debugger/breakhandler.h
@@ -65,7 +65,7 @@ public:
     QAbstractItemModel *model() { return this; }
 
     // The only way to add a new breakpoint.
-    void appendBreakpoint(const BreakpointData &data);
+    void appendBreakpoint(const BreakpointParameters &data);
 
     BreakpointIds allBreakpointIds() const;
     BreakpointIds engineBreakpointIds(DebuggerEngine *engine) const;
@@ -100,6 +100,7 @@ public:
     QIcon icon(BreakpointId id) const;
 
     void gotoLocation(BreakpointId id) const;
+    void setData(BreakpointId id, const BreakpointParameters &data);
 
     // Getter retrieves property value.
     // Setter sets property value and triggers update if changed.
diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp
index 67944ee63dd..25f7790a12e 100644
--- a/src/plugins/debugger/breakwindow.cpp
+++ b/src/plugins/debugger/breakwindow.cpp
@@ -67,7 +67,7 @@ class BreakpointDialog : public QDialog, public Ui::BreakpointDialog
     Q_OBJECT
 public:
     explicit BreakpointDialog(QWidget *parent);
-    bool showDialog(BreakpointData *data);
+    bool showDialog(BreakpointParameters *data);
 
     void setParameters(const BreakpointParameters &p);
     BreakpointParameters parameters() const;
@@ -160,28 +160,19 @@ void BreakpointDialog::typeChanged(int)
         lineEditFunction->setText(QLatin1String("main"));
 }
 
-bool BreakpointDialog::showDialog(BreakpointData *data)
+bool BreakpointDialog::showDialog(BreakpointParameters *data)
 {
-    setParameters(data->parameters());
+    setParameters(*data);
     if (exec() != QDialog::Accepted)
         return false;
 
     // Check if changed.
     const BreakpointParameters newParameters = parameters();
-    if (newParameters == data->parameters())
+    if (data->equals(newParameters))
         return false;
 
-    bool result = false;
-    result |= data->setType(newParameters.type);
-    result |= data->setAddress(newParameters.address);
-    result |= data->setFunctionName(newParameters.functionName);
-    result |= data->setUseFullPath(newParameters.useFullPath);
-    result |= data->setFileName(newParameters.fileName);
-    result |= data->setLineNumber(newParameters.lineNumber);
-    result |= data->setCondition(newParameters.condition);
-    result |= data->setIgnoreCount(newParameters.ignoreCount);
-    result |= data->setThreadSpec(newParameters.threadSpec);
-    return result;
+    *data = newParameters;
+    return true;
 }
 
 ///////////////////////////////////////////////////////////////////////
@@ -396,11 +387,10 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev)
         setBreakpointsEnabled(si, !enabled);
     else if (act == addBreakpointAction)
         addBreakpoint();
-    else if (act == breakAtThrowAction) {
-        handler->appendBreakpoint(BreakpointData(BreakpointAtThrow));
-    } else if (act == breakAtCatchAction) {
-        handler->appendBreakpoint(BreakpointData(BreakpointAtCatch));
-    }
+    else if (act == breakAtThrowAction)
+        handler->appendBreakpoint(BreakpointParameters(BreakpointAtThrow));
+    else if (act == breakAtCatchAction)
+        handler->appendBreakpoint(BreakpointParameters(BreakpointAtCatch));
 }
 
 void BreakWindow::setBreakpointsEnabled(const QModelIndexList &list, bool enabled)
@@ -427,12 +417,14 @@ void BreakWindow::deleteBreakpoints(const QModelIndexList &list)
 void BreakWindow::editBreakpoint(BreakpointId id, QWidget *parent)
 {
     BreakpointDialog dialog(parent);
-    dialog.showDialog(breakHandler()->breakpointById(id));
+    BreakpointParameters data = breakHandler()->breakpointById(id)->parameters();
+    if (dialog.showDialog(&data))
+        breakHandler()->setData(id, data);
 }
 
 void BreakWindow::addBreakpoint()
 {
-    BreakpointData data(BreakpointByFileAndLine);
+    BreakpointParameters data(BreakpointByFileAndLine);
     BreakpointDialog dialog(this);
     if (dialog.showDialog(&data))
         breakHandler()->appendBreakpoint(data);
diff --git a/src/plugins/debugger/lldb/ipcenginehost.cpp b/src/plugins/debugger/lldb/ipcenginehost.cpp
index f1bc78fa2e6..b9f27ec4084 100644
--- a/src/plugins/debugger/lldb/ipcenginehost.cpp
+++ b/src/plugins/debugger/lldb/ipcenginehost.cpp
@@ -62,7 +62,7 @@ IPCEngineHost::IPCEngineHost (const DebuggerStartParameters &startParameters)
     , m_cookie(1)
     , m_device(0)
 {
-    connect(this, SIGNAL(stateChanged(const DebuggerState &)), this, SLOT(m_stateChanged(const DebuggerState &)));
+    connect(this, SIGNAL(stateChanged(DebuggerState)), this, SLOT(m_stateChanged(DebuggerState)));
 }
 
 IPCEngineHost::~IPCEngineHost()
-- 
GitLab