summaryrefslogtreecommitdiffstats
path: root/quanta/components/debugger/debuggerbreakpointlist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'quanta/components/debugger/debuggerbreakpointlist.cpp')
-rw-r--r--quanta/components/debugger/debuggerbreakpointlist.cpp193
1 files changed, 193 insertions, 0 deletions
diff --git a/quanta/components/debugger/debuggerbreakpointlist.cpp b/quanta/components/debugger/debuggerbreakpointlist.cpp
new file mode 100644
index 00000000..ba117965
--- /dev/null
+++ b/quanta/components/debugger/debuggerbreakpointlist.cpp
@@ -0,0 +1,193 @@
+/***************************************************************************
+ debuggerbreakpointlist.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 <qobject.h>
+#include <ktexteditor/markinterfaceextension.h>
+#include <kdebug.h>
+
+#include "debuggerbreakpointlist.h"
+#include "debuggerbreakpoint.h"
+#include "debuggerclient.h"
+#include "debuggermanager.h"
+#include "debuggerui.h"
+#include "resource.h"
+#include "quanta.h"
+
+DebuggerBreakpointList::DebuggerBreakpointList()
+ : m_current(0)
+{
+ m_breakpointList = new BreakpointList_t();
+}
+
+DebuggerBreakpointList::~DebuggerBreakpointList()
+{
+ delete m_breakpointList;
+}
+
+void DebuggerBreakpointList::add(DebuggerBreakpoint* bp)
+{
+ if(quantaApp->debugger()->UI())
+ quantaApp->debugger()->UI()->showBreakpoint(*bp);
+
+ m_breakpointList->push_front(bp);
+ if(bp->type() == DebuggerBreakpoint::LineBreakpoint)
+ quantaApp->debugger()->setMark(bp->filePath(), bp->line(), true, KTextEditor::MarkInterface::markType02);
+}
+
+void DebuggerBreakpointList::remove(DebuggerBreakpoint* bp)
+{
+ BreakpointList_t::iterator it = find(*bp);
+ if(it == m_breakpointList->end())
+ return;
+
+// DebuggerBreakpoint bp1(bp);
+
+ if(*bp == (*bp))
+ {
+ DebuggerBreakpoint* tmp;
+
+ tmp = (*it);
+ // Remove it from the bp-list
+ if(quantaApp->debugger()->UI())
+ quantaApp->debugger()->UI()->deleteBreakpoint(*bp);
+
+ // Remove editor markpoint if there is one...
+ if(bp->type() == DebuggerBreakpoint::LineBreakpoint)
+ quantaApp->debugger()->setMark(bp->filePath(), bp->line(), false, KTextEditor::MarkInterface::markType02);
+
+ it = m_breakpointList->remove(it);
+ delete tmp;
+ }
+}
+
+
+
+DebuggerBreakpoint* DebuggerBreakpointList::retrieve(const QString& filePath, int line)
+{
+ BreakpointList_t::iterator it;
+
+ for(it = m_breakpointList->begin(); it != m_breakpointList->end(); ++it)
+ {
+ if((filePath == (*it)->filePath()) &&
+ line == (*it)->line())
+ {
+ DebuggerBreakpoint* bp = new DebuggerBreakpoint(*it);
+ return bp;
+ }
+ }
+ return 0;
+}
+
+void DebuggerBreakpointList::clear()
+{
+ BreakpointList_t::iterator it;
+
+ for(it = m_breakpointList->begin(); it != m_breakpointList->end(); ++it)
+ {
+
+ // Remove it from the bp-list
+ quantaApp->debugger()->UI()->deleteBreakpoint(*(*it));
+
+ // Remove editor markpoint if there is one...
+ quantaApp->debugger()->setMark((*it)->filePath(), (*it)->line(), false, KTextEditor::MarkInterface::markType02);
+
+ if(quantaApp->debugger()->client())
+ quantaApp->debugger()->client()->removeBreakpoint((*it));
+ }
+ m_breakpointList->clear();
+}
+
+bool DebuggerBreakpointList::exists(DebuggerBreakpoint* bp)
+{
+ BreakpointList_t::iterator it = find(*bp);
+ if(it == m_breakpointList->end())
+ return false;
+
+ if(*bp == (*it))
+ return true;
+
+ return false;
+}
+
+
+BreakpointList_t::iterator DebuggerBreakpointList::find(const DebuggerBreakpoint &bp)
+{
+ BreakpointList_t::iterator it;
+
+ for(it = m_breakpointList->begin(); it != m_breakpointList->end(); ++it)
+ {
+ if(bp == (*it))
+ return it;
+ }
+ return m_breakpointList->end();
+}
+
+void DebuggerBreakpointList::rewind()
+{
+ m_current = 0;
+}
+
+DebuggerBreakpoint* DebuggerBreakpointList::next()
+{
+ if(m_current == 0)
+ {
+ m_current = m_breakpointList->begin();
+ }
+ else
+ {
+ ++m_current;
+ }
+
+ if(m_current != m_breakpointList->end())
+ {
+ return (*m_current);
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+DebuggerBreakpoint * DebuggerBreakpointList::findDebuggerBreakpoint( const QString & key )
+{
+ BreakpointList_t::iterator it;
+ for(it = m_breakpointList->begin(); it != m_breakpointList->end(); ++it)
+ {
+ if((*it)->key() == key)
+ {
+ DebuggerBreakpoint *bp = new DebuggerBreakpoint((*it));
+ return bp;
+ }
+ }
+ return NULL;
+}
+
+void DebuggerBreakpointList::updateBreakpointKey( const DebuggerBreakpoint & bp, const QString & newkey )
+{
+ //DebuggerBreakpoint *bpp = new DebuggerBreakpoint(bp);
+ BreakpointList_t::iterator it;
+ it = find(bp);
+ if(it != m_breakpointList->end())
+ {
+ (*it)->setKey(newkey);
+ }
+}
+
+size_t DebuggerBreakpointList::count( )
+{
+ return m_breakpointList->count();
+}