From 20165005c26875e373e4e4724c8ac4d3259942a9 Mon Sep 17 00:00:00 2001 From: Mark Long Date: Thu, 11 Feb 2021 10:14:19 -0600 Subject: [PATCH] continuing work on new stuff --- AppleSAWS.pro | 13 +++- src/main.cpp | 2 +- src/resource/notes.txt | 7 ++ src/resource/resources.qrc | 11 +++ src/sequence/sequenceoutputview.cpp | 8 +-- src/sequence/sequenceoutputview.h | 9 ++- src/sequence/sequencetool.h | 1 + src/sequence/sequenceviewer.cpp | 8 +++ src/sequence/sequenceviewer.ui | 16 +---- src/ui/catalogwidget.cxx | 6 +- src/ui/catalogwidget.h | 14 ++-- src/ui/central/centralappwindow.cpp | 68 ++++++++++++++++--- src/ui/central/centralappwindow.h | 9 ++- src/ui/central/mainapptoolbar.cpp | 2 +- src/ui/diskexplorer/DiskExplorer.cpp | 4 +- src/ui/diskexplorer/DiskExplorer.h | 14 ++-- src/ui/diskexplorer/DiskExplorerMapWidget.cpp | 4 +- src/ui/diskexplorer/DiskExplorerMapWidget.h | 6 +- src/ui/viewers/hexdumpviewer.cpp | 6 +- 19 files changed, 147 insertions(+), 61 deletions(-) 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;