mirror of
https://github.com/markdavidlong/AppleSAWS.git
synced 2024-06-17 22:29:32 +00:00
Added new docking support and viewer widgets for DiskExplorer
This commit is contained in:
parent
cd782f52a9
commit
c4badd2137
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "ads"]
|
||||||
|
path = ads
|
||||||
|
url = https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
|
|
@ -6,6 +6,7 @@ MOC_DIR = ./.build
|
||||||
UI_DIR = ./.build
|
UI_DIR = ./.build
|
||||||
OBJECTS_DIR = ./.build
|
OBJECTS_DIR = ./.build
|
||||||
|
|
||||||
|
|
||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
TARGET = AppleSAWS
|
TARGET = AppleSAWS
|
||||||
|
@ -32,6 +33,7 @@ INCLUDEPATH += src/sequence
|
||||||
INCLUDEPATH += src/ui/central
|
INCLUDEPATH += src/ui/central
|
||||||
|
|
||||||
|
|
||||||
|
include(./ads.pri)
|
||||||
|
|
||||||
DEFINES += WS_VIDEO
|
DEFINES += WS_VIDEO
|
||||||
|
|
||||||
|
|
1
ads
Submodule
1
ads
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 13853573ea51f9f0e682f7d005ca4443398512ae
|
68
ads.pri
Normal file
68
ads.pri
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
DEFINES += ADS_STATIC
|
||||||
|
|
||||||
|
INCLUDEPATH += ads/src/
|
||||||
|
|
||||||
|
windows {
|
||||||
|
# MinGW
|
||||||
|
*-g++* {
|
||||||
|
QMAKE_CXXFLAGS += -Wall -Wextra -pedantic
|
||||||
|
}
|
||||||
|
# MSVC
|
||||||
|
*-msvc* {
|
||||||
|
QMAKE_CXXFLAGS += /utf-8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RESOURCES += ads/src/ads.qrc
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
ads/src/ads_globals.h \
|
||||||
|
ads/src/DockAreaWidget.h \
|
||||||
|
ads/src/DockAreaTabBar.h \
|
||||||
|
ads/src/DockContainerWidget.h \
|
||||||
|
ads/src/DockManager.h \
|
||||||
|
ads/src/DockWidget.h \
|
||||||
|
ads/src/DockWidgetTab.h \
|
||||||
|
ads/src/DockingStateReader.h \
|
||||||
|
ads/src/FloatingDockContainer.h \
|
||||||
|
ads/src/FloatingDragPreview.h \
|
||||||
|
ads/src/DockOverlay.h \
|
||||||
|
ads/src/DockSplitter.h \
|
||||||
|
ads/src/DockAreaTitleBar_p.h \
|
||||||
|
ads/src/DockAreaTitleBar.h \
|
||||||
|
ads/src/ElidingLabel.h \
|
||||||
|
ads/src/IconProvider.h \
|
||||||
|
ads/src/DockComponentsFactory.h \
|
||||||
|
ads/src/DockFocusController.h
|
||||||
|
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
ads/src/ads_globals.cpp \
|
||||||
|
ads/src/DockAreaWidget.cpp \
|
||||||
|
ads/src/DockAreaTabBar.cpp \
|
||||||
|
ads/src/DockContainerWidget.cpp \
|
||||||
|
ads/src/DockManager.cpp \
|
||||||
|
ads/src/DockWidget.cpp \
|
||||||
|
ads/src/DockingStateReader.cpp \
|
||||||
|
ads/src/DockWidgetTab.cpp \
|
||||||
|
ads/src/FloatingDockContainer.cpp \
|
||||||
|
ads/src/FloatingDragPreview.cpp \
|
||||||
|
ads/src/DockOverlay.cpp \
|
||||||
|
ads/src/DockSplitter.cpp \
|
||||||
|
ads/src/DockAreaTitleBar.cpp \
|
||||||
|
ads/src/ElidingLabel.cpp \
|
||||||
|
ads/src/IconProvider.cpp \
|
||||||
|
ads/src/DockComponentsFactory.cpp \
|
||||||
|
ads/src/DockFocusController.cpp
|
||||||
|
|
||||||
|
|
||||||
|
unix:!macx {
|
||||||
|
HEADERS += ads/src/linux/FloatingWidgetTitleBar.h
|
||||||
|
SOURCES += ads/src/linux/FloatingWidgetTitleBar.cpp
|
||||||
|
QT += x11extras
|
||||||
|
LIBS += -lxcb
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1560,7 +1560,6 @@ QTabBar::tab:top {
|
||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
padding-top: 2px;
|
padding-top: 2px;
|
||||||
padding-bottom: 2px;
|
padding-bottom: 2px;
|
||||||
min-width: 5px;
|
|
||||||
border-bottom: 3px solid #32414B;
|
border-bottom: 3px solid #32414B;
|
||||||
border-top-left-radius: 3px;
|
border-top-left-radius: 3px;
|
||||||
border-top-right-radius: 3px;
|
border-top-right-radius: 3px;
|
||||||
|
@ -2189,3 +2188,7 @@ DEButton {
|
||||||
outline: none;
|
outline: none;
|
||||||
min-width: 10px;
|
min-width: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ads--CElidingLabel {
|
||||||
|
min-width: 80px;
|
||||||
|
}
|
||||||
|
|
|
@ -36,10 +36,10 @@
|
||||||
#include <QStatusBar>
|
#include <QStatusBar>
|
||||||
#include <QStackedWidget>
|
#include <QStackedWidget>
|
||||||
#include <QScrollArea>
|
#include <QScrollArea>
|
||||||
|
|
||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
|
||||||
|
using namespace ads;
|
||||||
|
|
||||||
CentralAppWindow::CentralAppWindow(QWidget *parent) : QMainWindow(parent)
|
CentralAppWindow::CentralAppWindow(QWidget *parent) : QMainWindow(parent)
|
||||||
{
|
{
|
||||||
QFile f(":qdarkstyle/style.qss");
|
QFile f(":qdarkstyle/style.qss");
|
||||||
|
@ -50,25 +50,63 @@ CentralAppWindow::CentralAppWindow(QWidget *parent) : QMainWindow(parent)
|
||||||
else {
|
else {
|
||||||
f.open(QFile::ReadOnly | QFile::Text);
|
f.open(QFile::ReadOnly | QFile::Text);
|
||||||
QTextStream ts(&f);
|
QTextStream ts(&f);
|
||||||
this->setStyleSheet(ts.readAll());
|
// this->setStyleSheet(ts.readAll());
|
||||||
|
this->setStyleSheet("font-family: \"Pr Number 3\"; font-size: 16px");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initCentralWidget();
|
||||||
createActions();
|
createActions();
|
||||||
initMenuBar();
|
initMenuBar();
|
||||||
initToolBars();
|
initToolBars();
|
||||||
initDockWidgets();
|
initDockWidgets();
|
||||||
initStatusBar();
|
initStatusBar();
|
||||||
initCentralWidget();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CentralAppWindow::createActions()
|
void CentralAppWindow::createActions()
|
||||||
{
|
{
|
||||||
m_quitAction = new QAction(QIcon(":/images/redblob.png"),tr("E&xit"));
|
m_quitAction = new QAction(QIcon(":/images/redblob.png"),tr("&Quit"));
|
||||||
connect(m_quitAction, &QAction::triggered,
|
connect(m_quitAction, &QAction::triggered,
|
||||||
qApp, &QApplication::quit);
|
qApp, &QApplication::quit);
|
||||||
|
|
||||||
|
m_reference_action = new QAction(QIcon(":/images/redblob.png"),tr("&References"));
|
||||||
|
m_reference_action->setCheckable(true);
|
||||||
|
// connect(m_reference_action, &QAction::triggered,
|
||||||
|
// qApp, &QApplication::xxxxxx);
|
||||||
|
|
||||||
|
m_utils_action = new QAction(QIcon(":/images/redblob.png"),tr("&Utils"));
|
||||||
|
m_utils_action->setCheckable(true);
|
||||||
|
// connect(m_reference_action, &QAction::triggered,
|
||||||
|
// qApp, &QApplication::xxxxxx);
|
||||||
|
|
||||||
|
m_image_lib_action = new QAction(QIcon(":/images/redblob.png"),tr("&Disk Image\nLibrary"));
|
||||||
|
m_image_lib_action->setCheckable(true);
|
||||||
|
// connect(m_reference_action, &QAction::triggered,
|
||||||
|
// qApp, &QApplication::xxxxxx);
|
||||||
|
|
||||||
|
m_disk_explorer_action= new QAction(QIcon(":/images/redblob.png"),tr("Disk Image\n&Explorer"));
|
||||||
|
m_disk_explorer_action->setCheckable(true);
|
||||||
|
// connect(m_reference_action, &QAction::triggered,
|
||||||
|
// qApp, &QApplication::xxxxxx);
|
||||||
|
|
||||||
|
m_projects_action = new QAction(QIcon(":/images/redblob.png"),tr("&Projects"));
|
||||||
|
m_projects_action->setCheckable(true);
|
||||||
|
// connect(m_reference_action, &QAction::triggered,
|
||||||
|
// qApp, &QApplication::xxxxxx);
|
||||||
|
|
||||||
|
m_tool_action_group = new QActionGroup(this);
|
||||||
|
m_tool_action_group->addAction(m_reference_action);
|
||||||
|
m_tool_action_group->addAction(m_utils_action);
|
||||||
|
m_tool_action_group->addAction(m_image_lib_action);
|
||||||
|
m_tool_action_group->addAction(m_disk_explorer_action);
|
||||||
|
m_tool_action_group->addAction(m_projects_action);
|
||||||
|
m_tool_action_group->setExclusive(true);
|
||||||
|
m_disk_explorer_action->toggle();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CentralAppWindow::initMenuBar()
|
void CentralAppWindow::initMenuBar()
|
||||||
{
|
{
|
||||||
auto filemenu = menuBar()->addMenu(tr("&File"));
|
auto filemenu = menuBar()->addMenu(tr("&File"));
|
||||||
|
@ -87,34 +125,27 @@ void CentralAppWindow::initToolBars()
|
||||||
m_mainToolBar = new MainAppToolbar(this);
|
m_mainToolBar = new MainAppToolbar(this);
|
||||||
m_mainToolBar->setIconSize(QSize(64,64));
|
m_mainToolBar->setIconSize(QSize(64,64));
|
||||||
m_mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
|
m_mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
|
||||||
m_mainToolBar->addAction(m_quitAction);
|
|
||||||
m_mainToolBar->setFont(QFont("Ariel",14));
|
m_mainToolBar->setFont(QFont("Ariel",14));
|
||||||
|
// m_mainToolBar->addAction(m_quitAction);
|
||||||
|
|
||||||
|
m_mainToolBar->addAction(m_reference_action);
|
||||||
|
m_mainToolBar->addAction(m_utils_action);
|
||||||
|
m_mainToolBar->addAction(m_image_lib_action);
|
||||||
|
m_mainToolBar->addAction(m_disk_explorer_action);
|
||||||
|
m_mainToolBar->addAction(m_projects_action);
|
||||||
|
|
||||||
addToolBar(Qt::LeftToolBarArea, m_mainToolBar);
|
addToolBar(Qt::LeftToolBarArea, m_mainToolBar);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CentralAppWindow::initDockWidgets()
|
void CentralAppWindow::initDockWidgets()
|
||||||
{
|
{
|
||||||
QDockWidget *container = new QDockWidget(this);
|
|
||||||
container->setMinimumWidth(200);
|
|
||||||
container->setFeatures(QDockWidget::DockWidgetMovable);
|
|
||||||
|
|
||||||
m_project_area = new QWidget(container);
|
|
||||||
m_project_area->setMinimumSize(300,200);
|
|
||||||
|
|
||||||
m_directory_area = new Dos33DiskTreeView(container);
|
m_directory_area = new Dos33DiskTreeView();
|
||||||
m_directory_area->setFont(QFont("Pr Number 3", 12));
|
m_directory_area->setFont(QFont("Pr Number 3", 12));
|
||||||
m_directory_area->setMinimumSize(300,200);
|
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);
|
|
||||||
split->setStretchFactor(0,1);
|
|
||||||
split->setStretchFactor(1,1);
|
|
||||||
split->setSizes(QList<int>({4000, 4000}));
|
|
||||||
|
|
||||||
|
|
||||||
Dos33DiskImage *img = new Dos33DiskImage("c:/develop/git/AppleSAWS/disk-images/ApplesoftToolkit.dsk");
|
Dos33DiskImage *img = new Dos33DiskImage("c:/develop/git/AppleSAWS/disk-images/ApplesoftToolkit.dsk");
|
||||||
|
|
||||||
|
@ -128,37 +159,73 @@ void CentralAppWindow::initDockWidgets()
|
||||||
model->addDiskImage(img);
|
model->addDiskImage(img);
|
||||||
m_directory_area->setModel(model);
|
m_directory_area->setModel(model);
|
||||||
|
|
||||||
addDockWidget(Qt::LeftDockWidgetArea,container);
|
|
||||||
|
auto DiskImageDockWidget = new CDockWidget("Disk Images");
|
||||||
|
DiskImageDockWidget->setWidget(m_directory_area);
|
||||||
|
DiskImageDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||||
|
DiskImageDockWidget->resize(250, 150);
|
||||||
|
DiskImageDockWidget->setMinimumSize(200,150);
|
||||||
|
auto DiskImageWidgetArea = DockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, DiskImageDockWidget);
|
||||||
|
//DockManager->addDockWidget(DockWidgetArea::BottomDockWidgetArea, TableDockWidget, TableArea);
|
||||||
|
// ui->menuView->addAction(TableDockWidget->toggleViewAction());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
QDockWidget *stb = new QDockWidget(this);
|
|
||||||
stb->setMinimumWidth(200);
|
|
||||||
stb->setFeatures(QDockWidget::DockWidgetMovable);
|
|
||||||
// stb->setLayout(new QGridLayout());
|
|
||||||
|
|
||||||
m_toolbox = new SequenceToolBox(this);
|
m_toolbox = new SequenceToolBox(this);
|
||||||
|
|
||||||
|
auto SequenceDockWidget = new CDockWidget("Sequences");
|
||||||
|
SequenceDockWidget->setWidget(m_toolbox);
|
||||||
|
SequenceDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||||
|
SequenceDockWidget->resize(250, 150);
|
||||||
|
SequenceDockWidget->setMinimumSize(200,150);
|
||||||
|
auto SequenceWidgetArea = DockManager->addDockWidget(DockWidgetArea::RightDockWidgetArea, SequenceDockWidget);
|
||||||
|
|
||||||
|
|
||||||
addDockWidget(Qt::RightDockWidgetArea,stb);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CentralAppWindow::initCentralWidget()
|
void CentralAppWindow::initCentralWidget()
|
||||||
{
|
{
|
||||||
|
CDockManager::setConfigFlag(CDockManager::OpaqueSplitterResize, true);
|
||||||
|
CDockManager::setConfigFlag(CDockManager::XmlCompressionEnabled, false);
|
||||||
|
CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
|
||||||
|
CDockManager::setConfigFlag(CDockManager::TabCloseButtonIsToolButton, true);
|
||||||
|
|
||||||
|
DockManager = new CDockManager(this);
|
||||||
|
DockManager->setStyleSheet("");
|
||||||
|
|
||||||
m_central_stack = new QStackedWidget(this);
|
m_central_stack = new QStackedWidget(this);
|
||||||
QScrollArea *sa = new QScrollArea(m_central_stack);
|
QScrollArea *sa = new QScrollArea(m_central_stack);
|
||||||
sa->setWidgetResizable(true);
|
sa->setWidgetResizable(true);
|
||||||
m_central_stack->addWidget(sa);
|
m_central_stack->addWidget(sa);
|
||||||
|
|
||||||
setCentralWidget(m_central_stack);
|
CentralDockWidget = new CDockWidget("CentralWidget");
|
||||||
|
CentralDockWidget->setWidget(m_central_stack);
|
||||||
|
// CentralDockWidget->setFeature(CDockWidget::NoTab,true);
|
||||||
|
m_central_dock_area = DockManager->setCentralWidget(CentralDockWidget);
|
||||||
|
|
||||||
Dos33DiskImage *img = new Dos33DiskImage("c:/develop/git/AppleSAWS/disk-images/ApplesoftToolkit.dsk");
|
Dos33DiskImage *img = new Dos33DiskImage("c:/develop/git/AppleSAWS/disk-images/ApplesoftToolkit.dsk");
|
||||||
auto dew = new DiskExplorerMapWidget(img->tracks(),img->sectorsPerTrack());
|
auto dew = new DiskExplorerMapWidget(img->tracks(),img->sectorsPerTrack());
|
||||||
dew->setDisk(img);
|
dew->setDisk(img);
|
||||||
sa->setWidget(dew);
|
sa->setWidget(dew);
|
||||||
// m_central_stack->addWidget(dew);
|
|
||||||
//new SequenceViewer()
|
auto VWSDockWidget = new CDockWidget("Sector Contents");
|
||||||
|
VWSDockWidget->setWidget(dew->generateViewWidgetStack());
|
||||||
|
auto VWSWidgetArea = DockManager->addDockWidget(DockWidgetArea::BottomDockWidgetArea, VWSDockWidget);
|
||||||
|
|
||||||
|
auto KeyDockWidget = new CDockWidget("Key");
|
||||||
|
auto keywidget = dew->makeKeyWidget();
|
||||||
|
keywidget->setMaximumWidth(240);
|
||||||
|
KeyDockWidget->setWidget(keywidget);
|
||||||
|
KeyDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget);
|
||||||
|
// KeyDockWidget->resize(250, 150);
|
||||||
|
// KeyDockWidget->setMinimumSize(200,150);
|
||||||
|
auto DiskImageWidgetArea =
|
||||||
|
DockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, KeyDockWidget, m_central_dock_area);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,12 @@ class QStatusBar;
|
||||||
class SequenceToolBox;
|
class SequenceToolBox;
|
||||||
class QStackedWidget;
|
class QStackedWidget;
|
||||||
|
|
||||||
|
#include "DockAreaWidget.h"
|
||||||
|
#include "DockWidget.h"
|
||||||
|
#include "DockManager.h"
|
||||||
|
#include <QActionGroup>
|
||||||
|
|
||||||
|
|
||||||
class CentralAppWindow : public QMainWindow
|
class CentralAppWindow : public QMainWindow
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -47,6 +53,12 @@ private:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QAction *m_quitAction;
|
QAction *m_quitAction;
|
||||||
|
QAction *m_reference_action;
|
||||||
|
QAction *m_utils_action;
|
||||||
|
QAction *m_image_lib_action;
|
||||||
|
QAction *m_disk_explorer_action;
|
||||||
|
QAction *m_projects_action;
|
||||||
|
QActionGroup *m_tool_action_group;
|
||||||
|
|
||||||
MainAppToolbar *m_mainToolBar;
|
MainAppToolbar *m_mainToolBar;
|
||||||
QTreeView *m_directory_area;
|
QTreeView *m_directory_area;
|
||||||
|
@ -55,6 +67,10 @@ private:
|
||||||
|
|
||||||
SequenceToolBox *m_toolbox;
|
SequenceToolBox *m_toolbox;
|
||||||
|
|
||||||
|
ads::CDockManager *DockManager;
|
||||||
|
ads::CDockWidget *CentralDockWidget;
|
||||||
|
ads::CDockAreaWidget *m_central_dock_area;
|
||||||
|
|
||||||
QStackedWidget *m_central_stack;
|
QStackedWidget *m_central_stack;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,7 @@ void DiskExplorer::initUi()
|
||||||
// m_hdv = new HexDumpViewer(this, 10);
|
// m_hdv = new HexDumpViewer(this, 10);
|
||||||
// frameLayout->addWidget(m_hdv);
|
// frameLayout->addWidget(m_hdv);
|
||||||
|
|
||||||
m_vws = new ViewWidgetStack(this);
|
m_vws = m_demw->generateViewWidgetStack(); // new ViewWidgetStack(this);
|
||||||
frameLayout->addWidget(m_vws);
|
frameLayout->addWidget(m_vws);
|
||||||
|
|
||||||
m_gridLayout->setColumnStretch(0,4);
|
m_gridLayout->setColumnStretch(0,4);
|
||||||
|
@ -155,8 +155,8 @@ void DiskExplorer::initUi()
|
||||||
|
|
||||||
connect(m_cw, &CatalogWidget::openWithDefaultViewer,
|
connect(m_cw, &CatalogWidget::openWithDefaultViewer,
|
||||||
this, &DiskExplorer::handleDiskItemSelectedDefaultOpen);
|
this, &DiskExplorer::handleDiskItemSelectedDefaultOpen);
|
||||||
connect(m_demw, &DiskExplorerMapWidget::showSectorData,
|
// connect(m_demw, &DiskExplorerMapWidget::showSectorData,
|
||||||
this, &DiskExplorer::handleShowSectorData);
|
// this, &DiskExplorer::handleShowSectorData);
|
||||||
|
|
||||||
QStatusBar *statusBar = new QStatusBar(this);
|
QStatusBar *statusBar = new QStatusBar(this);
|
||||||
setStatusBar(statusBar);
|
setStatusBar(statusBar);
|
||||||
|
@ -179,6 +179,8 @@ void DiskExplorer::unloadDiskFile()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void DiskExplorer::loadDiskFile(QString filename)
|
void DiskExplorer::loadDiskFile(QString filename)
|
||||||
{
|
{
|
||||||
if (m_disk) {
|
if (m_disk) {
|
||||||
|
@ -202,6 +204,7 @@ void DiskExplorer::loadDiskFile(QString filename)
|
||||||
|
|
||||||
void DiskExplorer::handleShowSectorData(QByteArray /*data*/, int track, int sector, QVariant metadata)
|
void DiskExplorer::handleShowSectorData(QByteArray /*data*/, int track, int sector, QVariant metadata)
|
||||||
{
|
{
|
||||||
|
return;
|
||||||
|
|
||||||
ViewWidgetStack::PreferredViewer viewer =
|
ViewWidgetStack::PreferredViewer viewer =
|
||||||
ViewWidgetStack::PreferredViewer::DontCare;
|
ViewWidgetStack::PreferredViewer::DontCare;
|
||||||
|
|
|
@ -65,6 +65,7 @@ private slots:
|
||||||
void setDiskToolsVisible(bool visible);
|
void setDiskToolsVisible(bool visible);
|
||||||
|
|
||||||
void handleViewerClosing(ViewerBase *viewer);
|
void handleViewerClosing(ViewerBase *viewer);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initUi();
|
void initUi();
|
||||||
|
|
||||||
|
|
|
@ -157,6 +157,8 @@ 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((int) m_roles[TSPair(track,sector)]));
|
emit showSectorData(*data,track,sector,QVariant((int) m_roles[TSPair(track,sector)]));
|
||||||
|
emit showSector(&sec,track,sector,m_roles[TSPair(track,sector)]);
|
||||||
|
|
||||||
m_trackSectorLabel->setText(
|
m_trackSectorLabel->setText(
|
||||||
QString("Track: %1 Sector: %2 (%3)")
|
QString("Track: %1 Sector: %2 (%3)")
|
||||||
.arg(track)
|
.arg(track)
|
||||||
|
@ -165,6 +167,8 @@ void DiskExplorerMapWidget::handleButtonCheck(int track, int sector, bool checke
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
emit showSectorData(QByteArray(),-1,-1,QVariant(-1));
|
emit showSectorData(QByteArray(),-1,-1,QVariant(-1));
|
||||||
|
emit showSector(nullptr, -1, -1, DiskSectorRole::Unknown);
|
||||||
|
|
||||||
m_trackSectorLabel->setText("No Track/Sector selected");
|
m_trackSectorLabel->setText("No Track/Sector selected");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +253,7 @@ QGroupBox *DiskExplorerMapWidget::makeKeyWidget()
|
||||||
{
|
{
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
QGroupBox *groupbox= new QGroupBox();
|
QGroupBox *groupbox= new QGroupBox();
|
||||||
groupbox->setTitle("Key");
|
//groupbox->setTitle("Key");
|
||||||
QGridLayout *layout = new QGridLayout();
|
QGridLayout *layout = new QGridLayout();
|
||||||
layout->setVerticalSpacing(0);
|
layout->setVerticalSpacing(0);
|
||||||
layout->setHorizontalSpacing(0);
|
layout->setHorizontalSpacing(0);
|
||||||
|
@ -273,6 +277,15 @@ QGroupBox *DiskExplorerMapWidget::makeKeyWidget()
|
||||||
return groupbox;
|
return groupbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ViewWidgetStack *DiskExplorerMapWidget::generateViewWidgetStack()
|
||||||
|
{
|
||||||
|
ViewWidgetStack *vws = new ViewWidgetStack();
|
||||||
|
vws->setSector(nullptr);
|
||||||
|
connect(this, &DiskExplorerMapWidget::showSector,
|
||||||
|
vws, &ViewWidgetStack::handleShowSectorData);
|
||||||
|
return vws;
|
||||||
|
}
|
||||||
|
|
||||||
DEButton *DiskExplorerMapWidget::buttonAt(int track, int sector)
|
DEButton *DiskExplorerMapWidget::buttonAt(int track, int sector)
|
||||||
{
|
{
|
||||||
//qDebug() << "Button At:" << track << "," << sector;
|
//qDebug() << "Button At:" << track << "," << sector;
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
#include "dos33diskimage.h"
|
#include "dos33diskimage.h"
|
||||||
|
#include "viewwidgetstack.h"
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QPair>
|
#include <QPair>
|
||||||
|
@ -30,6 +31,7 @@
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QToolButton>
|
#include <QToolButton>
|
||||||
|
|
||||||
|
|
||||||
class DEButton : public QToolButton
|
class DEButton : public QToolButton
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -112,7 +114,8 @@ private:
|
||||||
"} "
|
"} "
|
||||||
" "
|
" "
|
||||||
"DEButton:checked { "
|
"DEButton:checked { "
|
||||||
" font: bold italic 11px; "
|
// " font: bold italic 11px; "
|
||||||
|
" font: bold 11px; "
|
||||||
"}"
|
"}"
|
||||||
).arg(m_fgColor)
|
).arg(m_fgColor)
|
||||||
.arg(m_backgroundColor);
|
.arg(m_backgroundColor);
|
||||||
|
@ -168,9 +171,12 @@ public:
|
||||||
|
|
||||||
QGroupBox *makeKeyWidget();
|
QGroupBox *makeKeyWidget();
|
||||||
QWidget *getStatusWidget() const { return m_statusWidget; }
|
QWidget *getStatusWidget() const { return m_statusWidget; }
|
||||||
|
ViewWidgetStack *generateViewWidgetStack();
|
||||||
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void showSectorData(QByteArray data, int track, int sector, QVariant metadata);
|
void showSectorData(QByteArray data, int track, int sector, QVariant metadata);
|
||||||
|
void showSector(Sector *sec, int track, int sector, DiskSectorRole role);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void handleButtonCheck(int track, int sector, bool checked);
|
void handleButtonCheck(int track, int sector, bool checked);
|
||||||
|
@ -206,6 +212,8 @@ protected:
|
||||||
int &buttonNumber, int &tslCount);
|
int &buttonNumber, int &tslCount);
|
||||||
DiskSectorRole getFileTypeFromID(QString id);
|
DiskSectorRole getFileTypeFromID(QString id);
|
||||||
void checkForUsedButUnknown(TSPair vtoc = TSPair(17,0));
|
void checkForUsedButUnknown(TSPair vtoc = TSPair(17,0));
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
QMap<int, QMap<int,DEButton*> > m_buttons;
|
QMap<int, QMap<int,DEButton*> > m_buttons;
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "vtocview.h"
|
#include "vtocview.h"
|
||||||
#include "catalogsectorview.h"
|
#include "catalogsectorview.h"
|
||||||
#include "tslistview.h"
|
#include "tslistview.h"
|
||||||
|
#include "DiskExplorerMapWidget.h"
|
||||||
|
|
||||||
ViewWidgetStack::ViewWidgetStack(QWidget *parent) : QTabWidget(parent)
|
ViewWidgetStack::ViewWidgetStack(QWidget *parent) : QTabWidget(parent)
|
||||||
{
|
{
|
||||||
|
@ -77,3 +78,34 @@ void ViewWidgetStack::makeWidgets()
|
||||||
|
|
||||||
setCurrentWidget(m_hdv);
|
setCurrentWidget(m_hdv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ViewWidgetStack::handleShowSectorData(Sector *data, int track,
|
||||||
|
int sector, DiskSectorRole role)
|
||||||
|
{
|
||||||
|
|
||||||
|
ViewWidgetStack::PreferredViewer viewer =
|
||||||
|
ViewWidgetStack::PreferredViewer::DontCare;
|
||||||
|
|
||||||
|
bool USE_SPECIFIC_VIEWER = true; // Hook for later allowing the disuse of
|
||||||
|
if (USE_SPECIFIC_VIEWER) // default viewer switching
|
||||||
|
{
|
||||||
|
if (role == DiskSectorRole::VTOC)
|
||||||
|
{
|
||||||
|
viewer = ViewWidgetStack::PreferredViewer::VTOC;
|
||||||
|
}
|
||||||
|
else if (role == DiskSectorRole::CatalogSector)
|
||||||
|
{
|
||||||
|
viewer = ViewWidgetStack::PreferredViewer::CatalogSector;
|
||||||
|
}
|
||||||
|
else if (role == DiskSectorRole::TSList)
|
||||||
|
{
|
||||||
|
viewer = ViewWidgetStack::PreferredViewer::TSList;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
viewer = ViewWidgetStack::PreferredViewer::HexDump;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setSector(data, viewer);
|
||||||
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ class HexDumpViewer;
|
||||||
class VTOCView;
|
class VTOCView;
|
||||||
class CatalogSectorView;
|
class CatalogSectorView;
|
||||||
class TSListView;
|
class TSListView;
|
||||||
|
enum class DiskSectorRole;
|
||||||
|
|
||||||
class ViewWidgetStack : public QTabWidget
|
class ViewWidgetStack : public QTabWidget
|
||||||
{
|
{
|
||||||
|
@ -48,6 +49,10 @@ public:
|
||||||
public slots:
|
public slots:
|
||||||
void setSector(Sector *sec, PreferredViewer viewer = PreferredViewer::DontCare);
|
void setSector(Sector *sec, PreferredViewer viewer = PreferredViewer::DontCare);
|
||||||
|
|
||||||
|
void handleShowSectorData(Sector *data, int track, int sector, DiskSectorRole role);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void makeWidgets();
|
void makeWidgets();
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,8 @@ void VTOCView::setSector(Sector *sec)
|
||||||
|
|
||||||
ui->m_lastAllocTrackLabel->setText(QString("%1").arg(v.lastTrackAllocated()));
|
ui->m_lastAllocTrackLabel->setText(QString("%1").arg(v.lastTrackAllocated()));
|
||||||
|
|
||||||
ui->m_allocDirLabel->setText(QString("%1").arg(v.directionOfAllocation()));
|
ui->m_allocDirLabel->setText(QString("%1 %2").arg(v.directionOfAllocation())
|
||||||
|
.arg((v.directionOfAllocation()>0)?"==>":"<=="));
|
||||||
|
|
||||||
ui->m_tracksPerDiskLabel->setText(QString("%1").arg(v.tracksPerDisk()));
|
ui->m_tracksPerDiskLabel->setText(QString("%1").arg(v.tracksPerDisk()));
|
||||||
|
|
||||||
|
@ -90,7 +91,7 @@ void VTOCView::setSector(Sector *sec)
|
||||||
ui->m_usageTextBrowser->setText("");
|
ui->m_usageTextBrowser->setText("");
|
||||||
ui->m_usageTextBrowser->setWordWrapMode(QTextOption::NoWrap);
|
ui->m_usageTextBrowser->setWordWrapMode(QTextOption::NoWrap);
|
||||||
auto format = ui->m_usageTextBrowser->currentCharFormat();
|
auto format = ui->m_usageTextBrowser->currentCharFormat();
|
||||||
format.setFont(QFont("courier new",6));
|
// format.setFont(QFont("courier new"/*,6*/));
|
||||||
ui->m_usageTextBrowser->setCurrentCharFormat(format);
|
ui->m_usageTextBrowser->setCurrentCharFormat(format);
|
||||||
ui->m_usageTextBrowser->insertPlainText(usage);
|
ui->m_usageTextBrowser->insertPlainText(usage);
|
||||||
|
|
||||||
|
@ -115,8 +116,3 @@ void VTOCView::setSector(Sector *sec)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString VTOCView::makeUsage()
|
|
||||||
{
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
|
@ -39,8 +39,6 @@ public:
|
||||||
|
|
||||||
void setSector(Sector *sec);
|
void setSector(Sector *sec);
|
||||||
|
|
||||||
protected:
|
|
||||||
QString makeUsage();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::VTOCView *ui;
|
Ui::VTOCView *ui;
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="">
|
<widget class="QWidget" name="layoutWidget">
|
||||||
<layout class="QFormLayout" name="formLayout">
|
<layout class="QFormLayout" name="formLayout">
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="labelx">
|
<widget class="QLabel" name="labelx">
|
||||||
|
@ -105,28 +105,28 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0">
|
<item row="9" column="0">
|
||||||
<widget class="QLabel" name="label_12">
|
<widget class="QLabel" name="label_12">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Sectors/Track</string>
|
<string>Sectors/Track</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="1">
|
<item row="9" column="1">
|
||||||
<widget class="QLabel" name="m_sectorsPerTrackLabel">
|
<widget class="QLabel" name="m_sectorsPerTrackLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>--</string>
|
<string>--</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="0">
|
<item row="10" column="0">
|
||||||
<widget class="QLabel" name="label_14">
|
<widget class="QLabel" name="label_14">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Bytes/Sector</string>
|
<string>Bytes/Sector</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="1">
|
<item row="10" column="1">
|
||||||
<widget class="QLabel" name="m_bytesPerSectorLabel">
|
<widget class="QLabel" name="m_bytesPerSectorLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>--</string>
|
<string>--</string>
|
||||||
|
@ -160,9 +160,35 @@
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="8" column="1">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="11" column="0">
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="">
|
<widget class="QWidget" name="layoutWidget">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_16">
|
<widget class="QLabel" name="label_16">
|
||||||
|
|
|
@ -19,8 +19,6 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
|
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "genericfile.h"
|
#include "genericfile.h"
|
||||||
#include "fileviewerinterface.h"
|
#include "fileviewerinterface.h"
|
||||||
|
|
||||||
|
@ -57,6 +55,7 @@ public slots:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setTextFont(const QFont &font, int forcedFontSize = -1);
|
void setTextFont(const QFont &font, int forcedFontSize = -1);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setText(QString text);
|
void setText(QString text);
|
||||||
void setData(QByteArray data);
|
void setData(QByteArray data);
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
<pointsize>10</pointsize>
|
<pointsize>10</pointsize>
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="lineWrapMode">
|
||||||
|
<enum>QTextEdit::NoWrap</enum>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user