disassemblewidget.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "disassemblewidget.h"
00019
00020 #include <kdebug.h>
00021 #include <keditcl.h>
00022 #include <kglobalsettings.h>
00023
00024 #include <qdict.h>
00025 #include <qheader.h>
00026
00027 #include <stdlib.h>
00028
00029
00030
00031
00032
00033 namespace JAVADebugger
00034 {
00035
00036 DisassembleWidget::DisassembleWidget(QWidget *parent, const char *name)
00037 : KEdit(parent, name),
00038 active_(false),
00039 lower_(0),
00040 upper_(0),
00041 address_(0)
00042 {
00043 setFont(KGlobalSettings::fixedFont());
00044 }
00045
00046
00047
00048 DisassembleWidget::~DisassembleWidget()
00049 {
00050 }
00051
00052
00053
00054 bool DisassembleWidget::displayCurrent()
00055 {
00056 Q_ASSERT(address_ >= lower_ || address_ <= upper_);
00057
00058 int line;
00059 for (line=0; line < numLines(); line++) {
00060 if (textLine(line).startsWith(currentAddress_)) {
00061
00062 setCursorPosition(line+1, 0);
00063 setCursorPosition(line, 0, true);
00064 return true;;
00065 }
00066 }
00067
00068 return false;
00069 }
00070
00071
00072
00073 void DisassembleWidget::slotBPState(const Breakpoint *)
00074 {
00075 if (!active_)
00076 return;
00077 }
00078
00079
00080
00081 void DisassembleWidget::slotDisassemble(char *buf)
00082 {
00083 if (!active_)
00084 return;
00085
00086 clear();
00087
00088 char *start = strchr(buf, '\n');
00089
00090
00091 if (start) {
00092 insertLine(start+1);
00093
00094 removeLine(numLines()-1);
00095 removeLine(numLines()-1);
00096
00097 if (numLines()) {
00098 lower_ = strtol(textLine(0).latin1(), 0, 0);
00099 upper_ = strtol(textLine(numLines()-1).latin1(), 0, 0);
00100 displayCurrent();
00101 } else {
00102 lower_ = 0;
00103 upper_ = 0;
00104 }
00105 }
00106 }
00107
00108
00109
00110 void DisassembleWidget::slotActivate(bool activate)
00111 {
00112 kdDebug(9012) << "Disassemble widget active: " << activate << endl;
00113
00114 if (active_ != activate) {
00115 active_ = activate;
00116 if (active_)
00117 getNextDisplay();
00118 }
00119 }
00120
00121
00122
00123 void DisassembleWidget::slotShowStepInSource(const QString &, int,
00124 const QString ¤tAddress)
00125 {
00126 kdDebug(9012) << "DisasssembleWidget::slotShowStepInSource()" << endl;
00127
00128 currentAddress_ = currentAddress;
00129 const char *t = currentAddress_.latin1();
00130 address_ = strtol(t, 0, 0);
00131 if (!active_)
00132 return;
00133
00134 if (address_ < lower_ || address_ > upper_ || !displayCurrent())
00135 getNextDisplay();
00136 }
00137
00138
00139
00140 void DisassembleWidget::getNextDisplay()
00141 {
00142 kdDebug(9012) << "DisasssembleWidget::getNextDisplay()" << endl;
00143
00144 if (address_) {
00145 Q_ASSERT(!currentAddress_.isNull());
00146
00147
00148 QString endAddress;
00149 endAddress.sprintf("0x%x", (uint)address_+128);
00150 emit disassemble(currentAddress_, endAddress);
00151 }
00152 else
00153 emit disassemble("", "");
00154 }
00155
00156
00157 void DisassembleWidget::showEvent(QShowEvent*)
00158 {
00159 slotActivate(true);
00160 }
00161
00162
00163 void DisassembleWidget::hideEvent(QHideEvent*)
00164 {
00165 slotActivate(false);
00166 }
00167
00168
00169 }
00170
00171 #include "disassemblewidget.moc"
This file is part of the documentation for KDevelop Version 3.1.2.