Added status bar to DiskExplorer

This commit is contained in:
Mark Long 2016-10-30 16:08:50 -05:00
parent 048ab309c7
commit f5be4abd7c
6 changed files with 148 additions and 26 deletions

View File

@ -17,7 +17,7 @@ CatalogWidget::CatalogWidget(QWidget *parent) :
ui->catalog_list->setFont(QFont("monospace")); ui->catalog_list->setFont(QFont("monospace"));
connect(ui->catalog_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), connect(ui->catalog_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
SLOT(itemClicked(QListWidgetItem*))); SLOT(itemDoubleClicked(QListWidgetItem*)));
} }
CatalogWidget::~CatalogWidget() CatalogWidget::~CatalogWidget()
@ -107,10 +107,18 @@ void CatalogWidget::unloadDisk(DiskFile *disk)
ui->volume_label->clear(); ui->volume_label->clear();
} }
void CatalogWidget::itemClicked(QListWidgetItem *item) void CatalogWidget::itemDoubleClicked(QListWidgetItem *item)
{ {
int idx = item->data(0x0100).toInt(); int idx = item->data(0x0100).toInt();
FileDescriptiveEntry fde = m_disk->getAllFDEs()[idx]; FileDescriptiveEntry fde = m_disk->getAllFDEs()[idx];
// qDebug() << "Default File " << AppleString(fde.filename).printable().trimmed(); // qDebug() << "Default File " << AppleString(fde.filename).printable().trimmed();
emit openWithDefaultViewer(m_disk,fde); emit openWithDefaultViewer(m_disk,fde);
} }
void CatalogWidget::itemClicked(QListWidgetItem *item)
{
int idx = item->data(0x0100).toInt();
FileDescriptiveEntry fde = m_disk->getAllFDEs()[idx];
// qDebug() << "Default File " << AppleString(fde.filename).printable().trimmed();
emit newFileSelected(m_disk,fde);
}

View File

@ -25,7 +25,7 @@ public slots:
void unloadDisk(DiskFile *disk); void unloadDisk(DiskFile *disk);
signals: signals:
void newFileSelected(FileDescriptiveEntry *entry); void newFileSelected(DiskFile *disk, FileDescriptiveEntry entry);
void openWithDefaultViewer(DiskFile *disk, FileDescriptiveEntry fde); void openWithDefaultViewer(DiskFile *disk, FileDescriptiveEntry fde);
protected: protected:
@ -33,6 +33,7 @@ protected:
private slots: private slots:
void itemClicked(QListWidgetItem *item); void itemClicked(QListWidgetItem *item);
void itemDoubleClicked(QListWidgetItem *item);
private: private:

View File

@ -7,6 +7,7 @@
#include <QFileDialog> #include <QFileDialog>
#include <QShowEvent> #include <QShowEvent>
#include <QDebug> #include <QDebug>
#include <QStatusBar>
#include "genericfile.h" #include "genericfile.h"
#include "viewerbase.h" #include "viewerbase.h"
@ -27,6 +28,8 @@ DiskExplorer::~DiskExplorer()
void DiskExplorer::initUi() void DiskExplorer::initUi()
{ {
QMenuBar *menuBar = new QMenuBar(this); QMenuBar *menuBar = new QMenuBar(this);
setMenuBar(menuBar); setMenuBar(menuBar);
QMenu *menu = new QMenu(tr("&File"),this); QMenu *menu = new QMenu(tr("&File"),this);
@ -41,8 +44,6 @@ void DiskExplorer::initUi()
menu->addAction(m_action_Unload_Disk_Image); menu->addAction(m_action_Unload_Disk_Image);
connect(m_action_Unload_Disk_Image, SIGNAL(triggered()), SLOT(unloadDiskFile())); connect(m_action_Unload_Disk_Image, SIGNAL(triggered()), SLOT(unloadDiskFile()));
menu->addSeparator(); menu->addSeparator();
QAction *action_Quit = new QAction(tr("&Quit"),this); QAction *action_Quit = new QAction(tr("&Quit"),this);
@ -78,13 +79,11 @@ void DiskExplorer::initUi()
m_hexConverter = new HexConverter(this); m_hexConverter = new HexConverter(this);
connect(action_Hex_Converter, SIGNAL(triggered()), m_hexConverter, SLOT(show())); connect(action_Hex_Converter, SIGNAL(triggered()), m_hexConverter, SLOT(show()));
QWidget *widget = new QWidget(0); QWidget *widget = new QWidget(0);
m_gridLayout = new QGridLayout(); m_gridLayout = new QGridLayout();
m_gridLayout->setVerticalSpacing(4); m_gridLayout->setVerticalSpacing(4);
m_gridLayout->setHorizontalSpacing(4); m_gridLayout->setHorizontalSpacing(4);
widget->setLayout(m_gridLayout); widget->setLayout(m_gridLayout);
//m_gridLayout->setSizeConstraint(QLayout::SetFixedSize);
m_cw = new CatalogWidget(widget); m_cw = new CatalogWidget(widget);
m_demw = new DiskExplorerMapWidget(35,16,widget); m_demw = new DiskExplorerMapWidget(35,16,widget);
m_frame = new QFrame(widget); m_frame = new QFrame(widget);
@ -112,6 +111,14 @@ void DiskExplorer::initUi()
connect(m_demw, SIGNAL(showSectorData(QByteArray,int,int,QVariant)), connect(m_demw, SIGNAL(showSectorData(QByteArray,int,int,QVariant)),
SLOT(handleShowSectorData(QByteArray,int,int,QVariant))); SLOT(handleShowSectorData(QByteArray,int,int,QVariant)));
QStatusBar *statusBar = new QStatusBar(this);
setStatusBar(statusBar);
m_demwStatusWidget = m_demw->getStatusWidget();
statusBar->addPermanentWidget(m_demwStatusWidget);
setDiskToolsVisible(false); setDiskToolsVisible(false);
} }
@ -145,7 +152,6 @@ void DiskExplorer::loadDiskFile(QString filename)
delete m_disk; delete m_disk;
m_disk = 0; m_disk = 0;
} }
} }
void DiskExplorer::handleShowSectorData(QByteArray data, int track, int sector, QVariant metadata) void DiskExplorer::handleShowSectorData(QByteArray data, int track, int sector, QVariant metadata)
@ -197,6 +203,8 @@ void DiskExplorer::setDiskToolsVisible(bool visible)
m_gridLayout->setColumnStretch(2,0); m_gridLayout->setColumnStretch(2,0);
} }
if (m_demwStatusWidget) { m_demwStatusWidget->setVisible(visible); }
m_demw->setVisible(visible); m_demw->setVisible(visible);
m_frame->setVisible(visible); m_frame->setVisible(visible);
m_hdv->setVisible(visible); m_hdv->setVisible(visible);
@ -210,6 +218,7 @@ void DiskExplorer::setDiskToolsVisible(bool visible)
void DiskExplorer::handleViewerClosing(ViewerBase *viewer) void DiskExplorer::handleViewerClosing(ViewerBase *viewer)
{ {
qDebug() << "Removing viewer " << viewer;
m_viewerList.removeAll(viewer); m_viewerList.removeAll(viewer);
} }
@ -224,6 +233,7 @@ void DiskExplorer::showEvent(QShowEvent *event)
if (m_horizSizePref == -1) if (m_horizSizePref == -1)
{ {
m_horizSizePref = this->width(); m_horizSizePref = this->width();
qDebug() << "New Horiz Size Pref = " << m_horizSizePref;
} }
} }

View File

@ -59,6 +59,8 @@ private:
QWidget *m_key; QWidget *m_key;
QGridLayout *m_gridLayout; QGridLayout *m_gridLayout;
QWidget *m_demwStatusWidget;
DiskFile *m_disk; DiskFile *m_disk;
HRCGControlsInfo *m_hrcgDialog; HRCGControlsInfo *m_hrcgDialog;

View File

@ -8,11 +8,16 @@
#include <QGridLayout> #include <QGridLayout>
#include <QButtonGroup> #include <QButtonGroup>
#include <QDebug> #include <QDebug>
#include <QHBoxLayout>
DiskExplorerMapWidget::DiskExplorerMapWidget(int numtracks, int numsectors, QWidget *parent) : QWidget(parent) DiskExplorerMapWidget::DiskExplorerMapWidget(int numtracks, int numsectors, QWidget *parent) : QWidget(parent)
{ {
m_numtracks = numtracks; m_numtracks = numtracks;
m_numsectors = numsectors; m_numsectors = numsectors;
m_diskLabel = Q_NULLPTR;
m_statusWidget = Q_NULLPTR;
m_deferredSetup = false;
setWindowTitle("Disk Explorer"); setWindowTitle("Disk Explorer");
@ -59,6 +64,52 @@ DiskExplorerMapWidget::DiskExplorerMapWidget(int numtracks, int numsectors, QWid
layout->addWidget(tb,sec+2,track+1); layout->addWidget(tb,sec+2,track+1);
} }
} }
makeStatusWidget();
}
void DiskExplorerMapWidget::makeStatusWidget()
{
QWidget *statusWidget = new QWidget(this);
QHBoxLayout *hbl = new QHBoxLayout(this);
statusWidget->setLayout(hbl);
m_trackSectorLabel = new QLabel(this);
m_trackSectorLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
m_trackSectorLabel->setText("No Track/Sector selected");
hbl->insertWidget(0,m_trackSectorLabel,0,Qt::AlignLeft | Qt::AlignVCenter);
m_diskLabel = new QLabel(this);
m_diskLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
m_diskLabel->setText("[No Disk]");
hbl->insertWidget(1,m_diskLabel,0,Qt::AlignLeft | Qt::AlignVCenter);
m_statusWidget = statusWidget;
}
QString DiskExplorerMapWidget::getSectorDescription(int track, int sector)
{
if (track == 0) {
return "Boot Sector";
}
else if (track <= 2)
{
return "DOS Image";
}
else if (track == 17 && sector == 0)
{
return "VTOC";
}
else
{
QString desc = "xxx";
if (m_sectorDescriptions.contains(DETSPair(track,sector)))
{
desc = m_sectorDescriptions[DETSPair(track,sector)];
}
return desc.simplified();
}
} }
void DiskExplorerMapWidget::handleButtonCheck(int track, int sector, bool checked) void DiskExplorerMapWidget::handleButtonCheck(int track, int sector, bool checked)
@ -68,7 +119,7 @@ void DiskExplorerMapWidget::handleButtonCheck(int track, int sector, bool checke
if (m_currentChecked) if (m_currentChecked)
{ {
// Do anything needed to clean up after previous button click // Do anything needed to clean up after previous button click
// m_currentClicked->setHighlighted(false); // m_currentClicked->setHighlighted(false);
} }
if (checked) if (checked)
@ -76,9 +127,15 @@ void DiskExplorerMapWidget::handleButtonCheck(int track, int sector, bool checke
Sector sec = m_disk->getSector(track,sector); Sector sec = m_disk->getSector(track,sector);
QByteArray data = sec.rawData(); QByteArray data = sec.rawData();
emit showSectorData(data,track,sector,QVariant()); emit showSectorData(data,track,sector,QVariant());
m_trackSectorLabel->setText(
QString("Track: %1 Sector: %2 (%3)")
.arg(track)
.arg(sector)
.arg(getSectorDescription(track,sector)));
} }
else{ else{
emit showSectorData(QByteArray(),-1,-1,QVariant()); emit showSectorData(QByteArray(),-1,-1,QVariant());
m_trackSectorLabel->setText("No Track/Sector selected");
} }
m_currentChecked = currbutton; m_currentChecked = currbutton;
@ -93,9 +150,23 @@ void DiskExplorerMapWidget::setDisk(DiskFile *disk)
{ {
if (disk) if (disk)
{ {
m_sectorDescriptions.clear();
m_disk = disk; m_disk = disk;
setWindowTitle(QString("Disk Explorer - %1").arg(m_disk->getDiskImageName())); setWindowTitle(QString("Disk Explorer - %1").arg(m_disk->getDiskImageName()));
mapDiskToButtons(); m_diskLabel->setText(disk->getDiskImageName());
if (!isHidden())
{
if (m_disk)
{
mapDiskToButtons();
}
}
else
{
m_deferredSetup = true;
}
} }
} }
@ -103,6 +174,7 @@ void DiskExplorerMapWidget::unloadDisk()
{ {
if (m_disk) if (m_disk)
{ {
m_sectorDescriptions.clear();
m_bgroup->setExclusive(false); m_bgroup->setExclusive(false);
for (int track = 0; track < m_numtracks; track++) for (int track = 0; track < m_numtracks; track++)
{ {
@ -218,9 +290,14 @@ void DiskExplorerMapWidget::mapDiskToButtons()
buttonAt(17,0)->setBgColor(m_vtocColor); buttonAt(17,0)->setBgColor(m_vtocColor);
buttonAt(17,0)->setText(QString("%1").arg(idx++)); buttonAt(17,0)->setText(QString("%1").arg(idx++));
int catseccount = 0;
foreach (CatalogSector cs, m_disk->getCatalogSectors()) foreach (CatalogSector cs, m_disk->getCatalogSectors())
{ {
Sector *sec = cs.getSector(); Sector *sec = cs.getSector();
QString desc = QString("Catalog Sector #%1").arg(++catseccount);
m_sectorDescriptions.insert(DETSPair(sec->track(),sec->sector()),desc);
buttonAt(sec->track(),sec->sector())->setBgColor(m_dirEntryColor); buttonAt(sec->track(),sec->sector())->setBgColor(m_dirEntryColor);
buttonAt(sec->track(),sec->sector())->setText(QString("%1").arg(idx++)); buttonAt(sec->track(),sec->sector())->setText(QString("%1").arg(idx++));
@ -232,18 +309,31 @@ void DiskExplorerMapWidget::mapDiskToButtons()
int tsltr = fde.firstTSListSector.track; int tsltr = fde.firstTSListSector.track;
int tslse = fde.firstTSListSector.sector; int tslse = fde.firstTSListSector.sector;
int tslcount = 0;
while (tsltr != 0) while (tsltr != 0)
{ {
tslcount++;
buttonAt(tsltr,tslse)->setBgColor(m_tsListColor); buttonAt(tsltr,tslse)->setBgColor(m_tsListColor);
buttonAt(tsltr,tslse)->setText(QString("%1").arg(idx)); 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);
idx++; idx++;
int sectorcount = 0;
foreach(TSPair tsp, tsl.getDataTSPairs()) foreach(TSPair tsp, tsl.getDataTSPairs())
{ {
int se = tsp.sector; int se = tsp.sector;
int tr = tsp.track; int tr = tsp.track;
QString description = QString("Sector #%1.%2 of %3")
.arg(tslcount)
.arg(++sectorcount)
.arg(fde.filename.printable());
m_sectorDescriptions.insert(DETSPair(tr,se),description);
QColor color; QColor color;
if (fde.fileType() == "I") color = m_intBasicFileColor; if (fde.fileType() == "I") color = m_intBasicFileColor;
else if (fde.fileType() == "A") color = m_applesoftFileColor; else if (fde.fileType() == "A") color = m_applesoftFileColor;
@ -270,3 +360,14 @@ void DiskExplorerMapWidget::mapDiskToButtons()
} }
void DiskExplorerMapWidget::showEvent(QShowEvent *)
{
if (m_deferredSetup)
{
if (m_disk)
{
mapDiskToButtons();
}
m_deferredSetup = false;
}
}

View File

@ -72,18 +72,6 @@ private:
" QPushButton:checked { font: bold italic 11px; } " " QPushButton:checked { font: bold italic 11px; } "
) .arg(m_fgColor) ) .arg(m_fgColor)
.arg(m_backgroundColor); .arg(m_backgroundColor);
// return QString(
// "background-color: %1;"
// "font: %2; "
// "border-radius: 0px; "
// "color: %3;"
// ).arg(m_isHighlighted?m_hlColor:m_backgroundColor)
// .arg(m_isHighlighted?"bold italic 11px":"10px")
// .arg(m_fgColor)
// ;
} }
int m_track; int m_track;
@ -97,7 +85,7 @@ private:
typedef QPair<int,int> DETSPair;
class DiskExplorerMapWidget : public QWidget class DiskExplorerMapWidget : public QWidget
{ {
@ -112,11 +100,12 @@ public:
} }
void setDisk(DiskFile *disk); void setDisk(DiskFile *disk);
void unloadDisk();
void setAllButtonsEnabled(bool enabled);
QGroupBox *makeKeyWidget(); QGroupBox *makeKeyWidget();
QWidget *getStatusWidget() const { return m_statusWidget; }
void unloadDisk();
void setAllButtonsEnabled(bool enabled);
signals: signals:
void showSectorData(QByteArray data, int track, int sector, QVariant metadata); void showSectorData(QByteArray data, int track, int sector, QVariant metadata);
@ -140,6 +129,10 @@ protected:
} }
QLabel *makeKeyLabel(QWidget *parent, QString name, QColor color); QLabel *makeKeyLabel(QWidget *parent, QString name, QColor color);
void showEvent(QShowEvent *);
void makeStatusWidget();
QString getSectorDescription(int track, int sector);
private: private:
QMap<int, QMap<int,DEButton*> > m_buttons; QMap<int, QMap<int,DEButton*> > m_buttons;
@ -166,6 +159,13 @@ private:
QButtonGroup *m_bgroup; QButtonGroup *m_bgroup;
DiskFile *m_disk; DiskFile *m_disk;
bool m_deferredSetup;
QLabel *m_diskLabel;
QLabel *m_trackSectorLabel;
QWidget *m_statusWidget;
QMap< DETSPair, QString> m_sectorDescriptions;
}; };
#endif // DISKEXPLORERMAPWIDGET_H #endif // DISKEXPLORERMAPWIDGET_H