2 // memory1browser.cpp - Jaguar memory window 1 browser
6 // JPM = Jean-Paul Mari <djipi.mari@gmail.com>
9 // --- ---------- -----------------------------------------------------------
10 // JPM 08/07/2017 Created this file
16 #include "memory1browser.h"
18 #include "debugger/DBGManager.h"
23 Memory1BrowserWindow::Memory1BrowserWindow(QWidget
* parent
/*= 0*/): QWidget(parent
, Qt::Dialog
),
24 // layout(new QVBoxLayout), text(new QTextBrowser),
25 layout(new QVBoxLayout
), text(new QLabel
),
26 refresh(new QPushButton(tr("Refresh"))),
27 address(new QLineEdit
),
28 go(new QPushButton(tr("Go"))),
29 memBase(0), memOrigin(0), NumWinOrigin(0)
31 //setWindowTitle(tr("Memory 1 Browser"));
33 //address->setInputMask("hhhhhh");
34 address
->setPlaceholderText("0x<value>, decimal value or symbol name");
36 QHBoxLayout
* hbox1
= new QHBoxLayout
;
37 hbox1
->addWidget(refresh
);
38 hbox1
->addWidget(address
);
41 // Need to set the size as well...
44 QFont
fixedFont("Lucida Console", 8, QFont::Normal
);
45 // QFont fixedFont("", 8, QFont::Normal);
46 fixedFont
.setStyleHint(QFont::TypeWriter
);
47 text
->setFont(fixedFont
);
48 //// layout->setSizeConstraint(QLayout::SetFixedSize);
51 layout
->addWidget(text
);
52 //layout->addWidget(refresh);
53 layout
->addLayout(hbox1
);
55 connect(refresh
, SIGNAL(clicked()), this, SLOT(RefreshContentsWindow()));
56 connect(go
, SIGNAL(clicked()), this, SLOT(GoToAddress()));
60 // Refresh / Display the window contents
61 void Memory1BrowserWindow::RefreshContents(size_t NumWin
)
67 sprintf(string
, "Memory %i - 0x%06X", (unsigned int)((NumWinOrigin
= NumWin
) + 1), (unsigned int)memOrigin
);
68 setWindowTitle(tr(string
));
69 RefreshContentsWindow();
74 // Refresh / Display the window contents
75 void Memory1BrowserWindow::RefreshContentsWindow(void)
77 char string
[1024], buf
[64];
82 for (i
= 0; i
< 480; i
+= 16)
84 sprintf(string
, "%s%06X: ", (i
? "<br>" : ""), (unsigned int)(memBase
+ i
));
86 for (j
= 0; j
< 16; j
++)
88 sprintf(buf
, "%02X ", jaguarMainRAM
[memBase
+ i
+ j
]);
95 for (j
= 0; j
< 16; j
++)
97 c
= jaguarMainRAM
[memBase
+ i
+ j
];
98 sprintf(buf
, "&#%i;", c
);
101 sprintf(buf
, " ");
103 if ((c
< 0x20) || (c
> 0x7E))
109 memDump
+= QString(string
);
113 text
->setText(memDump
);
118 void Memory1BrowserWindow::keyPressEvent(QKeyEvent
* e
)
120 if (e
->key() == Qt::Key_Escape
)
126 if (e
->key() == Qt::Key_PageUp
)
128 if ((memBase
-= 480) < 0)
133 RefreshContentsWindow();
137 if (e
->key() == Qt::Key_PageDown
)
139 if ((memBase
+= 480) > (vjs
.DRAM_size
- 480))
141 memBase
= vjs
.DRAM_size
- 480;
144 RefreshContentsWindow();
148 if (e
->key() == Qt::Key_Up
|| e
->key() == Qt::Key_Minus
)
150 if ((memBase
-= 16) < 0)
155 RefreshContentsWindow();
159 if (e
->key() == Qt::Key_Down
|| e
->key() == Qt::Key_Equal
)
161 if ((memBase
+= 16) > (vjs
.DRAM_size
- 480))
163 memBase
= vjs
.DRAM_size
- 480;
166 RefreshContentsWindow();
170 if (e
->key() == Qt::Key_Return
)
182 // Go to the requested address
183 // Address can be an hexa, decimal or a symbol name
184 void Memory1BrowserWindow::GoToAddress(void)
191 QPalette p
= address
->palette();
192 newAddress
= address
->text();
194 if ((len
= newAddress
.size()))
196 if ((len
> 1) && (newAddress
.at(0) == QChar('0')) && (newAddress
.at(1) == QChar('x')))
198 newmemBase
= newAddress
.toUInt(&ok
, 16);
202 if (!(newmemBase
= DBGManager_GetAdrFromSymbolName(newAddress
.toLatin1().data())))
204 newmemBase
= newAddress
.toUInt(&ok
, 10);
212 if (!ok
|| (newmemBase
< 0) || (newmemBase
> vjs
.DRAM_size
))
214 p
.setColor(QPalette::Text
, Qt::red
);
218 p
.setColor(QPalette::Text
, Qt::black
);
219 memOrigin
= (memBase
= newmemBase
);
220 RefreshContents(NumWinOrigin
);
222 address
->setPalette(p
);