diff --git a/AppleSAWS.pro b/AppleSAWS.pro
index d6ddde5..9b14b41 100644
--- a/AppleSAWS.pro
+++ b/AppleSAWS.pro
@@ -38,13 +38,16 @@ DEFINES += WS_VIDEO
SOURCES += \
src/intbasic/IntBasicFile.cxx \
src/main.cpp \
- src/diskfiles/dos33/diskfile.cxx \
+ src/diskfiles/dos33/dos33diskimage.cxx \
src/diskfiles/dos33/sector.cxx \
src/diskfiles/dos33/vtoc.cxx \
src/diskfiles/dos33/catalogsector.cxx \
src/diskfiles/dos33/tracksectorlist.cxx \
src/diskfiles/dos33/filedescriptiveentry.cxx \
src/diskfiles/dos33/genericfile.cxx \
+ src/diskfiles/dos33/tspair.cpp \
+ src/diskfiles/dos33/dos33imagemodel.cpp \
+ src/diskfiles/dos33/dos33treeitem.cpp \
src/memory/attributedmemory.cpp \
src/memory/memorycell.cpp \
src/memory/memrole.cpp \
@@ -102,13 +105,16 @@ SOURCES += \
HEADERS += \
- src/diskfiles/dos33/diskfile.h \
+ src/diskfiles/dos33/dos33diskimage.h \
src/diskfiles/dos33/sector.h \
src/diskfiles/dos33/vtoc.h \
src/diskfiles/dos33/catalogsector.h \
src/diskfiles/dos33/tracksectorlist.h \
src/diskfiles/dos33/filedescriptiveentry.h \
src/diskfiles/dos33/genericfile.h \
+ src/diskfiles/dos33/tspair.h \
+ src/diskfiles/dos33/dos33imagemodel.h\
+ src/diskfiles/dos33/dos33treeitem.h\
src/intbasic/IntBasicFile.h \
src/memory/attributedmemory.h \
src/memory/memorycell.h \
@@ -192,4 +198,5 @@ FORMS += \
src/ui/widgets/notesdialog.ui
RESOURCES += \
- src/resource/resources.qrc
+ src/resource/resources.qrc \
+ src/qdarkstyle/style.qrc
diff --git a/src/main.cpp b/src/main.cpp
index c898a97..34038c9 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -6,7 +6,7 @@
#include "binaryfile.h"
#include "genericfile.h"
-#include "diskfile.h"
+#include "dos33diskimage.h"
#include "catalogsector.h"
#include "applesoftfile.h"
#include "startupdialog.h"
diff --git a/src/resource/notes.txt b/src/resource/notes.txt
index f85b6ea..5a70c99 100644
--- a/src/resource/notes.txt
+++ b/src/resource/notes.txt
@@ -48,6 +48,13 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
***
+I have included a nice dark stylesheet based off of Colin Duquesnoy's QDarkStyleSheet
+from https://github.com/ColinDuquesnoy/QDarkStyleSheet
+
+Its licensing information can be found at https://github.com/ColinDuquesnoy/QDarkStyleSheet/blob/master/LICENSE.rst
+
+***
+
And, of course, this program is released under the MIT License:
diff --git a/src/resource/resources.qrc b/src/resource/resources.qrc
index 0addbf5..ba5b81e 100644
--- a/src/resource/resources.qrc
+++ b/src/resource/resources.qrc
@@ -10,4 +10,15 @@
redblob.png
+
+ I_RED.png
+ A_GREY.png
+ A_YELLOW.png
+ B_GREEN.png
+ B_GREY.png
+ R_MAGENTA.png
+ S_ORANGE.png
+ T_CYAN.png
+ disk.png
+
diff --git a/src/sequence/sequenceoutputview.cpp b/src/sequence/sequenceoutputview.cpp
index 359113b..4e3d525 100644
--- a/src/sequence/sequenceoutputview.cpp
+++ b/src/sequence/sequenceoutputview.cpp
@@ -22,7 +22,7 @@ SequenceOutputView::SequenceOutputView(QWidget *parent) : QPlainTextEdit(parent)
void SequenceOutputView::lineNumberAreaPaintEvent(QPaintEvent *event)
{
QPainter painter(lineNumberArea);
- painter.fillRect(event->rect(), Qt::lightGray);
+
QTextBlock block = firstVisibleBlock();
int blockNumber = block.blockNumber();
int top = qRound(blockBoundingGeometry(block).translated(contentOffset()).top());
@@ -30,9 +30,9 @@ void SequenceOutputView::lineNumberAreaPaintEvent(QPaintEvent *event)
while (block.isValid() && top <= event->rect().bottom()) {
if (block.isVisible() && bottom >= event->rect().top()) {
QString number = QString::number(blockNumber + 1);
- painter.setPen(Qt::black);
- painter.drawText(0, top, lineNumberArea->width()-10, fontMetrics().height(),
- Qt::AlignRight, number);
+ painter.drawText(0, top, lineNumberArea->width()-10,
+ fontMetrics().height(),
+ Qt::AlignRight | Qt::AlignHCenter, number);
}
block = block.next();
diff --git a/src/sequence/sequenceoutputview.h b/src/sequence/sequenceoutputview.h
index d92d901..2df4dfd 100644
--- a/src/sequence/sequenceoutputview.h
+++ b/src/sequence/sequenceoutputview.h
@@ -6,6 +6,7 @@
#include
#include
#include
+#include
class SOVNumberPanel;
@@ -38,12 +39,16 @@ class SOVNumberPanel : public QWidget
{
Q_OBJECT
public:
- explicit SOVNumberPanel(SequenceOutputView *sov) : QWidget(sov), m_sov(sov) { }
+ explicit SOVNumberPanel(SequenceOutputView *sov) : QWidget(sov), m_sov(sov) {
+ setAttribute(Qt::WA_StyledBackground, true);
+
+ }
QSize sizeHint() const override { return QSize(m_sov->lineNumberAreaWidth(), 0); }
protected:
void paintEvent(QPaintEvent *event) override {
- m_sov->lineNumberAreaPaintEvent(event);}
+ m_sov->lineNumberAreaPaintEvent(event);
+ }
SequenceOutputView *m_sov;
};
diff --git a/src/sequence/sequencetool.h b/src/sequence/sequencetool.h
index 9db12a8..5a82503 100644
--- a/src/sequence/sequencetool.h
+++ b/src/sequence/sequencetool.h
@@ -21,6 +21,7 @@ public:
protected:
void mousePressEvent(QMouseEvent *event);
+
protected:
SequenceEvent *m_seqevent;
QString m_category;
diff --git a/src/sequence/sequenceviewer.cpp b/src/sequence/sequenceviewer.cpp
index 4b82354..003426e 100644
--- a/src/sequence/sequenceviewer.cpp
+++ b/src/sequence/sequenceviewer.cpp
@@ -6,6 +6,14 @@ SequenceViewer::SequenceViewer(QWidget *parent) :
ui(new Ui::SequenceViewer)
{
ui->setupUi(this);
+ ui->vsplitter->setStretchFactor(0,1);
+ ui->vsplitter->setStretchFactor(1,1);
+ ui->vsplitter->setSizes(QList({4000, 4000}));
+
+ ui->hsplitter->setStretchFactor(0,5);
+ ui->hsplitter->setStretchFactor(1,1);
+ ui->hsplitter->setSizes(QList({40000, 10000}));
+
}
diff --git a/src/sequence/sequenceviewer.ui b/src/sequence/sequenceviewer.ui
index 7ea428b..941954e 100644
--- a/src/sequence/sequenceviewer.ui
+++ b/src/sequence/sequenceviewer.ui
@@ -27,16 +27,12 @@
0
-
-
+
Qt::Horizontal
-
-
- background:black
-
-
-
+
+
50
@@ -53,9 +49,6 @@
50
-
- background:lightgrey
-
@@ -64,9 +57,6 @@
50
-
- background:lightgray
-
diff --git a/src/ui/catalogwidget.cxx b/src/ui/catalogwidget.cxx
index 561de3a..3e99c8d 100644
--- a/src/ui/catalogwidget.cxx
+++ b/src/ui/catalogwidget.cxx
@@ -32,7 +32,7 @@ CatalogWidget::~CatalogWidget()
delete ui;
}
-void CatalogWidget::prepForNewDisk(QString filename, DiskFile *disk)
+void CatalogWidget::prepForNewDisk(QString filename, Dos33DiskImage *disk)
{
m_disk = disk;
m_diskname = filename;
@@ -75,7 +75,7 @@ QString CatalogWidget::createToolTip(FileDescriptiveEntry &fde) {
return retval;
}
-void CatalogWidget::processNewlyLoadedDisk(QString diskfilename, DiskFile *disk)
+void CatalogWidget::processNewlyLoadedDisk(QString diskfilename, Dos33DiskImage *disk)
{
// qDebug() << "### Start processNewlyLoadedDisk";
if (m_disk == disk) {
@@ -134,7 +134,7 @@ void CatalogWidget::processNewlyLoadedDisk(QString diskfilename, DiskFile *disk)
// qDebug() << "### End processNewlyLoadedDisk";
}
-void CatalogWidget::unloadDisk(DiskFile *disk)
+void CatalogWidget::unloadDisk(Dos33DiskImage *disk)
{
if (m_disk == disk) {
m_disk = 0;
diff --git a/src/ui/catalogwidget.h b/src/ui/catalogwidget.h
index ec003ad..62c1a09 100644
--- a/src/ui/catalogwidget.h
+++ b/src/ui/catalogwidget.h
@@ -4,7 +4,7 @@
#include
#include
-#include "diskfile.h"
+#include "dos33diskimage.h"
namespace Ui {
class CatalogWidget;
@@ -20,13 +20,13 @@ public:
~CatalogWidget();
public slots:
- void prepForNewDisk(QString filename, DiskFile *disk);
- void processNewlyLoadedDisk(QString filename, DiskFile *disk);
- void unloadDisk(DiskFile *disk);
+ void prepForNewDisk(QString filename, Dos33DiskImage *disk);
+ void processNewlyLoadedDisk(QString filename, Dos33DiskImage *disk);
+ void unloadDisk(Dos33DiskImage *disk);
signals:
- void newFileSelected(DiskFile *disk, FileDescriptiveEntry entry);
- void openWithDefaultViewer(DiskFile *disk, FileDescriptiveEntry fde);
+ void newFileSelected(Dos33DiskImage *disk, FileDescriptiveEntry entry);
+ void openWithDefaultViewer(Dos33DiskImage *disk, FileDescriptiveEntry fde);
protected:
QString createToolTip(FileDescriptiveEntry &fde);
@@ -39,7 +39,7 @@ private:
Ui::CatalogWidget *ui;
- DiskFile *m_disk;
+ Dos33DiskImage *m_disk;
QString m_diskname;
};
diff --git a/src/ui/central/centralappwindow.cpp b/src/ui/central/centralappwindow.cpp
index ba3f198..b6a0ea2 100644
--- a/src/ui/central/centralappwindow.cpp
+++ b/src/ui/central/centralappwindow.cpp
@@ -1,6 +1,12 @@
#include "centralappwindow.h"
#include "sequenceviewer.h"
+#include "dos33diskimage.h"
+#include "dos33imagemodel.h"
+
+#include "sequencetoolbox.h"
+
+#include
#include
#include
#include
@@ -8,9 +14,23 @@
#include
#include
#include
+#include
+
+#include
CentralAppWindow::CentralAppWindow(QWidget *parent) : QMainWindow(parent)
{
+ QFile f(":qdarkstyle/style.qss");
+
+ if (!f.exists()) {
+ printf("Unable to set stylesheet, file not found\n");
+ }
+ else {
+ f.open(QFile::ReadOnly | QFile::Text);
+ QTextStream ts(&f);
+ this->setStyleSheet(ts.readAll());
+ }
+
createActions();
initMenuBar();
initToolBars();
@@ -36,7 +56,8 @@ void CentralAppWindow::initMenuBar()
void CentralAppWindow::initStatusBar()
{
-
+ m_status_bar = new QStatusBar(this);
+ setStatusBar(m_status_bar);
}
void CentralAppWindow::initToolBars()
@@ -53,22 +74,53 @@ void CentralAppWindow::initToolBars()
void CentralAppWindow::initDockWidgets()
{
QDockWidget *container = new QDockWidget(this);
- container->setLayout(new QGridLayout());
+ // container->setLayout(new QGridLayout());
container->setMinimumWidth(200);
container->setFeatures(QDockWidget::DockWidgetMovable);
+
m_project_area = new QWidget(container);
- m_project_area->setMinimumSize(200,200);
- m_project_area->setStyleSheet("background:black");
- m_directory_area = new QWidget(container);
- m_directory_area->setMinimumSize(200,200);
- m_directory_area->setStyleSheet("background:black");
+ m_project_area->setMinimumSize(300,200);
+
+ m_directory_area = new QTreeView(container);
+ m_directory_area->setFont(QFont("Pr Number 3", 12));
+ m_directory_area->setMinimumSize(300,200);
+
QSplitter *split = new QSplitter(container);
+ container->setWidget(split);
split->setOrientation(Qt::Vertical);
split->addWidget(m_directory_area);
split->addWidget(m_project_area);
- container->setWidget(split);
+ split->setStretchFactor(0,1);
+ split->setStretchFactor(1,1);
+ split->setSizes(QList({4000, 4000}));
+
+
+ Dos33DiskImage *img = new Dos33DiskImage("c:/develop/git/AppleSAWS/disk-images/ApplesoftToolkit.dsk");
+
+ auto model = new Dos33ImageModel();
+ model->addDiskImage(img,"ApplesoftToolkit.dsk");
+
+ img = new Dos33DiskImage("c:/develop/git/AppleSAWS/disk-images/dos.3.3.system.master.dsk");
+ model->addDiskImage(img);
+
+ img = new Dos33DiskImage("c:/develop/git/AppleSAWS/disk-images/Print Shop Companion - Side 1.dsk");
+ model->addDiskImage(img);
+ m_directory_area->setModel(model);
addDockWidget(Qt::LeftDockWidgetArea,container);
+
+ QDockWidget *stb = new QDockWidget(this);
+ stb->setMinimumWidth(200);
+ stb->setFeatures(QDockWidget::DockWidgetMovable);
+ stb->setLayout(new QGridLayout());
+
+ m_toolbox = new SequenceToolBox(this);
+
+
+
+ addDockWidget(Qt::RightDockWidgetArea,stb);
+
+
}
diff --git a/src/ui/central/centralappwindow.h b/src/ui/central/centralappwindow.h
index 611354b..0a63808 100644
--- a/src/ui/central/centralappwindow.h
+++ b/src/ui/central/centralappwindow.h
@@ -4,12 +4,15 @@
#include
#include "mainapptoolbar.h"
-
+class QTreeView;
class QAction;
+class QStatusBar;
+class SequenceToolBox;
class CentralAppWindow : public QMainWindow
{
Q_OBJECT
+
public:
explicit CentralAppWindow(QWidget *parent = nullptr);
@@ -24,9 +27,11 @@ private:
QAction *m_quitAction;
MainAppToolbar *m_mainToolBar;
- QWidget *m_directory_area;
+ QTreeView *m_directory_area;
QWidget *m_project_area;
+ QStatusBar *m_status_bar;
+ SequenceToolBox *m_toolbox;
};
#endif // CENTRALAPPWINDOW_H
diff --git a/src/ui/central/mainapptoolbar.cpp b/src/ui/central/mainapptoolbar.cpp
index 48a613e..ff77595 100644
--- a/src/ui/central/mainapptoolbar.cpp
+++ b/src/ui/central/mainapptoolbar.cpp
@@ -2,7 +2,7 @@
MainAppToolbar::MainAppToolbar(QWidget *parent) : QToolBar(parent)
{
- setStyleSheet("background: #4f4f4f; color: #ffffff; font-size: 12pt");
+ // setStyleSheet("background: #4f4f4f; color: #ffffff; font-size: 12pt");
setMovable(false);
setFloatable(false);
}
diff --git a/src/ui/diskexplorer/DiskExplorer.cpp b/src/ui/diskexplorer/DiskExplorer.cpp
index 059e3a1..c5b3009 100644
--- a/src/ui/diskexplorer/DiskExplorer.cpp
+++ b/src/ui/diskexplorer/DiskExplorer.cpp
@@ -158,7 +158,7 @@ void DiskExplorer::loadDiskFile(QString filename)
unloadDiskFile();
}
- m_disk = new DiskFile();
+ m_disk = new Dos33DiskImage();
m_cw->prepForNewDisk(filename,m_disk);
if (m_disk->read(filename)) {
if (m_action_Unload_Disk_Image) { m_action_Unload_Disk_Image->setEnabled(true); }
@@ -195,7 +195,7 @@ void DiskExplorer::showLoadDialog(bool parentToThis)
}
}
-void DiskExplorer::handleDiskItemSelectedDefaultOpen(DiskFile *disk, FileDescriptiveEntry fde)
+void DiskExplorer::handleDiskItemSelectedDefaultOpen(Dos33DiskImage *disk, FileDescriptiveEntry fde)
{
if (fde.deleted) { return; }
diff --git a/src/ui/diskexplorer/DiskExplorer.h b/src/ui/diskexplorer/DiskExplorer.h
index a238a64..05efdf6 100644
--- a/src/ui/diskexplorer/DiskExplorer.h
+++ b/src/ui/diskexplorer/DiskExplorer.h
@@ -5,7 +5,7 @@
#include "catalogwidget.h"
#include "DiskExplorerMapWidget.h"
-#include "diskfile.h"
+#include "dos33diskimage.h"
#include "hrcgcontrolsinfo.h"
#include "hexconverter.h"
#include "hexdumpviewer.h"
@@ -25,10 +25,10 @@ public:
virtual ~DiskExplorer();
signals:
- void diskFileLoading(QString filename, DiskFile *file);
- void diskFileLoaded(QString filename, DiskFile *file);
- void diskFileLoadFailed(QString filename, DiskFile *file);
- void diskFileUnloading(DiskFile *file);
+ void diskFileLoading(QString filename, Dos33DiskImage *file);
+ void diskFileLoaded(QString filename, Dos33DiskImage *file);
+ void diskFileLoadFailed(QString filename, Dos33DiskImage *file);
+ void diskFileUnloading(Dos33DiskImage *file);
void diskFileUnloaded();
public slots:
@@ -38,7 +38,7 @@ public slots:
private slots:
void handleShowSectorData(QByteArray data, int track, int sector, QVariant metadata);
- void handleDiskItemSelectedDefaultOpen(DiskFile *disk, FileDescriptiveEntry fde);
+ void handleDiskItemSelectedDefaultOpen(Dos33DiskImage *disk, FileDescriptiveEntry fde);
void setDiskToolsVisible(bool visible);
@@ -64,7 +64,7 @@ private:
QWidget *m_demwStatusWidget;
- DiskFile *m_disk;
+ Dos33DiskImage *m_disk;
HRCGControlsInfo *m_hrcgDialog;
HexConverter *m_hexConverter;
diff --git a/src/ui/diskexplorer/DiskExplorerMapWidget.cpp b/src/ui/diskexplorer/DiskExplorerMapWidget.cpp
index d50bdd2..b2b5451 100644
--- a/src/ui/diskexplorer/DiskExplorerMapWidget.cpp
+++ b/src/ui/diskexplorer/DiskExplorerMapWidget.cpp
@@ -146,7 +146,7 @@ void DiskExplorerMapWidget::setButtonBgColor(int track, int sector, QColor color
buttonAt(track,sector)->setBgColor(color);
}
-void DiskExplorerMapWidget::setDisk(DiskFile *disk)
+void DiskExplorerMapWidget::setDisk(Dos33DiskImage *disk)
{
if (disk)
{
@@ -375,7 +375,7 @@ void DiskExplorerMapWidget::mapDiskToButtons()
valid = tsl.getNextTSList().isValid();
- tsl = m_disk->getSector(tsl.getNextTSList()).promoteToTrackSectorList();
+ tsl = m_disk->getSector(tsl.getNextTSList()).asTrackSectorList();
}
}
}
diff --git a/src/ui/diskexplorer/DiskExplorerMapWidget.h b/src/ui/diskexplorer/DiskExplorerMapWidget.h
index feb0e5b..93a2eec 100644
--- a/src/ui/diskexplorer/DiskExplorerMapWidget.h
+++ b/src/ui/diskexplorer/DiskExplorerMapWidget.h
@@ -10,7 +10,7 @@
#include
-#include "diskfile.h"
+#include "dos33diskimage.h"
class DEButton : public QPushButton
@@ -99,7 +99,7 @@ public:
buttonAt(track,sector)->setText(text);
}
- void setDisk(DiskFile *disk);
+ void setDisk(Dos33DiskImage *disk);
void unloadDisk();
void setAllButtonsEnabled(bool enabled);
@@ -157,7 +157,7 @@ private:
QColor m_typeSFileColor;
QButtonGroup *m_bgroup;
- DiskFile *m_disk;
+ Dos33DiskImage *m_disk;
bool m_deferredSetup;
diff --git a/src/ui/viewers/hexdumpviewer.cpp b/src/ui/viewers/hexdumpviewer.cpp
index 80946b0..22124d2 100644
--- a/src/ui/viewers/hexdumpviewer.cpp
+++ b/src/ui/viewers/hexdumpviewer.cpp
@@ -124,9 +124,9 @@ QString HexDumpViewer::valToAppleAscii(quint8 val)
QString htmlstr = charval.toHtmlEscaped();
QString retval;
- if (attribute == Inverse) { retval = QString("%1").arg(htmlstr); }
- else if (attribute == Flash) { retval = QString("%1").arg(htmlstr);}
- else if (attribute == NormalLow) { retval = QString("%1").arg(htmlstr);}
+ if (attribute == TextAttribute::Inverse) { retval = QString("%1").arg(htmlstr); }
+ else if (attribute == TextAttribute::Flash) { retval = QString("%1").arg(htmlstr);}
+ else if (attribute == TextAttribute::NormalLow) { retval = QString("%1").arg(htmlstr);}
else { retval = QString("%1").arg(htmlstr);}
return retval;