mirror of
https://github.com/markdavidlong/AppleSAWS.git
synced 2024-11-24 14:30:56 +00:00
Various Changes
This commit is contained in:
parent
30010dc1a4
commit
177ecdfea1
@ -2,6 +2,10 @@
|
||||
QT += core gui printsupport
|
||||
CONFIG += c++11
|
||||
|
||||
MOC_DIR = ./.build
|
||||
UI_DIR = ./.build
|
||||
OBJECTS_DIR = ./.build
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
TARGET = AppleSAWS
|
||||
@ -120,7 +124,8 @@ HEADERS += \
|
||||
src/applesoftfile/ApplesoftRetokenizer.h \
|
||||
src/util/AppleColors.h \
|
||||
src/internals/JumpLineManager.h \
|
||||
src/ui/widgets/FlowLineTextBrowser.h
|
||||
src/ui/widgets/FlowLineTextBrowser.h \
|
||||
src/ui/widgets/asciiinfodialog.h
|
||||
|
||||
FORMS += \
|
||||
src/ui/catalogwidget.ui \
|
||||
@ -134,4 +139,5 @@ FORMS += \
|
||||
src/ui/viewers/viewerbase.ui \
|
||||
src/ui/widgets/CharacterSetExplorer.ui \
|
||||
src/ui/widgets/DisassemblerMetadataDialog.ui \
|
||||
src/ui/widgets/LocationInfoDialog.ui
|
||||
src/ui/widgets/LocationInfoDialog.ui \
|
||||
src/ui/widgets/asciiinfodialog.ui
|
||||
|
@ -15,9 +15,9 @@ void AssemblerSymbolModel::setAssemblerSymbolsData(AssemblerSymbols *symbols)
|
||||
|
||||
if (assemblerSymbols)
|
||||
{
|
||||
connect(assemblerSymbols,SIGNAL(symbolAddedAt(int)),SLOT(handleSymbolAddition(int)));
|
||||
connect(assemblerSymbols,SIGNAL(symbolChangedAt(int)),SLOT(handleSymbolChange(int)));
|
||||
connect(assemblerSymbols,SIGNAL(symbolRemovedAt(int)),SLOT(handleSymbolRemoval(int)));
|
||||
connect(assemblerSymbols, &AssemblerSymbols::symbolAddedAt, this, &AssemblerSymbolModel::handleSymbolAddition);
|
||||
connect(assemblerSymbols, &AssemblerSymbols::symbolChangedAt, this, &AssemblerSymbolModel::handleSymbolChange);
|
||||
connect(assemblerSymbols, &AssemblerSymbols::symbolRemovedAt, this, &AssemblerSymbolModel::handleSymbolRemoval);
|
||||
}
|
||||
|
||||
}
|
||||
@ -57,7 +57,7 @@ int AssemblerSymbolModel::rowCount(const QModelIndex &parent) const
|
||||
int AssemblerSymbolModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
return 1;
|
||||
return 2;
|
||||
}
|
||||
|
||||
QVariant AssemblerSymbolModel::data(const QModelIndex &index, int role) const
|
||||
@ -67,6 +67,19 @@ QVariant AssemblerSymbolModel::data(const QModelIndex &index, int role) const
|
||||
if (role == Qt::DisplayRole)
|
||||
{
|
||||
if (index.column() == 0)
|
||||
{
|
||||
QString val;
|
||||
if (assemblerSymbols->at(index.row()).symbolsize == SizeWord)
|
||||
{
|
||||
val = "WORD";
|
||||
}
|
||||
else if (assemblerSymbols->at(index.row()).symbolsize == SizeByte)
|
||||
{
|
||||
val = "BYTE";
|
||||
}
|
||||
return val;
|
||||
}
|
||||
else if (index.column() == 1)
|
||||
{
|
||||
return assemblerSymbols->at(index.row()).name;
|
||||
}
|
||||
@ -79,9 +92,9 @@ bool AssemblerSymbolModel::setData(const QModelIndex &index, const QVariant &val
|
||||
if (!assemblerSymbols) return false;
|
||||
|
||||
if (data(index, role) != value) {
|
||||
if (index.column() == 0)
|
||||
if (index.column() == 1)
|
||||
{
|
||||
assemblerSymbols->symbolRefAt(index.row()).name = value.toString();
|
||||
assemblerSymbols->symbolRefAt(index.row()).name = value.toString();
|
||||
}
|
||||
emit dataChanged(index, index, QVector<int>() << role);
|
||||
return true;
|
||||
@ -92,7 +105,7 @@ bool AssemblerSymbolModel::setData(const QModelIndex &index, const QVariant &val
|
||||
Qt::ItemFlags AssemblerSymbolModel::flags(const QModelIndex &index) const
|
||||
{
|
||||
Q_UNUSED(index);
|
||||
if (index.column() == 0)
|
||||
if (index.column() == 1)
|
||||
return Qt::ItemIsEditable | QAbstractTableModel::flags(index);
|
||||
else
|
||||
return QAbstractTableModel::flags(index);
|
||||
@ -108,14 +121,16 @@ bool AssemblerSymbolModel::insertRows(int row, int count, const QModelIndex &par
|
||||
bool AssemblerSymbolModel::removeRows(int row, int count, const QModelIndex &parent)
|
||||
{
|
||||
if (!assemblerSymbols) return false;
|
||||
bool success = false;
|
||||
|
||||
beginRemoveRows(parent, row, row + count - 1);
|
||||
for (int idx = 0; idx < count; idx++)
|
||||
{
|
||||
assemblerSymbols->removeSymbolAt(row);
|
||||
success = true;
|
||||
}
|
||||
endRemoveRows();
|
||||
return false;
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,10 +1,26 @@
|
||||
#include "AssemblerSymbols.h"
|
||||
|
||||
|
||||
AssemblerSymbols::AssemblerSymbols(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int AssemblerSymbols::locationOfSymbolAtAddress(quint16 address)
|
||||
{
|
||||
// Assume list m_assemblerSymbols is sorted by address (it should be)
|
||||
QListIterator<AssemblerSymbol> it(m_assemblerSymbols);
|
||||
int idx = 0;
|
||||
while (it.hasNext())
|
||||
{
|
||||
AssemblerSymbol ep = it.next();
|
||||
if (ep.address == address) return idx;
|
||||
if (ep.address > address) return -1;
|
||||
idx++;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool AssemblerSymbols::hasAssemSymbolAtAddress(quint16 address)
|
||||
{
|
||||
// Assume list m_assemblerSymbols is sorted by address (it should be)
|
||||
@ -51,7 +67,6 @@ void AssemblerSymbols::addSymbol(AssemblerSymbol ep)
|
||||
void AssemblerSymbols::removeSymbolAt(int location)
|
||||
{
|
||||
m_assemblerSymbols.removeAt(location);
|
||||
emit symbolRemovedAt(location);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@ -92,6 +107,7 @@ QDataStream &operator<<(QDataStream &out, const AssemblerSymbol &model)
|
||||
{
|
||||
out << model.address;
|
||||
out << model.name;
|
||||
out << (qint32) model.symbolsize;
|
||||
return out;
|
||||
}
|
||||
|
||||
@ -99,7 +115,9 @@ QDataStream &operator>>(QDataStream &in, AssemblerSymbol &model)
|
||||
{
|
||||
in >> model.address;
|
||||
in >> model.name;
|
||||
|
||||
qint32 size;
|
||||
in >> size;
|
||||
model.symbolsize = (SymbolSize) size;
|
||||
return in;
|
||||
}
|
||||
|
||||
|
@ -4,11 +4,19 @@
|
||||
#include <QObject>
|
||||
#include <QDataStream>
|
||||
|
||||
typedef enum {
|
||||
SizeUnknown = 0,
|
||||
SizeByte = 1,
|
||||
SizeWord = 2
|
||||
} SymbolSize;
|
||||
|
||||
struct AssemblerSymbol {
|
||||
quint16 address;
|
||||
QString name;
|
||||
SymbolSize symbolsize;
|
||||
};
|
||||
|
||||
|
||||
class AssemblerSymbols : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -30,6 +38,7 @@ public:
|
||||
|
||||
void doTestData();
|
||||
|
||||
int locationOfSymbolAtAddress(quint16 address);
|
||||
signals:
|
||||
void symbolAdded(AssemblerSymbol &AssemblerSymbol, int location);
|
||||
void symbolAddedAt(int location);
|
||||
|
@ -17,10 +17,9 @@ void EntryPointModel::setEntryPointsData(EntryPoints *points)
|
||||
|
||||
if (entryPoints)
|
||||
{
|
||||
connect(entryPoints,SIGNAL(pointAddedAt(int)),SLOT(handlePointAddition(int)));
|
||||
connect(entryPoints,SIGNAL(pointChangedAt(int)),SLOT(handlePointChange(int)));
|
||||
connect(entryPoints,SIGNAL(pointRemovedAt(int)),SLOT(handlePointRemoval(int)));
|
||||
// insertRows(0,entryPoints->numEntryPoints());
|
||||
connect(entryPoints, &EntryPoints::pointAddedAt, this, &EntryPointModel::handlePointAddition);
|
||||
connect(entryPoints, &EntryPoints::pointChangedAt, this, &EntryPointModel::handlePointChange);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -110,15 +109,26 @@ bool EntryPointModel::insertRows(int row, int count, const QModelIndex &parent)
|
||||
|
||||
bool EntryPointModel::removeRows(int row, int count, const QModelIndex &parent)
|
||||
{
|
||||
qDebug() << __FILE__ << __LINE__;
|
||||
|
||||
if (!entryPoints) return false;
|
||||
qDebug() << __FILE__ << __LINE__;
|
||||
bool success = false;
|
||||
qDebug() << __FILE__ << __LINE__;
|
||||
|
||||
beginRemoveRows(parent, row, row + count - 1);
|
||||
qDebug() << __FILE__ << __LINE__;
|
||||
for (int idx = 0; idx < count; idx++)
|
||||
{
|
||||
qDebug() << __FILE__ << __LINE__;
|
||||
entryPoints->removePointAt(row);
|
||||
qDebug() << __FILE__ << __LINE__;
|
||||
success = true;
|
||||
}
|
||||
qDebug() << __FILE__ << __LINE__;
|
||||
endRemoveRows();
|
||||
return false;
|
||||
qDebug() << __FILE__ << __LINE__;
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
|
@ -18,8 +18,7 @@ public:
|
||||
void setEntryPointsData(EntryPoints *points);
|
||||
|
||||
// Header:
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;//DONE
|
||||
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
||||
// Basic functionality:
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||
@ -43,7 +42,7 @@ public:
|
||||
|
||||
protected slots:
|
||||
void handlePointAddition(int location) { insertRows(location,1); }
|
||||
void handlePointRemoval(int location) { removeRows(location, 1); }
|
||||
// void handlePointRemoval(int location) { removeRows(location, 1); }
|
||||
void handlePointChange(int location)
|
||||
{
|
||||
QModelIndex ind = createIndex(location,0);
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "EntryPoints.h"
|
||||
#include <QDebug>
|
||||
|
||||
EntryPoints::EntryPoints(QObject *parent) : QObject(parent)
|
||||
{
|
||||
@ -51,7 +52,6 @@ void EntryPoints::addPoint(EntryPoint ep)
|
||||
void EntryPoints::removePointAt(int location)
|
||||
{
|
||||
m_entryPoints.removeAt(location);
|
||||
emit pointRemovedAt(location);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -1,8 +1,8 @@
|
||||
#include "binaryfilemetadata.h"
|
||||
#include "genericfile.h"
|
||||
#include <QFile>
|
||||
#include <QDataStream>
|
||||
#include <QDebug>
|
||||
|
||||
BinaryFileMetadata::BinaryFileMetadata(GenericFile *file, quint16 defaultAddress, QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
@ -17,31 +17,49 @@ BinaryFileMetadata::BinaryFileMetadata(GenericFile *file, quint16 defaultAddress
|
||||
|
||||
void BinaryFileMetadata::load()
|
||||
{
|
||||
QFile infile(QString("%1%2").arg(m_file->filename()).arg(".bfm"));
|
||||
QFile infile(QString("%1%2%3")
|
||||
.arg(m_file->diskFile()->getMetaDataPath())
|
||||
.arg(m_file->filename())
|
||||
.arg(".bfm"));
|
||||
if (infile.open(QIODevice::ReadOnly))
|
||||
{
|
||||
qDebug() << "Loading binary file metadata from" << QString("%1%2").arg(m_file->filename()).arg(".bfm");
|
||||
qDebug() << "Loading binary file metadata from" << QString("%1%2%3")
|
||||
.arg(m_file->diskFile()->getMetaDataPath())
|
||||
.arg(m_file->filename())
|
||||
.arg(".bfm");
|
||||
QDataStream ds(&infile);
|
||||
ds >> *m_eps;
|
||||
ds >> *m_as;
|
||||
infile.close();
|
||||
}
|
||||
else qDebug() << "Cannot open " << QString("%1%2").arg(m_file->filename()).arg(".bfm") << "for reading";
|
||||
else qDebug() << "Cannot open " << QString("%1%2%3")
|
||||
.arg(m_file->diskFile()->getMetaDataPath())
|
||||
.arg(m_file->filename())
|
||||
.arg(".bfm") << "for reading";
|
||||
|
||||
}
|
||||
|
||||
void BinaryFileMetadata::save()
|
||||
{
|
||||
QFile infile(QString("%1%2").arg(m_file->filename()).arg(".bfm"));
|
||||
if (infile.open(QIODevice::WriteOnly))
|
||||
QFile outfile(QString("%1%2%3")
|
||||
.arg(m_file->diskFile()->getMetaDataPath())
|
||||
.arg(m_file->filename())
|
||||
.arg(".bfm"));
|
||||
if (outfile.open(QIODevice::WriteOnly))
|
||||
{
|
||||
qDebug() << "Saving binary file metadata to" << QString("%1%2").arg(m_file->filename()).arg(".bfm");
|
||||
QDataStream ds(&infile);
|
||||
qDebug() << "Saving binary file metadata to" << QString("%1%2%3")
|
||||
.arg(m_file->diskFile()->getMetaDataPath())
|
||||
.arg(m_file->filename())
|
||||
.arg(".bfm");
|
||||
QDataStream ds(&outfile);
|
||||
ds << *m_eps;
|
||||
ds << *m_as;
|
||||
infile.close();
|
||||
outfile.close();
|
||||
}
|
||||
else qDebug() << "Cannot open " << QString("%1%2").arg(m_file->filename()).arg(".bfm") << "for writing";
|
||||
else qDebug() << "Cannot open " << QString("%1%2%3")
|
||||
.arg(m_file->diskFile()->getMetaDataPath())
|
||||
.arg(m_file->filename())
|
||||
.arg(".bfm") << "for writing";
|
||||
|
||||
}
|
||||
|
||||
|
@ -13,8 +13,6 @@ CatalogSector::CatalogSector(Sector *data)
|
||||
FileDescriptiveEntry fde = makeFDE(idx*0x23+0x0B);
|
||||
if (fde.firstTSListSector != TSPair(0,0)) {
|
||||
m_fdes.append(fde);
|
||||
// qDebug() << "FDE #"<<idx;
|
||||
// fde.dump();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <QDataStream>
|
||||
#include <QFileInfo>
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
|
||||
#include "tracksectorlist.h"
|
||||
#include "applesoftfile.h"
|
||||
@ -29,6 +30,7 @@ DiskFile::~DiskFile()
|
||||
|
||||
bool DiskFile::read(QString filename)
|
||||
{
|
||||
m_fullImageName = filename;
|
||||
m_imageName = QFileInfo(filename).fileName();
|
||||
if (m_imageName.toUpper().contains(".D13"))
|
||||
{
|
||||
@ -132,6 +134,7 @@ GenericFile *DiskFile::getFile(FileDescriptiveEntry fde)
|
||||
}
|
||||
m_files[fde] = retval;
|
||||
}
|
||||
if (retval) { retval->setDiskFile(this); }
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -167,3 +170,12 @@ QList<FileDescriptiveEntry> DiskFile::getAllFDEs() {
|
||||
return retval;
|
||||
}
|
||||
|
||||
QString DiskFile::getMetaDataPath() const {
|
||||
QString path = QString("%1.metadata/").arg(getFullDiskImageName());
|
||||
|
||||
QDir dir(path);
|
||||
dir.mkpath(".");
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include "sector.h"
|
||||
#include "vtoc.h"
|
||||
|
||||
#include "genericfile.h"
|
||||
class GenericFile;
|
||||
|
||||
class DiskFile
|
||||
{
|
||||
@ -40,6 +40,9 @@ public:
|
||||
QByteArray fileHash() const { return m_hash; }
|
||||
|
||||
QString getDiskImageName() const { return m_imageName; }
|
||||
QString getFullDiskImageName() const { return m_fullImageName; }
|
||||
QString getMetaDataPath() const;
|
||||
|
||||
private:
|
||||
|
||||
QMap< int, QMap< int, Sector> > m_contents;
|
||||
@ -47,6 +50,8 @@ private:
|
||||
QByteArray m_hash;
|
||||
|
||||
QString m_imageName;
|
||||
QString m_fullImageName;
|
||||
|
||||
quint8 m_sectors_per_track;
|
||||
|
||||
};
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
GenericFile::GenericFile(QByteArray data)
|
||||
{
|
||||
m_diskfile = 0;
|
||||
if (!data.isEmpty()) {
|
||||
setData(data);
|
||||
}
|
||||
|
@ -1,9 +1,12 @@
|
||||
#ifndef GENERICFILE_H
|
||||
#define GENERICFILE_H
|
||||
|
||||
#include "diskfile.h"
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QString>
|
||||
|
||||
|
||||
class GenericFile
|
||||
{
|
||||
public:
|
||||
@ -21,12 +24,15 @@ public:
|
||||
virtual void setLength(quint16 length) { m_length = length; }
|
||||
virtual quint16 length() { return m_length; }
|
||||
|
||||
DiskFile *diskFile() const { return m_diskfile; }
|
||||
void setDiskFile(DiskFile *diskfile) { m_diskfile = diskfile; }
|
||||
|
||||
protected:
|
||||
QByteArray m_data;
|
||||
QString m_filename;
|
||||
quint16 m_address;
|
||||
qint16 m_length;
|
||||
DiskFile * m_diskfile;
|
||||
|
||||
};
|
||||
|
||||
|
@ -4,7 +4,7 @@ JumpLineManager::JumpLineManager(quint16 from, quint16 to)
|
||||
: m_start(from),
|
||||
m_end(to)
|
||||
{
|
||||
qDebug() << "JumpLineManager(from:"<<uint16ToHex(m_start)<<", to:"<<uint16ToHex(m_end) << ")";
|
||||
//qDebug() << "JumpLineManager(from:"<<uint16ToHex(m_start)<<", to:"<<uint16ToHex(m_end) << ")";
|
||||
|
||||
}
|
||||
|
||||
@ -20,12 +20,12 @@ void JumpLineManager::addJump(quint16 src, quint16 dest, JumpType type, quint16
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "JumpLineManager::addJump: Not adding duplicate jump:" << uint16ToHex(src) << "," << uint16ToHex(dest);
|
||||
//qDebug() << "JumpLineManager::addJump: Not adding duplicate jump:" << uint16ToHex(src) << "," << uint16ToHex(dest);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "JumpLineManager::addJump: Address range is out of bounds";
|
||||
// qDebug() << "JumpLineManager::addJump: Address range is out of bounds";
|
||||
|
||||
}
|
||||
}
|
||||
@ -36,7 +36,7 @@ void JumpLineManager::dumpJumps() const {
|
||||
|
||||
void JumpLineManager::dumpJumps(JumpMap map) const
|
||||
{
|
||||
qDebug() << "JumpLineManager::dumpJumps()\n JumpTable:";
|
||||
//qDebug() << "JumpLineManager::dumpJumps()\n JumpTable:";
|
||||
QMapIterator<TJump,JumpType> it(map);
|
||||
while (it.hasNext())
|
||||
{
|
||||
@ -47,14 +47,14 @@ void JumpLineManager::dumpJumps(JumpMap map) const
|
||||
if (it.value() == IsBranch) { jumptypelabel = "Branch"; }
|
||||
if (it.value() == IsJSR) { jumptypelabel = "JSR"; }
|
||||
if (it.value() == IsBRA) { jumptypelabel = "BRA"; }
|
||||
qDebug() << " Jump from" << uint16ToHex(it.key().first) << "to"
|
||||
<< uint16ToHex(it.key().second) << jumptypelabel;
|
||||
//qDebug() << " Jump from" << uint16ToHex(it.key().first) << "to"
|
||||
// << uint16ToHex(it.key().second) << jumptypelabel;
|
||||
}
|
||||
}
|
||||
|
||||
JumpLines JumpLineManager::buildJumpLines()
|
||||
{
|
||||
qDebug() << "A";
|
||||
//qDebug() << "A";
|
||||
|
||||
m_channelsAtAddress.clear();
|
||||
m_jumplines.m_maxChannel = 0;
|
||||
@ -74,7 +74,7 @@ qDebug() << "A";
|
||||
m_jumplines.jumpLines.append(jl);
|
||||
m_jumplines.m_maxChannel = qMax(m_jumplines.m_maxChannel, channel);
|
||||
}
|
||||
qDebug() << "A";
|
||||
//qDebug() << "A";
|
||||
|
||||
|
||||
return m_jumplines;
|
||||
@ -85,7 +85,7 @@ qDebug() << "A";
|
||||
|
||||
int JumpLineManager::findBestChannel(JumpLine &jl)
|
||||
{
|
||||
qDebug() << "findBestChannel()";
|
||||
//qDebug() << "findBestChannel()";
|
||||
if (m_jumplines.jumpLines.count() == 0)
|
||||
{
|
||||
return 0;
|
||||
@ -95,7 +95,7 @@ int JumpLineManager::findBestChannel(JumpLine &jl)
|
||||
bool foundChannel = false;
|
||||
while (!foundChannel)
|
||||
{
|
||||
qDebug() << "Tryning potential channel" << potentialChannel;
|
||||
//qDebug() << "Tryning potential channel" << potentialChannel;
|
||||
bool matched = false;
|
||||
for (quint16 addr = jl.min(); addr <= jl.max(); addr++)
|
||||
{
|
||||
@ -129,12 +129,12 @@ void JumpLineManager::setChannelForJumpLine(int channel, JumpLine &jl)
|
||||
|
||||
void JumpLineManager::dumpJumpLines() const
|
||||
{
|
||||
foreach (JumpLine jl, m_jumplines.jumpLines)
|
||||
{
|
||||
qDebug() << " JumpLine from:" << uint16ToHex(jl.from)
|
||||
<< " to:" << uint16ToHex(jl.to)
|
||||
<< "channel: " << jl.channel << " type:" << jl.type;
|
||||
}
|
||||
//foreach (JumpLine jl, m_jumplines.jumpLines)
|
||||
// {
|
||||
//qDebug() << " JumpLine from:" << uint16ToHex(jl.from)
|
||||
// << " to:" << uint16ToHex(jl.to)
|
||||
// << "channel: " << jl.channel << " type:" << jl.type;
|
||||
// }
|
||||
}
|
||||
|
||||
bool JumpLineManager::doJumpsIntersect(TJump &A, TJump &B) const
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include <QDebug>
|
||||
#include <QMenu>
|
||||
#include <QAction>
|
||||
#include <QPalette>
|
||||
|
||||
CatalogWidget::CatalogWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
@ -15,9 +16,11 @@ CatalogWidget::CatalogWidget(QWidget *parent) :
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->catalog_list->setFont(QFont("monospace"));
|
||||
ui->noteButton->setText(QChar(0x270d));
|
||||
ui->noteButton->setFont(QFont("sans",16,QFont::Bold));
|
||||
|
||||
connect(ui->catalog_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
|
||||
SLOT(itemDoubleClicked(QListWidgetItem*)));
|
||||
connect(ui->catalog_list, &QListWidget::itemDoubleClicked,
|
||||
this, &CatalogWidget::itemDoubleClicked);
|
||||
}
|
||||
|
||||
CatalogWidget::~CatalogWidget()
|
||||
@ -86,6 +89,17 @@ void CatalogWidget::processNewlyLoadedDisk(QString diskfilename, DiskFile *disk)
|
||||
QString sizeStr = QString("%1").arg(size,5,10,QChar(' ')).toUpper();
|
||||
QString text = QString("%1 %2 %3 %4").arg(locked?"*":" ").arg(sizeStr).arg(filetype).arg(filename);
|
||||
QListWidgetItem *item = new QListWidgetItem(text);
|
||||
|
||||
if (filetype == "A") { item->setForeground(Qt::blue); }
|
||||
else if (filetype == "I") { item->setForeground(Qt::darkYellow); }
|
||||
else if (filetype == "B") { item->setForeground(Qt::darkGreen); }
|
||||
else if (filetype == "T") { item->setForeground(Qt::red); }
|
||||
else if (filetype == "R") { item->setForeground(Qt::darkRed); }
|
||||
else if (filetype == "S") { item->setForeground(Qt::magenta); }
|
||||
else if (filetype == "a") { item->setForeground(Qt::darkBlue); }
|
||||
else if (filetype == "b") { item->setForeground(Qt::darkMagenta); }
|
||||
else { item->setForeground(Qt::black); }
|
||||
|
||||
item->setToolTip(createToolTip(fde));
|
||||
item->setData(0x0100,idx);
|
||||
ui->catalog_list->addItem(item);
|
||||
@ -95,6 +109,20 @@ void CatalogWidget::processNewlyLoadedDisk(QString diskfilename, DiskFile *disk)
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
// QFont italfont = ui->catalog_list->font();
|
||||
// italfont.setItalic(true);
|
||||
// QListWidgetItem *item = new QListWidgetItem("Boot Sector");
|
||||
// item->setForeground(Qt::black);
|
||||
// item->setFont(italfont);
|
||||
// item->setData(0x0100,-1);
|
||||
// ui->catalog_list->addItem(item);
|
||||
|
||||
// item = new QListWidgetItem("DOS Image");
|
||||
// item->setForeground(Qt::black);
|
||||
// item->setFont(italfont);
|
||||
// item->setData(0x0100,-2);
|
||||
// ui->catalog_list->addItem(item);
|
||||
|
||||
ui->catalog_list->resize(maxrect.width(),ui->catalog_list->size().height());
|
||||
}
|
||||
}
|
||||
@ -111,9 +139,23 @@ void CatalogWidget::unloadDisk(DiskFile *disk)
|
||||
void CatalogWidget::itemDoubleClicked(QListWidgetItem *item)
|
||||
{
|
||||
int idx = item->data(0x0100).toInt();
|
||||
FileDescriptiveEntry fde = m_disk->getAllFDEs()[idx];
|
||||
if (idx >= 0)
|
||||
{
|
||||
FileDescriptiveEntry fde = m_disk->getAllFDEs()[idx];
|
||||
// qDebug() << "Default File " << AppleString(fde.filename).printable().trimmed();
|
||||
emit openWithDefaultViewer(m_disk,fde);
|
||||
emit openWithDefaultViewer(m_disk,fde);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (idx == -1) // Boot Sector
|
||||
{
|
||||
|
||||
}
|
||||
else if (idx == -2) // DOS Image
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CatalogWidget::itemClicked(QListWidgetItem *item)
|
||||
|
@ -32,22 +32,71 @@
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="volume_label">
|
||||
<property name="text">
|
||||
<string/>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="spacing">
|
||||
<number>4</number>
|
||||
</property>
|
||||
</widget>
|
||||
<item>
|
||||
<widget class="QLabel" name="volume_label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Sans Serif</family>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="noteButton">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Sans Serif</family>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Notes for image.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListWidget" name="catalog_list"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="file_label">
|
||||
<property name="text">
|
||||
<string/>
|
||||
<widget class="QListWidget" name="catalog_list">
|
||||
<property name="autoFillBackground">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionRectVisible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -29,8 +29,6 @@ DiskExplorer::~DiskExplorer()
|
||||
|
||||
void DiskExplorer::initUi()
|
||||
{
|
||||
|
||||
|
||||
QMenuBar *menuBar = new QMenuBar(this);
|
||||
setMenuBar(menuBar);
|
||||
QMenu *menu = new QMenu(tr("&File"),this);
|
||||
@ -38,18 +36,23 @@ void DiskExplorer::initUi()
|
||||
|
||||
QAction *action_Load_Disk_Image = new QAction(tr("&Load Disk Image..."),this);
|
||||
menu->addAction(action_Load_Disk_Image);
|
||||
connect(action_Load_Disk_Image, SIGNAL(triggered()), SLOT(showLoadDialog()));
|
||||
|
||||
connect(action_Load_Disk_Image, &QAction::triggered,
|
||||
this, &DiskExplorer::showLoadDialog);
|
||||
|
||||
m_action_Unload_Disk_Image = new QAction(tr("&Unload Disk Image"),this);
|
||||
m_action_Unload_Disk_Image->setEnabled(false);
|
||||
menu->addAction(m_action_Unload_Disk_Image);
|
||||
connect(m_action_Unload_Disk_Image, SIGNAL(triggered()), SLOT(unloadDiskFile()));
|
||||
|
||||
connect(m_action_Unload_Disk_Image, &QAction::triggered,
|
||||
this, &DiskExplorer::unloadDiskFile);
|
||||
|
||||
menu->addSeparator();
|
||||
|
||||
QAction *action_Quit = new QAction(tr("&Quit"),this);
|
||||
menu->addAction(action_Quit);
|
||||
connect(action_Quit, SIGNAL(triggered()), qApp, SLOT(quit()));
|
||||
|
||||
connect(action_Quit, &QAction::triggered, qApp, &QApplication::quit);
|
||||
|
||||
menu = new QMenu(tr("&Util"),this);
|
||||
menuBar->addMenu(menu);
|
||||
@ -62,8 +65,9 @@ void DiskExplorer::initUi()
|
||||
m_setDiskToolsVisibleAction = new QAction(tr("Show &Disk tools"),this);
|
||||
m_setDiskToolsVisibleAction->setCheckable(true);
|
||||
m_setDiskToolsVisibleAction->setChecked(false);
|
||||
connect(m_setDiskToolsVisibleAction, SIGNAL(toggled(bool)),
|
||||
SLOT(setDiskToolsVisible(bool)));
|
||||
|
||||
connect(m_setDiskToolsVisibleAction, &QAction::triggered, this, &DiskExplorer::setDiskToolsVisible);
|
||||
|
||||
menu->addAction(m_setDiskToolsVisibleAction);
|
||||
|
||||
|
||||
@ -72,13 +76,17 @@ void DiskExplorer::initUi()
|
||||
|
||||
QAction *action_HRCG_Commands = new QAction(tr("&HRCG Commands..."),this);
|
||||
menu->addAction(action_HRCG_Commands);
|
||||
|
||||
|
||||
m_hrcgDialog = new HRCGControlsInfo(this);
|
||||
connect(action_HRCG_Commands, SIGNAL(triggered()), m_hrcgDialog, SLOT(show()));
|
||||
connect(action_HRCG_Commands, &QAction::triggered, m_hrcgDialog, &HRCGControlsInfo::show);
|
||||
|
||||
m_hexConverter = new HexConverter(this);
|
||||
connect(action_Hex_Converter, SIGNAL(triggered()), m_hexConverter, SLOT(show()));
|
||||
connect(action_Hex_Converter, &QAction::triggered, m_hexConverter, &HexConverter::show);
|
||||
|
||||
QAction *action_Ascii_Info = new QAction(tr("&ASCII Table..."),this);
|
||||
menu->addAction(action_Ascii_Info);
|
||||
m_AsciiInfoDialog = new AsciiInfoDialog(this);
|
||||
connect(action_Ascii_Info, &QAction::triggered, m_AsciiInfoDialog, &AsciiInfoDialog::show);
|
||||
|
||||
|
||||
QWidget *widget = new QWidget(0);
|
||||
m_gridLayout = new QGridLayout();
|
||||
@ -106,12 +114,10 @@ void DiskExplorer::initUi()
|
||||
m_gridLayout->addWidget(m_frame,1,2);
|
||||
this->setCentralWidget(widget);
|
||||
|
||||
connect(m_cw,SIGNAL(openWithDefaultViewer(DiskFile*,FileDescriptiveEntry)),
|
||||
SLOT(handleDiskItemSelectedDefaultOpen(DiskFile*,FileDescriptiveEntry)));
|
||||
|
||||
connect(m_demw, SIGNAL(showSectorData(QByteArray,int,int,QVariant)),
|
||||
SLOT(handleShowSectorData(QByteArray,int,int,QVariant)));
|
||||
|
||||
connect(m_cw, &CatalogWidget::openWithDefaultViewer,
|
||||
this, &DiskExplorer::handleDiskItemSelectedDefaultOpen);
|
||||
connect(m_demw, &DiskExplorerMapWidget::showSectorData,
|
||||
this, &DiskExplorer::handleShowSectorData);
|
||||
|
||||
QStatusBar *statusBar = new QStatusBar(this);
|
||||
setStatusBar(statusBar);
|
||||
@ -119,7 +125,6 @@ void DiskExplorer::initUi()
|
||||
m_demwStatusWidget = m_demw->getStatusWidget();
|
||||
statusBar->addPermanentWidget(m_demwStatusWidget);
|
||||
|
||||
|
||||
setDiskToolsVisible(false);
|
||||
}
|
||||
|
||||
@ -184,7 +189,9 @@ void DiskExplorer::handleDiskItemSelectedDefaultOpen(DiskFile *disk, FileDescrip
|
||||
ViewerBase *vb = new ViewerBase();
|
||||
qDebug() << "Adding viewer" << vb;
|
||||
m_viewerList.append(vb);
|
||||
connect(vb,SIGNAL(viewerClosing(ViewerBase*)), SLOT(handleViewerClosing(ViewerBase*)));
|
||||
|
||||
connect(vb,&ViewerBase::viewerClosing,
|
||||
this, &DiskExplorer::handleViewerClosing);
|
||||
vb->setFile(file);
|
||||
vb->show();
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "hexconverter.h"
|
||||
#include "hexdumpviewer.h"
|
||||
#include "viewerbase.h"
|
||||
#include "asciiinfodialog.h"
|
||||
|
||||
#include <QFrame>
|
||||
#include <QTimer>
|
||||
@ -66,6 +67,7 @@ private:
|
||||
|
||||
HRCGControlsInfo *m_hrcgDialog;
|
||||
HexConverter *m_hexConverter;
|
||||
AsciiInfoDialog *m_AsciiInfoDialog;
|
||||
|
||||
|
||||
QAction *m_action_Unload_Disk_Image;
|
||||
|
@ -56,7 +56,7 @@ DiskExplorerMapWidget::DiskExplorerMapWidget(int numtracks, int numsectors, QWid
|
||||
tb->setBgColor(m_defaultColor);
|
||||
tb->setCheckable(true);
|
||||
m_bgroup->addButton(tb,(track * numsectors) + sec);
|
||||
connect(tb,SIGNAL(checked(int,int,bool)),SLOT(handleButtonCheck(int,int,bool)));
|
||||
connect(tb, &DEButton::checked, this, &DiskExplorerMapWidget::handleButtonCheck);
|
||||
m_buttons[track][sec] = tb;
|
||||
|
||||
tb->setAutoFillBackground(true);
|
||||
@ -315,7 +315,7 @@ void DiskExplorerMapWidget::mapDiskToButtons()
|
||||
tslcount++;
|
||||
buttonAt(tsltr,tslse)->setBgColor(m_tsListColor);
|
||||
buttonAt(tsltr,tslse)->setText(QString("%1").arg(idx));
|
||||
qDebug() << "Button" << idx << "=" << tsltr << "," << tslse << " " << fde.filename.printable() << "TSL";
|
||||
//qDebug() << "Button" << idx << "=" << tsltr << "," << tslse << " " << fde.filename.printable() << "TSL";
|
||||
|
||||
QString description = QString("T/S List #%1 for %2").arg(tslcount).arg(fde.filename.printable());
|
||||
m_sectorDescriptions.insert(DETSPair(tsltr,tslse),description);
|
||||
@ -346,7 +346,7 @@ void DiskExplorerMapWidget::mapDiskToButtons()
|
||||
else qDebug() << "Unknown file type: " << fde.fileType();
|
||||
buttonAt(tr,se)->setBgColor(color);
|
||||
setButtonText(tr,se,QString("%1").arg(idx));
|
||||
qDebug() << "Button" << idx << "=" << tr << "," << se << " " << fde.filename.printable();
|
||||
//qDebug() << "Button" << idx << "=" << tr << "," << se << " " << fde.filename.printable();
|
||||
// fde.dump();
|
||||
idx++;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ public:
|
||||
{
|
||||
setTrack(track);
|
||||
setSector(sec);
|
||||
connect(this,SIGNAL(clicked(bool)),SLOT(handleClick(bool)));
|
||||
connect(this, &DEButton::clicked, this, &DEButton::handleClick);
|
||||
m_isHighlighted = false;
|
||||
}
|
||||
void setTrack(int track) { m_track = track; }
|
||||
|
@ -7,16 +7,20 @@
|
||||
#include <QTableWidgetItem>
|
||||
|
||||
|
||||
ApplesoftFileDetailViewer::ApplesoftFileDetailViewer(QWidget *parent) :
|
||||
ApplesoftFileDetailViewer::ApplesoftFileDetailViewer(ApplesoftFile *file, QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::ApplesoftFileDetailViewer)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->m_varView->setSortingEnabled(true);
|
||||
m_file = file;
|
||||
load();
|
||||
setLineData(m_file->getLines());
|
||||
}
|
||||
|
||||
ApplesoftFileDetailViewer::~ApplesoftFileDetailViewer()
|
||||
{
|
||||
save();
|
||||
delete ui;
|
||||
}
|
||||
|
||||
@ -26,10 +30,64 @@ void ApplesoftFileDetailViewer::setLineData(QVector<ApplesoftLine> lineData)
|
||||
process();
|
||||
}
|
||||
|
||||
bool ApplesoftFileDetailViewer::save()
|
||||
{
|
||||
|
||||
if (ui->gridLayout->rowCount() == 0) { return false; }
|
||||
|
||||
QMap <QString,QString> map;
|
||||
for (int idx = 0; idx < ui->m_varView->rowCount(); idx++)
|
||||
{
|
||||
QString var = ui->m_varView->item(idx,1)->text();
|
||||
if (var.contains(","))
|
||||
{
|
||||
var.truncate(var.indexOf(","));
|
||||
}
|
||||
var = var.trimmed();
|
||||
QString note = ui->m_varView->item(idx,2)->text().trimmed();
|
||||
if (note.length())
|
||||
{
|
||||
map.insert(var,note);
|
||||
}
|
||||
}
|
||||
|
||||
QFile outfile(QString("%1%2%3")
|
||||
.arg(m_file->diskFile()->getMetaDataPath())
|
||||
.arg(m_file->filename())
|
||||
.arg(".asvar"));
|
||||
if (outfile.open(QIODevice::WriteOnly))
|
||||
{
|
||||
QDataStream ds(&outfile);
|
||||
ds << map;
|
||||
outfile.close();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ApplesoftFileDetailViewer::load()
|
||||
{
|
||||
QFile infile(QString("%1%2%3")
|
||||
.arg(m_file->diskFile()->getMetaDataPath())
|
||||
.arg(m_file->filename())
|
||||
.arg(".asvar"));
|
||||
if (infile.open(QIODevice::ReadOnly))
|
||||
{
|
||||
QDataStream ds(&infile);
|
||||
ds >> m_notes;
|
||||
infile.close();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void ApplesoftFileDetailViewer::process()
|
||||
{
|
||||
QMap<QString,QStringList> vardata;
|
||||
QMap<QString,quint16> vartypes;
|
||||
QMap<QString,QStringList> varalias;
|
||||
|
||||
|
||||
foreach (ApplesoftLine line, m_lines)
|
||||
{
|
||||
@ -45,9 +103,16 @@ void ApplesoftFileDetailViewer::process()
|
||||
tid == ApplesoftToken::StringAryVarTokenVal)
|
||||
{
|
||||
QString varname = token.getStringValue();
|
||||
QString fullname = varname;
|
||||
varname = shortenName(varname);
|
||||
if (varname.contains("(")) { varname.append(")"); }
|
||||
if (fullname.contains("(")) { fullname.append(")"); }
|
||||
vardata[varname].append(QString("%1").arg(linenum));
|
||||
vartypes[varname] = tid;
|
||||
if (fullname != varname)
|
||||
{
|
||||
varalias[varname].append(fullname);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -78,11 +143,23 @@ void ApplesoftFileDetailViewer::process()
|
||||
twi->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
ui->m_varView->setItem(idx,0,twi);
|
||||
|
||||
twi = new QTableWidgetItem(key);
|
||||
QString keywithalias = key;
|
||||
if (varalias.contains(key))
|
||||
{
|
||||
varalias[key].removeDuplicates();
|
||||
QString aliases = varalias[key].join(", ");
|
||||
keywithalias.append(", ");
|
||||
keywithalias.append(aliases);
|
||||
}
|
||||
twi = new QTableWidgetItem(keywithalias);
|
||||
twi->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
ui->m_varView->setItem(idx,1,twi);
|
||||
|
||||
twi = new QTableWidgetItem(" ");
|
||||
if (m_notes.contains(key))
|
||||
{
|
||||
twi->setText(m_notes[key]);
|
||||
}
|
||||
twi->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable);
|
||||
ui->m_varView->setItem(idx,2,twi);
|
||||
|
||||
@ -98,3 +175,22 @@ void ApplesoftFileDetailViewer::process()
|
||||
ui->m_varView->resizeColumnToContents(2);
|
||||
|
||||
}
|
||||
|
||||
QString ApplesoftFileDetailViewer::shortenName(QString name)
|
||||
{
|
||||
bool hasParen = name.contains('(');
|
||||
if (hasParen) { name.remove(name.indexOf('('),1); }
|
||||
|
||||
bool hasDollar = name.contains('$');
|
||||
if (hasDollar) { name.remove(name.indexOf('$'),1); }
|
||||
|
||||
bool hasPercent = name.contains('%');
|
||||
if (hasPercent) { name.remove(name.indexOf('%'),1); }
|
||||
|
||||
name = name.left(2);
|
||||
if (hasDollar) { name.append("$"); }
|
||||
if (hasPercent) { name.append("%"); }
|
||||
if (hasParen) { name.append("("); }
|
||||
|
||||
return name;
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <QWidget>
|
||||
#include "applesoftline.h"
|
||||
#include "applesofttoken.h"
|
||||
#include "applesoftfile.h"
|
||||
#include <QDebug>
|
||||
|
||||
namespace Ui {
|
||||
@ -15,16 +16,26 @@ class ApplesoftFileDetailViewer : public QWidget
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ApplesoftFileDetailViewer(QWidget *parent = 0);
|
||||
explicit ApplesoftFileDetailViewer(ApplesoftFile *file, QWidget *parent = 0);
|
||||
~ApplesoftFileDetailViewer();
|
||||
|
||||
void setLineData(QVector<ApplesoftLine> lineData);
|
||||
void foo() { qDebug() << "AFDV::foo!"; }
|
||||
|
||||
bool save();
|
||||
bool load();
|
||||
|
||||
protected:
|
||||
QString shortenName(QString name);
|
||||
private:
|
||||
void process();
|
||||
|
||||
Ui::ApplesoftFileDetailViewer *ui;
|
||||
QVector<ApplesoftLine> m_lines;
|
||||
|
||||
QMap<QString,QString> m_notes;
|
||||
|
||||
ApplesoftFile *m_file;
|
||||
};
|
||||
|
||||
#endif // APPLESOFTFILEDETAILVIEWER_H
|
||||
|
@ -22,7 +22,7 @@ ApplesoftFileViewer::ApplesoftFileViewer(QWidget *parent) :
|
||||
|
||||
m_formatter = new ApplesoftFormatter(this);
|
||||
m_formatter->setFlags(ApplesoftFormatter::ShowCtrlChars);
|
||||
connect(ui->findButton,SIGNAL(clicked(bool)), SLOT(findText()));
|
||||
connect(ui->findButton, &QToolButton::clicked, this, &ApplesoftFileViewer::findText);
|
||||
m_isFirstFind = true;
|
||||
ui->textArea->setUndoRedoEnabled(false);
|
||||
ui->textArea->setUndoRedoEnabled(true);
|
||||
@ -46,11 +46,11 @@ ApplesoftFileViewer::ApplesoftFileViewer(QWidget *parent) :
|
||||
|
||||
ApplesoftFileViewer::~ApplesoftFileViewer()
|
||||
{
|
||||
delete ui;
|
||||
if (m_afdv)
|
||||
{ m_afdv->foo();
|
||||
delete m_afdv;
|
||||
{
|
||||
m_afdv->deleteLater();
|
||||
}
|
||||
delete ui;
|
||||
}
|
||||
|
||||
bool ApplesoftFileViewer::makeMenuOptions(QMenu *menu)
|
||||
@ -63,8 +63,11 @@ bool ApplesoftFileViewer::makeMenuOptions(QMenu *menu)
|
||||
m_showIntsAction->setCheckable(true);
|
||||
m_showIntsAction->setChecked(settings.value("ASViewer.intsAsHex",false).toBool());
|
||||
setIntsAsHex(settings.value("ASViewer.intsAsHex",false).toBool(),NoReformat);
|
||||
connect(m_showIntsAction, SIGNAL(toggled(bool)), ui->findText,SLOT(clear()));
|
||||
connect(m_showIntsAction, SIGNAL(toggled(bool)),SLOT(setIntsAsHex(bool)));
|
||||
|
||||
connect(m_showIntsAction, &QAction::toggled, ui->findText, &QLineEdit::clear);
|
||||
connect(m_showIntsAction, &QAction::toggled,
|
||||
this, static_cast< void (ApplesoftFileViewer::*)(bool)>(&ApplesoftFileViewer::setIntsAsHex));
|
||||
|
||||
}
|
||||
menu->addAction(m_showIntsAction);
|
||||
|
||||
@ -74,8 +77,11 @@ bool ApplesoftFileViewer::makeMenuOptions(QMenu *menu)
|
||||
m_reindentCodeAction->setCheckable(true);
|
||||
m_reindentCodeAction->setChecked(settings.value("ASViewer.indentCode",false).toBool());
|
||||
setIndentCode(settings.value("ASViewer.indentCode",false).toBool(),NoReformat);
|
||||
connect(m_reindentCodeAction, SIGNAL(toggled(bool)), ui->findText,SLOT(clear()));
|
||||
connect(m_reindentCodeAction, SIGNAL(toggled(bool)),SLOT(setIndentCode(bool)));
|
||||
|
||||
connect(m_reindentCodeAction, &QAction::toggled, ui->findText, &QLineEdit::clear);
|
||||
connect(m_reindentCodeAction, &QAction::toggled,
|
||||
this, static_cast< void (ApplesoftFileViewer::*)(bool)>(&ApplesoftFileViewer::setIndentCode));
|
||||
|
||||
}
|
||||
menu->addAction(m_reindentCodeAction);
|
||||
|
||||
@ -85,8 +91,10 @@ bool ApplesoftFileViewer::makeMenuOptions(QMenu *menu)
|
||||
m_blankAfterReturnsAction->setCheckable(true);
|
||||
m_blankAfterReturnsAction->setChecked(settings.value("ASViewer.breakAfterReturn",false).toBool());
|
||||
setIndentCode(settings.value("ASViewer.breakAfterReturn",false).toBool(),NoReformat);
|
||||
connect(m_blankAfterReturnsAction, SIGNAL(toggled(bool)), ui->findText,SLOT(clear()));
|
||||
connect(m_blankAfterReturnsAction, SIGNAL(toggled(bool)),SLOT(setBreakAfterReturn(bool)));
|
||||
|
||||
connect(m_blankAfterReturnsAction, &QAction::toggled, ui->findText, &QLineEdit::clear);
|
||||
connect(m_blankAfterReturnsAction, &QAction::toggled,
|
||||
this, static_cast< void (ApplesoftFileViewer::*)(bool)>(&ApplesoftFileViewer::setBreakAfterReturn));
|
||||
}
|
||||
menu->addAction(m_blankAfterReturnsAction);
|
||||
|
||||
@ -96,8 +104,10 @@ bool ApplesoftFileViewer::makeMenuOptions(QMenu *menu)
|
||||
m_showCtrlCharsAction->setCheckable(true);
|
||||
m_showCtrlCharsAction->setChecked(settings.value("ASViewer.showCtrlChars",false).toBool());
|
||||
setIndentCode(settings.value("ASViewer.showCtrlChars",false).toBool(),NoReformat);
|
||||
connect(m_showCtrlCharsAction, SIGNAL(toggled(bool)), ui->findText,SLOT(clear()));
|
||||
connect(m_showCtrlCharsAction, SIGNAL(toggled(bool)),SLOT(setShowCtrlChars(bool)));
|
||||
|
||||
connect(m_showCtrlCharsAction, &QAction::toggled, ui->findText, &QLineEdit::clear);
|
||||
connect(m_showCtrlCharsAction, &QAction::toggled,
|
||||
this, static_cast<void (ApplesoftFileViewer::*)(bool)>(&ApplesoftFileViewer::setShowCtrlChars));
|
||||
}
|
||||
menu->addAction(m_showCtrlCharsAction);
|
||||
|
||||
@ -110,7 +120,7 @@ bool ApplesoftFileViewer::makeMenuOptions(QMenu *menu)
|
||||
m_wordWrapAction->setCheckable(true);
|
||||
m_wordWrapAction->setChecked(settings.value("ASViewer.WordWrap",true).toBool());
|
||||
toggleWordWrap(settings.value("ASViewer.WordWrap",true).toBool());
|
||||
connect(m_wordWrapAction, SIGNAL(toggled(bool)), SLOT(toggleWordWrap(bool)));
|
||||
connect(m_wordWrapAction, &QAction::triggered, this, &ApplesoftFileViewer::toggleWordWrap);
|
||||
}
|
||||
menu->addAction(m_wordWrapAction);
|
||||
|
||||
@ -120,8 +130,10 @@ bool ApplesoftFileViewer::makeMenuOptions(QMenu *menu)
|
||||
m_syntaxHighlightingAction->setCheckable(true);
|
||||
m_syntaxHighlightingAction->setChecked(settings.value("ASViewer.syntaxHighlighting",false).toBool());
|
||||
setIndentCode(settings.value("ASViewer.syntaxHighlighting",false).toBool(),NoReformat);
|
||||
connect(m_syntaxHighlightingAction, SIGNAL(toggled(bool)), ui->findText,SLOT(clear()));
|
||||
connect(m_syntaxHighlightingAction, SIGNAL(toggled(bool)),SLOT(setSyntaxHighlighting(bool)));
|
||||
|
||||
connect(m_syntaxHighlightingAction, &QAction::toggled, ui->findText, &QLineEdit::clear);
|
||||
connect(m_syntaxHighlightingAction, &QAction::toggled,
|
||||
this, static_cast<void (ApplesoftFileViewer::*)(bool)>(&ApplesoftFileViewer::setSyntaxHighlighting));
|
||||
}
|
||||
menu->addAction(m_syntaxHighlightingAction);
|
||||
|
||||
@ -133,7 +145,7 @@ bool ApplesoftFileViewer::makeMenuOptions(QMenu *menu)
|
||||
{
|
||||
m_showVarExplorerAction = new QAction("Show &Variable Explorer...",this);
|
||||
m_showVarExplorerAction->setCheckable(false);
|
||||
connect(m_showVarExplorerAction, SIGNAL(triggered(bool)), SLOT(launchVarBrowser()));
|
||||
connect(m_showVarExplorerAction, &QAction::triggered, this, &ApplesoftFileViewer::launchVarBrowser);
|
||||
}
|
||||
menu->addAction(m_showVarExplorerAction);
|
||||
|
||||
@ -208,6 +220,11 @@ void ApplesoftFileViewer::setShowCtrlChars(bool enabled, ReformatRule reformat)
|
||||
reformatText();
|
||||
}
|
||||
|
||||
void ApplesoftFileViewer::setSyntaxHighlighting(bool enabled)
|
||||
{
|
||||
setSyntaxHighlighting(enabled, ForceReformat);
|
||||
}
|
||||
|
||||
void ApplesoftFileViewer::setSyntaxHighlighting(bool enabled, ReformatRule reformat)
|
||||
{
|
||||
if (enabled)
|
||||
@ -290,9 +307,8 @@ void ApplesoftFileViewer::launchVarBrowser()
|
||||
{
|
||||
if (!m_afdv)
|
||||
{
|
||||
m_afdv = new ApplesoftFileDetailViewer();
|
||||
m_afdv = new ApplesoftFileDetailViewer(m_file);
|
||||
qDebug() << "m_afdv = " << m_afdv;
|
||||
m_afdv->setLineData(m_file->getLines());
|
||||
m_afdv->setWindowTitle(QString("Variables - %1").arg(m_file->filename()));
|
||||
}
|
||||
m_afdv->show();
|
||||
|
@ -46,11 +46,20 @@ public slots:
|
||||
|
||||
protected slots:
|
||||
void toggleWordWrap(bool enabled);
|
||||
void setSyntaxHighlighting(bool enabled, ReformatRule reformat = ForceReformat);
|
||||
void setIndentCode(bool enabled, ReformatRule reformat = ForceReformat);
|
||||
void setIntsAsHex(bool enabled, ReformatRule reformat = ForceReformat);
|
||||
void setBreakAfterReturn(bool enabled, ReformatRule reformat = ForceReformat);
|
||||
void setShowCtrlChars(bool enabled, ReformatRule reformat = ForceReformat);
|
||||
void setSyntaxHighlighting(bool enabled);
|
||||
void setSyntaxHighlighting(bool enabled, ReformatRule reformat);
|
||||
|
||||
void setIndentCode(bool enabled) { setIndentCode(enabled, ForceReformat); }
|
||||
void setIndentCode(bool enabled, ReformatRule reformat);
|
||||
|
||||
void setIntsAsHex(bool enabled) { setIntsAsHex(enabled, ForceReformat); }
|
||||
void setIntsAsHex(bool enabled, ReformatRule reformat);
|
||||
|
||||
void setBreakAfterReturn(bool enabled) { setBreakAfterReturn(enabled,ForceReformat); }
|
||||
void setBreakAfterReturn(bool enabled, ReformatRule reformat);
|
||||
|
||||
void setShowCtrlChars(bool enabled) { setShowCtrlChars(enabled,ForceReformat); }
|
||||
void setShowCtrlChars(bool enabled, ReformatRule reformat);
|
||||
void launchVarBrowser();
|
||||
void reformatText();
|
||||
|
||||
|
@ -68,20 +68,20 @@ bool CharSetViewer::optionsMenuItems(QMenu *menu)
|
||||
action->setCheckable(true);
|
||||
action->setChecked(settings.value("CharSetViewer.ShowGrid",true).toBool());
|
||||
showGrid(settings.value("CharSetViewer.ShowGrid",true).toBool());
|
||||
connect(action, SIGNAL(toggled(bool)),SLOT(showGrid(bool)));
|
||||
connect(action, &QAction::toggled, this, &CharSetViewer::showGrid);
|
||||
menu->addAction(action);
|
||||
|
||||
action = new QAction("&Enable Bit Shift",menu);
|
||||
action->setCheckable(true);
|
||||
action->setChecked(settings.value("CharSetViewer.EnableBitShift",true).toBool());
|
||||
enableBitShift(settings.value("CharSetViewer.EnableBitShift",true).toBool());
|
||||
connect(action, SIGNAL(toggled(bool)),SLOT(enableBitShift(bool)));
|
||||
connect(action, &QAction::toggled, this, &CharSetViewer::enableBitShift);
|
||||
menu->addAction(action);
|
||||
|
||||
menu->addSeparator();
|
||||
|
||||
action = new QAction("&Character Set Explorer...");
|
||||
connect(action, SIGNAL(triggered(bool)), SLOT(showExplorer()));
|
||||
connect(action, &QAction::triggered, this, &CharSetViewer::showExplorer);
|
||||
menu->addAction(action);
|
||||
|
||||
return true;
|
||||
@ -91,7 +91,7 @@ void CharSetViewer::showExplorer()
|
||||
{
|
||||
if (!m_cse) {
|
||||
m_cse = new CharacterSetExplorer(this);
|
||||
connect(m_cse, SIGNAL(destroyed(QObject*)), SLOT(cleanupExplorer()));
|
||||
connect(m_cse, &CharacterSetExplorer::destroyed, this, &CharSetViewer::cleanupExplorer);
|
||||
m_cse->setCharSet(m_charset);
|
||||
}
|
||||
m_cse->show();
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -144,7 +144,8 @@ bool HexDumpViewer::optionsMenuItems(QMenu *menu)
|
||||
QAction *action = new QAction("&Word Wrap");
|
||||
action->setCheckable(true);
|
||||
action->setChecked(settings.value("HexViewer.WordWrap",true).toBool());
|
||||
connect(action, SIGNAL(toggled(bool)), SLOT(toggleWordWrap(bool)));
|
||||
connect(action, &QAction::toggled,
|
||||
this, &HexDumpViewer::toggleWordWrap);
|
||||
menu->addAction(action);
|
||||
|
||||
return true;
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "hiresviewwidget.h"
|
||||
#include "binaryfile.h"
|
||||
#include "util.h"
|
||||
|
||||
#include <QPainter>
|
||||
#include <QMap>
|
||||
@ -7,6 +8,7 @@
|
||||
#include <QResizeEvent>
|
||||
#include <QSettings>
|
||||
#include <QGridLayout>
|
||||
#include <QLabel>
|
||||
|
||||
#include <math.h>
|
||||
|
||||
@ -18,6 +20,15 @@ HiresViewWidget::HiresViewWidget(QWidget *parent) :
|
||||
setLayout(gv);
|
||||
hrsw = new HiresScreenWidget(this);
|
||||
gv->addWidget(hrsw);
|
||||
m_offsetLabel = new QLabel(this);
|
||||
m_offsetLabel->setText("");
|
||||
gv->addWidget(m_offsetLabel,1,0);
|
||||
gv->setRowStretch(0,10000);
|
||||
gv->setRowStretch(1,1);
|
||||
|
||||
connect(hrsw, &HiresScreenWidget::newOffset,
|
||||
this, &HiresViewWidget::handleNewOffset);
|
||||
handleNewOffset(0);
|
||||
|
||||
resize(561,384);
|
||||
}
|
||||
@ -38,6 +49,10 @@ bool HiresViewWidget::optionsMenuItems(QMenu *menu)
|
||||
menu->addAction(hrsw->perPixelColorAction());
|
||||
menu->addSeparator();
|
||||
menu->addAction(hrsw->showScanLinesAction());
|
||||
menu->addSeparator();
|
||||
menu->addAction(hrsw->prevPageAction());
|
||||
menu->addAction(hrsw->nextPageAction());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -99,3 +114,9 @@ void HiresViewWidget::doExport()
|
||||
pm.save(savename.path());
|
||||
}
|
||||
|
||||
void HiresViewWidget::handleNewOffset(quint16 offset)
|
||||
{
|
||||
QString text = QString("Offset: %1 (0x%2)").arg(offset).arg(uint16ToHex(offset));
|
||||
m_offsetLabel->setText(text);
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <QBitArray>
|
||||
#include <QAction>
|
||||
#include <QMenu>
|
||||
|
||||
#include <QLabel>
|
||||
|
||||
|
||||
class HiresViewWidget : public FileViewerInterface
|
||||
@ -26,14 +26,19 @@ public:
|
||||
|
||||
bool canPrint() const;
|
||||
bool canExport() const;
|
||||
|
||||
public slots:
|
||||
void setFile(GenericFile *file);
|
||||
void setFile(BinaryFile *file);
|
||||
|
||||
void doPrint();
|
||||
void doExport();
|
||||
|
||||
void handleNewOffset(quint16 offset);
|
||||
|
||||
private:
|
||||
HiresScreenWidget *hrsw;
|
||||
QLabel *m_offsetLabel;
|
||||
|
||||
BinaryFile *m_file;
|
||||
};
|
||||
|
@ -203,7 +203,7 @@ void MazeViewer::drawMaze()
|
||||
}
|
||||
|
||||
painter.setPen(Qt::black);
|
||||
quint8 cv = getCellDesc(idx,jdx);
|
||||
//quint8 cv = getCellDesc(idx,jdx);
|
||||
quint8 tr = getCellInventory(idx,jdx);
|
||||
QString trs = inventoryToString(tr);
|
||||
quint8 mo = getCellMonsters(idx,jdx);
|
||||
|
@ -124,7 +124,8 @@ bool TextHexDumpViewer::optionsMenuItems(QMenu *menu)
|
||||
QAction *action = new QAction("&Word Wrap");
|
||||
action->setCheckable(true);
|
||||
action->setChecked(settings.value("TexHexViewer.WordWrap",true).toBool());
|
||||
connect(action, SIGNAL(toggled(bool)), SLOT(toggleWordWrap(bool)));
|
||||
connect(action, &QAction::toggled,
|
||||
this, &TextHexDumpViewer::toggleWordWrap);
|
||||
menu->addAction(action);
|
||||
|
||||
return true;
|
||||
|
@ -59,7 +59,7 @@ void ViewerBase::setFile(GenericFile *file)
|
||||
if (dynamic_cast<ApplesoftFile*>(file))
|
||||
hdv->setFile(file,0x801); //TODO: Double check this offset.
|
||||
else
|
||||
hdv->setFile(file);
|
||||
hdv->setFile(file,m_file->address());
|
||||
descriptor = ("Hex Dump Viewer");
|
||||
addViewer(descriptor,hdv);
|
||||
defaultViewerDescriptor = descriptor;
|
||||
@ -132,7 +132,8 @@ void ViewerBase::setFile(GenericFile *file)
|
||||
defaultViewerDescriptor = descriptor;
|
||||
|
||||
}
|
||||
connect(m_viewercombo, SIGNAL(currentIndexChanged(QString)), SLOT(showViewer(QString)));
|
||||
connect(m_viewercombo, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged),
|
||||
this, &ViewerBase::showViewer);
|
||||
showViewer(defaultViewerDescriptor);
|
||||
}
|
||||
|
||||
@ -151,18 +152,20 @@ void ViewerBase::addViewer(QString descriptor, FileViewerInterface *viewer)
|
||||
}
|
||||
}
|
||||
|
||||
void ViewerBase::showViewer(QString descriptor)
|
||||
void ViewerBase::showViewer(const QString& descriptor)
|
||||
{
|
||||
FileViewerInterface *fvi = m_viewers[descriptor];
|
||||
if (fvi)
|
||||
{
|
||||
ui->actionExport->disconnect(SIGNAL(triggered(bool)));
|
||||
ui->actionExport->setEnabled(fvi->canExport());
|
||||
connect(ui->actionExport, SIGNAL(triggered(bool)), fvi, SLOT(doExport()));
|
||||
connect(ui->actionExport, &QAction::triggered,
|
||||
fvi, &FileViewerInterface::doExport);
|
||||
|
||||
ui->action_Print->disconnect(SIGNAL(triggered(bool)));
|
||||
ui->action_Print->setEnabled(fvi->canPrint());
|
||||
connect(ui->action_Print, SIGNAL(triggered(bool)), fvi, SLOT(doPrint()));
|
||||
connect(ui->action_Print, &QAction::triggered,
|
||||
fvi, &FileViewerInterface::doPrint);
|
||||
|
||||
m_optionMenu->clear();
|
||||
m_viewercombo->setCurrentText(descriptor);
|
||||
|
@ -27,7 +27,7 @@ signals:
|
||||
void viewerClosing(ViewerBase *me);
|
||||
|
||||
public slots:
|
||||
void showViewer(QString descriptor);
|
||||
void showViewer(const QString &descriptor);
|
||||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent *event);
|
||||
|
@ -7,8 +7,11 @@ CharacterSetExplorer::CharacterSetExplorer(QWidget *parent) :
|
||||
{
|
||||
m_unpackedScreen.fill(0,8192);
|
||||
ui->setupUi(this);
|
||||
connect(ui->insertChar, SIGNAL(clicked(bool)), SLOT(handleInsertCharButton()));
|
||||
connect(ui->inputText, SIGNAL(textChanged(QString)), SLOT(handleTextChanged(QString)));
|
||||
|
||||
connect(ui->insertChar, &QPushButton::clicked,
|
||||
this, &CharacterSetExplorer::handleInsertCharButton);
|
||||
connect(ui->inputText, &QLineEdit::textChanged,
|
||||
this, &CharacterSetExplorer::handleTextChanged);
|
||||
}
|
||||
|
||||
void CharacterSetExplorer::setCharSet(CharacterSet &charset)
|
||||
|
@ -9,7 +9,9 @@ DisassemblerMetadataDialog::DisassemblerMetadataDialog(BinaryFileMetadata *bfm,
|
||||
ui(new Ui::DisassemblerMetadataDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
setRelocatable(false);
|
||||
ui->entryTable->verticalHeader()->show();
|
||||
ui->removeEntryPointButton->setEnabled(false);
|
||||
ui->removeSymbolButton->setEnabled(false);
|
||||
|
||||
m_bfm = bfm;
|
||||
|
||||
@ -19,17 +21,29 @@ DisassemblerMetadataDialog::DisassemblerMetadataDialog(BinaryFileMetadata *bfm,
|
||||
ui->entryTable->setModel(m_epmodel);
|
||||
ui->symbolTable->setModel(m_asmodel);
|
||||
|
||||
connect(ui->cancelButton, SIGNAL(clicked(bool)), SLOT(handleCancelButton()));
|
||||
connect(ui->exitButton,SIGNAL(clicked(bool)), SLOT(handleExitButton()));
|
||||
connect(ui->processButton, SIGNAL(clicked(bool)), SLOT(handleProcessButton()));
|
||||
connect(ui->exitButton, &QPushButton::clicked,
|
||||
this, &DisassemblerMetadataDialog::handleExitButton);
|
||||
connect(ui->processButton, &QPushButton::clicked,
|
||||
this, &DisassemblerMetadataDialog::handleProcessButton);
|
||||
|
||||
connect(ui->addEntryPointButton, SIGNAL(clicked(bool)), SLOT(handleAddEntryPointButton()));
|
||||
connect(ui->addSymbolButton, SIGNAL(clicked(bool)), SLOT(handleAddSymbolButton()));
|
||||
connect(ui->addEntryPointButton, &QToolButton::clicked,
|
||||
this, &DisassemblerMetadataDialog::handleAddEntryPointButton);
|
||||
connect(ui->addSymbolButton, &QToolButton::clicked,
|
||||
this, &DisassemblerMetadataDialog::handleAddSymbolButton);
|
||||
|
||||
connect(ui->removeEntryPointButton, &QToolButton::clicked,
|
||||
this, &DisassemblerMetadataDialog::handleRemoveEntryPointButton);
|
||||
connect(ui->removeSymbolButton, &QToolButton::clicked,
|
||||
this, &DisassemblerMetadataDialog::handleRemoveSymbolButton);
|
||||
|
||||
connect(ui->entryTable->selectionModel(), &QItemSelectionModel::selectionChanged,
|
||||
this, &DisassemblerMetadataDialog::handleEntryPointSelectionChanged);
|
||||
connect(ui->symbolTable->selectionModel(), &QItemSelectionModel::selectionChanged,
|
||||
this, &DisassemblerMetadataDialog::handleSymbolSelectionChanged);
|
||||
}
|
||||
|
||||
DisassemblerMetadataDialog::~DisassemblerMetadataDialog()
|
||||
{
|
||||
delete m_bfm;
|
||||
delete ui;
|
||||
}
|
||||
|
||||
@ -39,19 +53,9 @@ void DisassemblerMetadataDialog::showEvent(QShowEvent *)
|
||||
ui->symbolTable->resizeRowsToContents();
|
||||
}
|
||||
|
||||
void DisassemblerMetadataDialog::setRelocatable(bool relocatable)
|
||||
{
|
||||
ui->reloAddrLabel->setVisible(relocatable);
|
||||
ui->reloAddrText->setVisible(relocatable);
|
||||
}
|
||||
|
||||
void DisassemblerMetadataDialog::handleCancelButton()
|
||||
{
|
||||
this->close();
|
||||
}
|
||||
|
||||
void DisassemblerMetadataDialog::handleExitButton()
|
||||
{
|
||||
m_bfm->requestDisassembly();
|
||||
m_bfm->save();
|
||||
this->close();
|
||||
}
|
||||
@ -72,12 +76,20 @@ void DisassemblerMetadataDialog::handleAddEntryPointButton()
|
||||
ep.note = lid.getInfo();
|
||||
m_bfm->entryPoints()->addPoint(ep);
|
||||
ui->entryTable->resizeRowsToContents();
|
||||
ui->entryTable->resizeRowsToContents();
|
||||
}
|
||||
}
|
||||
|
||||
void DisassemblerMetadataDialog::handleRemoveEntryPointButton()
|
||||
{
|
||||
|
||||
QModelIndexList selection = ui->entryTable->selectionModel()->selectedRows(0);
|
||||
qDebug() << "Removing" << selection.count() << "row(s)";
|
||||
if (selection.count())
|
||||
{
|
||||
// qDebug() << "Removing row" << selection[0].row();
|
||||
m_epmodel->removeRows(selection[0].row(),1);
|
||||
// qDebug() << "Removed row" << selection[0].row();
|
||||
}
|
||||
}
|
||||
|
||||
void DisassemblerMetadataDialog::handleAddSymbolButton()
|
||||
@ -85,11 +97,20 @@ void DisassemblerMetadataDialog::handleAddSymbolButton()
|
||||
LocationInfoDialog lid(this);
|
||||
lid.setInfoLabelString("Symbol Name");
|
||||
lid.setWindowTitle("Add Symbol");
|
||||
lid.showSizeWidgets(true);
|
||||
if (lid.exec() == Accepted)
|
||||
{
|
||||
AssemblerSymbol as;
|
||||
as.address = lid.getAddress();
|
||||
as.name = lid.getInfo();
|
||||
if (lid.getSymbolSize() == 0) // Byte
|
||||
{
|
||||
as.symbolsize = SizeByte;
|
||||
}
|
||||
else
|
||||
{
|
||||
as.symbolsize = SizeWord;
|
||||
}
|
||||
m_bfm->assemblerSymbols()->addSymbol(as);
|
||||
ui->symbolTable->resizeRowsToContents();
|
||||
}
|
||||
@ -97,5 +118,26 @@ void DisassemblerMetadataDialog::handleAddSymbolButton()
|
||||
|
||||
void DisassemblerMetadataDialog::handleRemoveSymbolButton()
|
||||
{
|
||||
|
||||
QModelIndexList selection = ui->symbolTable->selectionModel()->selectedRows(0);
|
||||
qDebug() << "Removing" << selection.count() << "row(s)";
|
||||
if (selection.count())
|
||||
{
|
||||
m_asmodel->removeRows(selection[0].row(),1);
|
||||
}
|
||||
}
|
||||
|
||||
void DisassemblerMetadataDialog::handleEntryPointSelectionChanged(QItemSelection selected, QItemSelection deselected)
|
||||
{
|
||||
Q_UNUSED(selected);
|
||||
Q_UNUSED(deselected);
|
||||
int selectedcount = ui->entryTable->selectionModel()->selectedRows().count();
|
||||
ui->removeEntryPointButton->setEnabled(selectedcount);
|
||||
}
|
||||
|
||||
void DisassemblerMetadataDialog::handleSymbolSelectionChanged(QItemSelection selected, QItemSelection deselected)
|
||||
{
|
||||
Q_UNUSED(selected);
|
||||
Q_UNUSED(deselected);
|
||||
int selectedcount = ui->symbolTable->selectionModel()->selectedRows().count();
|
||||
ui->removeSymbolButton->setEnabled(selectedcount);
|
||||
}
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "LocationInfoDialog.h"
|
||||
|
||||
#include <QDialog>
|
||||
#include <QItemSelection>
|
||||
|
||||
namespace Ui {
|
||||
class DisassemblerMetadataDialog;
|
||||
@ -22,13 +23,10 @@ public:
|
||||
explicit DisassemblerMetadataDialog(BinaryFileMetadata *bfm, QWidget *parent = 0);
|
||||
~DisassemblerMetadataDialog();
|
||||
|
||||
void setRelocatable(bool relocatable);
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *);
|
||||
|
||||
protected slots:
|
||||
void handleCancelButton();
|
||||
void handleExitButton();
|
||||
void handleProcessButton();
|
||||
|
||||
@ -38,6 +36,9 @@ protected slots:
|
||||
void handleAddSymbolButton();
|
||||
void handleRemoveSymbolButton();
|
||||
|
||||
void handleEntryPointSelectionChanged(QItemSelection selected, QItemSelection deselected);
|
||||
void handleSymbolSelectionChanged(QItemSelection selected, QItemSelection deselected);
|
||||
|
||||
|
||||
private:
|
||||
Ui::DisassemblerMetadataDialog *ui;
|
||||
|
@ -6,205 +6,15 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>796</width>
|
||||
<height>593</height>
|
||||
<width>634</width>
|
||||
<height>429</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
<string>Metadata</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4" rowstretch="2,3,0">
|
||||
<item row="0" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,1">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Entry Points</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>312</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QToolButton" name="addEntryPointButton">
|
||||
<property name="text">
|
||||
<string>+</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QToolButton" name="removeEntryPointButton">
|
||||
<property name="text">
|
||||
<string>-</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QTableView" name="entryTable">
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::NoSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Symbols</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>311</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QToolButton" name="addSymbolButton">
|
||||
<property name="text">
|
||||
<string>+</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QToolButton" name="removeSymbolButton">
|
||||
<property name="text">
|
||||
<string>-</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QTableView" name="symbolTable">
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::NoSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Usage</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="0" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5" stretch="10,1">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QPushButton" name="processButton">
|
||||
<property name="text">
|
||||
<string>&Process</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="outputLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>xxxxx</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="reloAddrLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Reloc. Addr</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="reloAddrText">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QTableView" name="metadataTable"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,0,0">
|
||||
<item>
|
||||
<spacer name="hs2">
|
||||
@ -220,9 +30,9 @@
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="cancelButton">
|
||||
<widget class="QPushButton" name="processButton">
|
||||
<property name="text">
|
||||
<string>&Cancel</string>
|
||||
<string>Apply</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@ -238,6 +48,146 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="entryPointTab">
|
||||
<attribute name="title">
|
||||
<string>Entry Points</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_7">
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Entry Points</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QTableView" name="entryTable">
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QToolButton" name="removeEntryPointButton">
|
||||
<property name="text">
|
||||
<string>Remove</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QToolButton" name="addEntryPointButton">
|
||||
<property name="text">
|
||||
<string>Add</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>312</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="symbolsTab">
|
||||
<attribute name="title">
|
||||
<string>Symbols</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>Symbols</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>311</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QToolButton" name="addSymbolButton">
|
||||
<property name="text">
|
||||
<string>Add</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QToolButton" name="removeSymbolButton">
|
||||
<property name="text">
|
||||
<string>Remove</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QTableView" name="symbolTable">
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
@ -13,10 +13,6 @@ FlowLineTextBrowser::FlowLineTextBrowser(QWidget *parent) : QTextBrowser(parent)
|
||||
m_lineArea = new LineArea(this);
|
||||
m_jl = Q_NULLPTR;
|
||||
|
||||
//this->verticalScrollBar()->setSliderPosition(this->verticalScrollBar()->sliderPosition());
|
||||
|
||||
// connect(this->document(), SIGNAL(blockCountChanged(int)), SLOT(updateLineAreaWidth(int)));
|
||||
connect(this, SIGNAL(updateRequest(QRect,int)), SLOT(updateLineArea(QRect,int)));
|
||||
updateLineAreaWidth();
|
||||
}
|
||||
|
||||
@ -37,7 +33,7 @@ int FlowLineTextBrowser::getFirstVisibleBlock(QTextBlock *firstBlock) const
|
||||
|
||||
if (r1.contains(r2, true) || r1.intersects(r2))
|
||||
{
|
||||
qDebug() << r2;
|
||||
// qDebug() << r2;
|
||||
if (firstBlock)
|
||||
*firstBlock = block;
|
||||
return i;
|
||||
@ -69,7 +65,7 @@ void FlowLineTextBrowser::lineAreaPaintEvent(QPaintEvent *event)
|
||||
QTextBlock block;
|
||||
getFirstVisibleBlock(&block);
|
||||
|
||||
qDebug() << block.text();
|
||||
// qDebug() << block.text();
|
||||
bool foundFirst = false;
|
||||
quint16 linenum;
|
||||
|
||||
@ -116,6 +112,23 @@ void FlowLineTextBrowser::lineAreaPaintEvent(QPaintEvent *event)
|
||||
|
||||
foreach (JumpLine jl, jllist)
|
||||
{
|
||||
if (jl.type == IsBranch || jl.type == IsBRA)
|
||||
{
|
||||
painter.setPen(Qt::yellow);
|
||||
painter.setBrush(Qt::yellow);
|
||||
|
||||
}
|
||||
else if (jl.type == IsJMP)
|
||||
{
|
||||
painter.setPen(Qt::white);
|
||||
painter.setBrush(Qt::white);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
painter.setPen(Qt::red);
|
||||
painter.setBrush(Qt::red);
|
||||
}
|
||||
int offset = getChannelOffset(jl.channel);
|
||||
if (!inBlankLine)
|
||||
{
|
||||
@ -297,3 +310,5 @@ void FlowLineTextBrowser::updateLineArea(const QRect &rect, int dy)
|
||||
if (rect.contains(viewport()->rect()))
|
||||
updateLineAreaWidth();
|
||||
}
|
||||
|
||||
void FlowLineTextBrowser::setLineAreaVisible(bool visible) { m_lineArea->setVisible(visible); }
|
||||
|
@ -39,6 +39,9 @@ private slots:
|
||||
void updateLineAreaWidth();
|
||||
void updateLineArea(const QRect &, int);
|
||||
|
||||
public slots:
|
||||
void setLineAreaVisible(bool visible);
|
||||
|
||||
private:
|
||||
LineArea *m_lineArea;
|
||||
|
||||
|
@ -53,13 +53,29 @@ HiresScreenWidget::HiresScreenWidget(QWidget *parent) :
|
||||
m_showScanLinesAction->setCheckable(true);
|
||||
m_showScanLinesAction->setChecked(m_showScanLines);
|
||||
|
||||
m_prevPageAction = new QAction("Previous Data Page");
|
||||
m_prevPageAction->setEnabled(false);
|
||||
m_prevPageAction->setShortcut(QKeySequence(Qt::Key_Left | Qt::CTRL));
|
||||
|
||||
connect(m_ntscAction, SIGNAL(toggled(bool)), this, SLOT(handleNtscAction(bool)));
|
||||
connect(m_monochromeAction, SIGNAL(toggled(bool)), this, SLOT(handleMonochromeAction(bool)));
|
||||
connect(m_perPixelColorAction, SIGNAL(toggled(bool)), this, SLOT(handlePerPixelColorAction(bool)));
|
||||
m_nextPageAction = new QAction("Next Data Page");
|
||||
m_nextPageAction->setEnabled(false);
|
||||
m_nextPageAction->setShortcut(QKeySequence(Qt::Key_Right | Qt::CTRL));
|
||||
|
||||
connect(m_showScanLinesAction, SIGNAL(toggled(bool)), this, SLOT(handleShowScanLinesAction(bool)));
|
||||
connect(m_ntscAction, &QAction::toggled, this, &HiresScreenWidget::handleNtscAction);
|
||||
connect(m_monochromeAction, &QAction::toggled, this, &HiresScreenWidget::handleMonochromeAction);
|
||||
connect(m_perPixelColorAction, &QAction::toggled, this, &HiresScreenWidget::handlePerPixelColorAction);
|
||||
|
||||
|
||||
connect(m_showScanLinesAction, &QAction::toggled,
|
||||
this, &HiresScreenWidget::handleShowScanLinesAction);
|
||||
|
||||
connect(m_prevPageAction, &QAction::triggered,
|
||||
this, &HiresScreenWidget::handlePrevPageAction);
|
||||
connect(m_nextPageAction, &QAction::triggered,
|
||||
this, &HiresScreenWidget::handleNextPageAction);
|
||||
|
||||
|
||||
m_offset = 0;
|
||||
}
|
||||
|
||||
void HiresScreenWidget::handleNtscAction(bool toggled) {
|
||||
@ -124,6 +140,8 @@ void HiresScreenWidget::drawPixmap()
|
||||
{
|
||||
QPainter pmpainter(&m_pixmap);
|
||||
|
||||
QByteArray workingdata = m_data.mid(m_offset);
|
||||
|
||||
pmpainter.setBrush(Qt::black);
|
||||
pmpainter.setPen(Qt::black);
|
||||
pmpainter.drawRect(0,0,m_pixmap.width(),m_pixmap.height());
|
||||
@ -136,7 +154,7 @@ void HiresScreenWidget::drawPixmap()
|
||||
quint8 chunkCount = 0;
|
||||
|
||||
int idx = 0;
|
||||
while (idx < qMin(m_data.size(),8192)) {
|
||||
while (idx < qMin(workingdata.size(),8192)) {
|
||||
ColRow cr = getColRowFromAppleAddress(idx);
|
||||
|
||||
int yoff = cr.row();
|
||||
@ -148,7 +166,7 @@ void HiresScreenWidget::drawPixmap()
|
||||
for (int jdx = 0; jdx < 40; jdx++)
|
||||
{
|
||||
|
||||
quint8 byte = m_data[idx++];
|
||||
quint8 byte = workingdata[idx++];
|
||||
QBitArray dataBits = byteToBits(byte);
|
||||
|
||||
bool highBit = dataBits.at(0);
|
||||
@ -195,10 +213,10 @@ void HiresScreenWidget::drawPixmap()
|
||||
pmpainter.setPen(Qt::white);
|
||||
pmpainter.setBrush(Qt::white);
|
||||
|
||||
for (int idx = 0; idx < qMin(m_data.size(),8192) ; idx++) {
|
||||
for (int idx = 0; idx < qMin(workingdata.size(),8192) ; idx++) {
|
||||
ColRow cr = getColRowFromAppleAddress(idx);
|
||||
|
||||
quint8 byte = m_data[idx];
|
||||
quint8 byte = workingdata[idx];
|
||||
|
||||
bool highBit = byte & 0x80;
|
||||
|
||||
@ -269,6 +287,42 @@ void HiresScreenWidget::setUnpackedData(QByteArray unpackedData)
|
||||
setData(packedData);
|
||||
}
|
||||
|
||||
void HiresScreenWidget::setOffset(quint16 offset)
|
||||
{
|
||||
m_offset = offset;
|
||||
emit newOffset(m_offset);
|
||||
update();
|
||||
}
|
||||
|
||||
quint16 HiresScreenWidget::offset() const { return m_offset; }
|
||||
|
||||
void HiresScreenWidget::handlePrevPageAction(bool)
|
||||
{
|
||||
if (m_offset >= 8192)
|
||||
{
|
||||
setOffset(m_offset - 8192);
|
||||
m_nextPageAction->setEnabled(true);
|
||||
}
|
||||
|
||||
if (m_offset == 0) { m_prevPageAction->setEnabled(false); }
|
||||
}
|
||||
|
||||
void HiresScreenWidget::handleNextPageAction(bool)
|
||||
{
|
||||
if (m_offset+8192 <= m_data.size())
|
||||
{
|
||||
setOffset(m_offset+8192);
|
||||
m_prevPageAction->setEnabled(true);
|
||||
}
|
||||
|
||||
if (m_offset+8192 > m_data.size())
|
||||
{
|
||||
m_nextPageAction->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
QByteArray HiresScreenWidget::packData(QByteArray unpackedData)
|
||||
{
|
||||
QByteArray packedData;
|
||||
@ -309,6 +363,20 @@ int HiresScreenWidget::getLineAddressOffset(int line)
|
||||
void HiresScreenWidget::setData(QByteArray data) {
|
||||
m_data = data;
|
||||
|
||||
if (data.size() > 8192)
|
||||
{
|
||||
m_nextPageAction->setEnabled(true);
|
||||
m_prevPageAction->setEnabled(false);
|
||||
m_offset = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_nextPageAction->setEnabled(false);
|
||||
m_prevPageAction->setEnabled(false);
|
||||
m_offset = 0;
|
||||
}
|
||||
|
||||
|
||||
repaint();
|
||||
}
|
||||
|
||||
@ -477,6 +545,9 @@ void HiresScreenWidget::contextMenuEvent(QContextMenuEvent *event) {
|
||||
menu.addAction(m_perPixelColorAction);
|
||||
menu.addSeparator();
|
||||
menu.addAction(m_showScanLinesAction);
|
||||
menu.addSeparator();
|
||||
menu.addAction(prevPageAction());
|
||||
menu.addAction(nextPageAction());
|
||||
menu.exec(event->globalPos());
|
||||
}
|
||||
|
||||
|
@ -83,19 +83,23 @@ public:
|
||||
QAction *ntscAction() { return m_ntscAction; }
|
||||
QAction *perPixelColorAction() { return m_perPixelColorAction; }
|
||||
QAction *showScanLinesAction() { return m_showScanLinesAction; }
|
||||
QAction *prevPageAction() { return m_prevPageAction; }
|
||||
QAction *nextPageAction() { return m_nextPageAction; }
|
||||
|
||||
ColRow getColRowFromAppleAddress(quint16 address);
|
||||
ColRow getColRowFromRawAddress(quint16 address);
|
||||
|
||||
QPixmap getPixmap() const { return m_pixmap; }
|
||||
|
||||
quint16 offset() const;
|
||||
signals:
|
||||
void newOffset(quint16 offset);
|
||||
|
||||
public slots:
|
||||
void setData(QByteArray data);
|
||||
void setMode(ViewMode);
|
||||
void setUnpackedData(QByteArray unpackedData);
|
||||
|
||||
void setOffset(quint16 offset);
|
||||
protected:
|
||||
int getLineAddressOffset(int line);
|
||||
QByteArray packData(QByteArray unpackedData);
|
||||
@ -106,6 +110,9 @@ protected slots:
|
||||
void handlePerPixelColorAction(bool toggled);
|
||||
void handleShowScanLinesAction(bool toggled);
|
||||
|
||||
void handlePrevPageAction(bool);
|
||||
void handleNextPageAction(bool);
|
||||
|
||||
private:
|
||||
void makeAddressTables();
|
||||
QColor getColorFromBits(QBitArray bits, quint8 phase);
|
||||
@ -124,12 +131,16 @@ private:
|
||||
QAction *m_ntscAction;
|
||||
QAction *m_perPixelColorAction;
|
||||
QAction *m_showScanLinesAction;
|
||||
QAction *m_prevPageAction;
|
||||
QAction *m_nextPageAction;
|
||||
QActionGroup *formatGroup;
|
||||
|
||||
bool m_showScanLines;
|
||||
|
||||
static QVector<ColRow> m_rawAddressToColRowList;
|
||||
static QVector<ColRow> m_appleAddressToColRowList;
|
||||
|
||||
quint16 m_offset;
|
||||
};
|
||||
|
||||
#endif // HIRESSCREENWIDGET_H
|
||||
|
@ -6,6 +6,7 @@ LocationInfoDialog::LocationInfoDialog(QWidget *parent) :
|
||||
ui(new Ui::LocationInfoDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
showSizeWidgets(false);
|
||||
}
|
||||
|
||||
LocationInfoDialog::~LocationInfoDialog()
|
||||
@ -27,3 +28,14 @@ QString LocationInfoDialog::getInfo()
|
||||
{
|
||||
return ui->infoEdit->text();
|
||||
}
|
||||
|
||||
int LocationInfoDialog::getSymbolSize()
|
||||
{
|
||||
return ui->sizeCombo->currentIndex();
|
||||
}
|
||||
|
||||
void LocationInfoDialog::showSizeWidgets(bool show)
|
||||
{
|
||||
ui->sizeCombo->setHidden(!show);
|
||||
ui->sizeLabel->setHidden(!show);
|
||||
}
|
||||
|
@ -19,6 +19,9 @@ public:
|
||||
void setInfoLabelString(QString label);
|
||||
quint16 getAddress();
|
||||
QString getInfo();
|
||||
int getSymbolSize();
|
||||
|
||||
void showSizeWidgets(bool show);
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -7,11 +7,11 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>284</width>
|
||||
<height>99</height>
|
||||
<height>162</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
<string>Address Metadata Info</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
@ -33,7 +33,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="infoLabel">
|
||||
<property name="text">
|
||||
<string>Note</string>
|
||||
@ -43,9 +43,30 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="infoEdit"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="sizeLabel">
|
||||
<property name="text">
|
||||
<string>Size</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="sizeCombo">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Byte</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Word</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
|
62
src/ui/widgets/asciiinfodialog.h
Normal file
62
src/ui/widgets/asciiinfodialog.h
Normal file
@ -0,0 +1,62 @@
|
||||
#ifndef ASCIIINFODIALOG_H
|
||||
#define ASCIIINFODIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include "asciiinfodialog.h"
|
||||
#include "ui_asciiinfodialog.h"
|
||||
|
||||
namespace Ui {
|
||||
class AsciiInfoDialog;
|
||||
}
|
||||
|
||||
class AsciiInfoDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit AsciiInfoDialog(QWidget *parent = 0) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::AsciiInfoDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
QFont font = ui->tableWidget->itemAt(0,0)->font();
|
||||
font.setBold(true);
|
||||
for (int idx = 0; idx < ui->tableWidget->rowCount(); idx++)
|
||||
{
|
||||
// ui->tableWidget->item(idx,5 )->setFont(font);
|
||||
// ui->tableWidget->item(idx,6 )->setFont(font);
|
||||
// ui->tableWidget->item(idx,7 )->setFont(font);
|
||||
// ui->tableWidget->item(idx,8 )->setFont(font);
|
||||
// ui->tableWidget->item(idx,9 )->setFont(font);
|
||||
}
|
||||
|
||||
|
||||
for (int idx = 0; idx < ui->tableWidget->rowCount(); idx++)
|
||||
{
|
||||
for (int jdx = 0; jdx < ui->tableWidget->columnCount(); jdx++)
|
||||
{
|
||||
ui->tableWidget->item(idx,jdx )->setTextAlignment(Qt::AlignVCenter|Qt::AlignHCenter);
|
||||
|
||||
if (jdx < 5 || jdx > 9)
|
||||
{
|
||||
ui->tableWidget->item(idx,jdx )->setBackgroundColor(QColor(235,235,235));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ui->tableWidget->resizeColumnsToContents();
|
||||
ui->tableWidget->resizeRowsToContents();
|
||||
ui->tableWidget->verticalHeader()->setVisible(false);
|
||||
ui->tableWidget->repaint();
|
||||
}
|
||||
|
||||
~AsciiInfoDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
private:
|
||||
Ui::AsciiInfoDialog *ui;
|
||||
};
|
||||
|
||||
#endif // ASCIIINFODIALOG_H
|
4937
src/ui/widgets/asciiinfodialog.ui
Normal file
4937
src/ui/widgets/asciiinfodialog.ui
Normal file
File diff suppressed because it is too large
Load Diff
@ -13,11 +13,11 @@ HexConverter::HexConverter(QWidget *parent) :
|
||||
ui->uint16LineEdit->setValidator(new QIntValidator(0,65535,this));
|
||||
ui->int16LineEdit->setValidator(new QIntValidator(-32768,32767,this));
|
||||
|
||||
connect(ui->hexLineEdit, SIGNAL(textEdited(QString)), SLOT(calcFromNewHex(QString)));
|
||||
connect(ui->uint8LineEdit, SIGNAL(textEdited(QString)), SLOT(calcFromNewUint8(QString)));
|
||||
connect(ui->int8LineEdit, SIGNAL(textEdited(QString)), SLOT(calcFromNewInt8(QString)));
|
||||
connect(ui->uint16LineEdit, SIGNAL(textEdited(QString)), SLOT(calcFromNewUint16(QString)));
|
||||
connect(ui->int16LineEdit, SIGNAL(textEdited(QString)), SLOT(calcFromNewInt16(QString)));
|
||||
connect(ui->hexLineEdit, &QLineEdit::textEdited, this, &HexConverter::calcFromNewHex);
|
||||
connect(ui->uint8LineEdit, &QLineEdit::textEdited, this, &HexConverter::calcFromNewUint8);
|
||||
connect(ui->int8LineEdit, &QLineEdit::textEdited, this, &HexConverter::calcFromNewInt8);
|
||||
connect(ui->uint16LineEdit, &QLineEdit::textEdited, this, &HexConverter::calcFromNewUint16);
|
||||
connect(ui->int16LineEdit, &QLineEdit::textEdited, this, &HexConverter::calcFromNewInt16);
|
||||
}
|
||||
|
||||
HexConverter::~HexConverter()
|
||||
|
Loading…
Reference in New Issue
Block a user