From 6303dd1228254deb483af8848cb9bc5ff95b7c25 Mon Sep 17 00:00:00 2001 From: Mark Long Date: Wed, 10 Feb 2021 17:12:04 -0600 Subject: [PATCH] Work on sequencer view, etc. --- AppleSAWS.pro | 12 ++ src/memory/roles/role_asm_operand.cpp | 12 +- src/memory/roles/role_asm_operand.h | 66 ++++----- src/resource/redblob.png | Bin 0 -> 1433 bytes src/resource/resources.qrc | 3 + src/sequence/sequenceevent.cpp | 12 +- src/sequence/sequenceevent.h | 32 ++--- src/sequence/sequenceeventlist.cpp | 22 +-- src/sequence/sequenceeventlist.h | 36 ++--- src/sequence/sequenceeventlistwidget.cpp | 12 +- src/sequence/sequenceeventlistwidget.h | 32 ++--- src/sequence/sequenceoutputview.cpp | 103 ++++++++++++++ src/sequence/sequenceoutputview.h | 114 +++++++++++++++ src/sequence/sequencetool.cpp | 46 +++---- src/sequence/sequencetool.h | 63 ++++----- src/sequence/sequencetoolbox.cpp | 168 +++++++++++------------ src/sequence/sequencetoolbox.h | 95 ++++++------- src/sequence/sequenceviewer.cpp | 15 ++ src/sequence/sequenceviewer.h | 22 +++ src/sequence/sequenceviewer.ui | 92 +++++++++++++ src/sequence/textblockuserdata.cpp | 7 + src/sequence/textblockuserdata.h | 16 +++ src/ui/central/centralappwindow.cpp | 74 ++++++++++ src/ui/central/centralappwindow.h | 32 +++++ src/ui/central/mainapptoolbar.cpp | 8 ++ src/ui/central/mainapptoolbar.h | 13 ++ src/ui/startupdialog.cpp | 7 +- src/ui/startupdialog.h | 2 + src/ui/startupdialog.ui | 11 +- 29 files changed, 825 insertions(+), 302 deletions(-) create mode 100644 src/resource/redblob.png create mode 100644 src/sequence/sequenceoutputview.cpp create mode 100644 src/sequence/sequenceoutputview.h create mode 100644 src/sequence/sequenceviewer.cpp create mode 100644 src/sequence/sequenceviewer.h create mode 100644 src/sequence/sequenceviewer.ui create mode 100644 src/sequence/textblockuserdata.cpp create mode 100644 src/sequence/textblockuserdata.h create mode 100644 src/ui/central/centralappwindow.cpp create mode 100644 src/ui/central/centralappwindow.h create mode 100644 src/ui/central/mainapptoolbar.cpp create mode 100644 src/ui/central/mainapptoolbar.h diff --git a/AppleSAWS.pro b/AppleSAWS.pro index 842e11c..d6ddde5 100644 --- a/AppleSAWS.pro +++ b/AppleSAWS.pro @@ -29,6 +29,7 @@ INCLUDEPATH += src/ui INCLUDEPATH += src/memory INCLUDEPATH += src/memory/roles INCLUDEPATH += src/sequence +INCLUDEPATH += src/ui/central @@ -52,8 +53,13 @@ SOURCES += \ src/sequence/sequenceevent.cpp \ src/sequence/sequenceeventlist.cpp \ src/sequence/sequenceeventlistwidget.cpp \ + src/sequence/sequenceoutputview.cpp \ src/sequence/sequencetool.cpp \ src/sequence/sequencetoolbox.cpp \ + src/sequence/sequenceviewer.cpp \ + src/sequence/textblockuserdata.cpp \ + src/ui/central/centralappwindow.cpp \ + src/ui/central/mainapptoolbar.cpp \ src/ui/startupdialog.cpp \ src/ui/viewers/intbasicfileviewer.cxx \ src/ui/widgets/notesdialog.cpp \ @@ -112,8 +118,13 @@ HEADERS += \ src/sequence/sequenceevent.h \ src/sequence/sequenceeventlist.h \ src/sequence/sequenceeventlistwidget.h \ + src/sequence/sequenceoutputview.h \ src/sequence/sequencetool.h \ src/sequence/sequencetoolbox.h \ + src/sequence/sequenceviewer.h \ + src/sequence/textblockuserdata.h \ + src/ui/central/centralappwindow.h \ + src/ui/central/mainapptoolbar.h \ src/ui/startupdialog.h \ src/ui/viewers/intbasicfileviewer.h \ src/ui/widgets/notesdialog.h \ @@ -162,6 +173,7 @@ HEADERS += \ src/ui/widgets/asciiinfodialog.h FORMS += \ + src/sequence/sequenceviewer.ui \ src/ui/catalogwidget.ui \ src/ui/startupdialog.ui \ src/ui/viewers/applesoftfileviewer.ui \ diff --git a/src/memory/roles/role_asm_operand.cpp b/src/memory/roles/role_asm_operand.cpp index 65fd164..160727d 100644 --- a/src/memory/roles/role_asm_operand.cpp +++ b/src/memory/roles/role_asm_operand.cpp @@ -1,6 +1,6 @@ -#include "role_asm_operand.h" - -RoleAsmOperand::RoleAsmOperand() -{ - -} +#include "role_asm_operand.h" + +RoleAsmOperand::RoleAsmOperand() +{ + +} diff --git a/src/memory/roles/role_asm_operand.h b/src/memory/roles/role_asm_operand.h index c2f2396..3a1b474 100644 --- a/src/memory/roles/role_asm_operand.h +++ b/src/memory/roles/role_asm_operand.h @@ -1,33 +1,33 @@ -#ifndef ROLEASMOPERAND_H -#define ROLEASMOPERAND_H - -#include -#include "memrole.h" - -class RoleAsmOperand : public MemRole -{ - -public: - static const int RoleID = 2; - - typedef enum - { - Byte, - WordLo, - WordHi, - } Type; - - RoleAsmOperand(); - - virtual int id() const override { return RoleID; } - virtual QString name() const override { return "RoleAsmOperand"; } - - void setOperandType(Type type) { m_optype = type; } - Type operandType() const { return m_optype; } - -protected: - Type m_optype; - -}; - -#endif // ROLEASMOPERAND_H +#ifndef ROLEASMOPERAND_H +#define ROLEASMOPERAND_H + +#include +#include "memrole.h" + +class RoleAsmOperand : public MemRole +{ + +public: + static const int RoleID = 2; + + typedef enum + { + Byte, + WordLo, + WordHi, + } Type; + + RoleAsmOperand(); + + virtual int id() const override { return RoleID; } + virtual QString name() const override { return "RoleAsmOperand"; } + + void setOperandType(Type type) { m_optype = type; } + Type operandType() const { return m_optype; } + +protected: + Type m_optype; + +}; + +#endif // ROLEASMOPERAND_H diff --git a/src/resource/redblob.png b/src/resource/redblob.png new file mode 100644 index 0000000000000000000000000000000000000000..bd3d8fb085e9971371452489f27f51d5bea02f8b GIT binary patch literal 1433 zcmV;K1!nq*P)EX>4Tx04R}tkv&MmKpe$iQ?()$2Rn#3M5sAE$6^me@v=v%)FuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=H{g6A|?JWDYS_3;J6>}?mh0_0Yam~RI_UWP&La) z#baVNw<-o+A)p6-j3Od2Q%|H9Gw>W=_we!cF3PjK&;2?2mAuISpGZ8%bi*RvAfDN@ zbk6(4Ay$$U;&bANK^G)`9%C|}6B ztZ?4qtX68Qbx;1nU|w5EbDic0;#figNr;e9Lm3rVh|;Q&Vj@NRF%SQ+<4=-HCRZ7Z z91EyIh2;3b|KNAGW?^d5O$x?eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00VJJL_t(|+U=V=YZOr!hM%1zlZ}Z{ydgO;N(NETLIg|w zA9fakg(BG5*@@VRKf}Vx#>U1X7B=1$M~vhIC9CFU!e%eA$QeA0Gnwno?ws8ZhLbGI z?7q+Ue&4xd0)rUDAOvj6G*3SY`a3#^S)^(Kvc>g zyptd*y=3)nfUt7Pdg0;$Tp_lzCNV33u_7!V0ig|4(}J)vir?skx!e_E6F86tf>n0$ z8iX2fEU6~T1o0Y#d0;k)uB4W+yIu1!XNQx(7oeRdfT3=6`%XegQUYTo+viNHtC9x* z+ZAH1OzK@Bo~eGY>+BF0z}^z?c+UW%Spe8-iYZ+v7g)fNFc-uDu*ZONkJ&I6M*$de zh4@`&<;n$wxgZLFjX5z5Oe6&`YKV9*^Amm-^os+$HOz6pCM%-;f0&@&72=7?d^HgO z%!=V4SN9Wu5jBqMeV`v5a9D$p%b8$V!aFt_iR%EtD^w4fX{~1|FVLR2mru_BjvS{X8(@%YXhkH%i4Wc|O<+;4|0GLc z*OBsSiL<|=gx8a-1N2x_S6Q=P16~7v(gFbZ=16(Dq$|G$u%2`!=#RHRt=CIISzovM zJn$kY`)Rhr3&4US<;@-yf7fSy?>n!j*$V{42SxW&uR&1am;B8ec<1l@SpWdM=`{!; z;#YvVFzaUlPy@be5N`CKcz~xNuV)6}l|oBF_~=M^rHc(ONaSNc#<@q#&L!tuGXaKvp0brjhkI5AG z^!D>V)fW9_+N>7=APR&IWLO*h3z?=idZ#+NO literal 0 HcmV?d00001 diff --git a/src/resource/resources.qrc b/src/resource/resources.qrc index 9044e34..0addbf5 100644 --- a/src/resource/resources.qrc +++ b/src/resource/resources.qrc @@ -7,4 +7,7 @@ notes.txt + + redblob.png + diff --git a/src/sequence/sequenceevent.cpp b/src/sequence/sequenceevent.cpp index 5af1ac3..0ecbb4b 100644 --- a/src/sequence/sequenceevent.cpp +++ b/src/sequence/sequenceevent.cpp @@ -1,6 +1,6 @@ -#include "sequenceevent.h" - -SequenceEvent::SequenceEvent() -{ - -} +#include "sequenceevent.h" + +SequenceEvent::SequenceEvent() +{ + +} diff --git a/src/sequence/sequenceevent.h b/src/sequence/sequenceevent.h index 4980ba3..76d113b 100644 --- a/src/sequence/sequenceevent.h +++ b/src/sequence/sequenceevent.h @@ -1,16 +1,16 @@ -#ifndef SEQUENCEEVENT_H -#define SEQUENCEEVENT_H - -#include - -class SequenceEvent -{ -public: - SequenceEvent(); - virtual ~SequenceEvent() { } - - virtual QString basename() = 0; - virtual QString extendedName() { return basename(); } -}; - -#endif // SEQUENCEEVENT_H +#ifndef SEQUENCEEVENT_H +#define SEQUENCEEVENT_H + +#include + +class SequenceEvent +{ +public: + SequenceEvent(); + virtual ~SequenceEvent() { } + + virtual QString basename() = 0; + virtual QString extendedName() { return basename(); } +}; + +#endif // SEQUENCEEVENT_H diff --git a/src/sequence/sequenceeventlist.cpp b/src/sequence/sequenceeventlist.cpp index 3616d64..0479d50 100644 --- a/src/sequence/sequenceeventlist.cpp +++ b/src/sequence/sequenceeventlist.cpp @@ -1,11 +1,11 @@ -#include "sequenceeventlist.h" - -SequenceEventList::SequenceEventList(QObject *parent) : QAbstractListModel(parent) -{ - -} - -SequenceEventList::~SequenceEventList() -{ - -} +#include "sequenceeventlist.h" + +SequenceEventList::SequenceEventList(QObject *parent) : QAbstractListModel(parent) +{ + +} + +SequenceEventList::~SequenceEventList() +{ + +} diff --git a/src/sequence/sequenceeventlist.h b/src/sequence/sequenceeventlist.h index 18bc77c..04f6f4b 100644 --- a/src/sequence/sequenceeventlist.h +++ b/src/sequence/sequenceeventlist.h @@ -1,18 +1,18 @@ -#ifndef SEQUENCEEVENTLIST_H -#define SEQUENCEEVENTLIST_H - -#include "sequenceevent.h" - -#include - -class SequenceEventList : public QAbstractListModel -{ - Q_OBJECT - -public: - SequenceEventList(QObject *parent = nullptr); - virtual ~SequenceEventList(); - -}; - -#endif // SEQUENCEEVENTLIST_H +#ifndef SEQUENCEEVENTLIST_H +#define SEQUENCEEVENTLIST_H + +#include "sequenceevent.h" + +#include + +class SequenceEventList : public QAbstractListModel +{ + Q_OBJECT + +public: + SequenceEventList(QObject *parent = nullptr); + virtual ~SequenceEventList(); + +}; + +#endif // SEQUENCEEVENTLIST_H diff --git a/src/sequence/sequenceeventlistwidget.cpp b/src/sequence/sequenceeventlistwidget.cpp index 5f36d44..7cd1fbb 100644 --- a/src/sequence/sequenceeventlistwidget.cpp +++ b/src/sequence/sequenceeventlistwidget.cpp @@ -1,6 +1,6 @@ -#include "sequenceeventlistwidget.h" - -SequenceEventListWidget::SequenceEventListWidget(QWidget *parent) : QListView(parent) -{ - -} +#include "sequenceeventlistwidget.h" + +SequenceEventListWidget::SequenceEventListWidget(QWidget *parent) : QListView(parent) +{ + +} diff --git a/src/sequence/sequenceeventlistwidget.h b/src/sequence/sequenceeventlistwidget.h index 9c0aadf..8079efe 100644 --- a/src/sequence/sequenceeventlistwidget.h +++ b/src/sequence/sequenceeventlistwidget.h @@ -1,16 +1,16 @@ -#ifndef SEQUENCEEVENTLISTWIDGET_H -#define SEQUENCEEVENTLISTWIDGET_H - -#include - -class SequenceEventListWidget : public QListView -{ - Q_OBJECT -public: - explicit SequenceEventListWidget(QWidget *parent = nullptr); - -signals: - -}; - -#endif // SEQUENCEEVENTLISTWIDGET_H +#ifndef SEQUENCEEVENTLISTWIDGET_H +#define SEQUENCEEVENTLISTWIDGET_H + +#include + +class SequenceEventListWidget : public QListView +{ + Q_OBJECT +public: + explicit SequenceEventListWidget(QWidget *parent = nullptr); + +signals: + +}; + +#endif // SEQUENCEEVENTLISTWIDGET_H diff --git a/src/sequence/sequenceoutputview.cpp b/src/sequence/sequenceoutputview.cpp new file mode 100644 index 0000000..359113b --- /dev/null +++ b/src/sequence/sequenceoutputview.cpp @@ -0,0 +1,103 @@ +#include "sequenceoutputview.h" + +#include +#include +#include + +SequenceOutputView::SequenceOutputView(QWidget *parent) : QPlainTextEdit(parent) +{ + lineNumberArea = new SOVNumberPanel(this); + m_curdoc = nullptr; + setFont(QFont("Courier",12)); + connect(this, &SequenceOutputView::blockCountChanged, this, &SequenceOutputView::updateLineNumberAreaWidth); + connect(this, &SequenceOutputView::updateRequest, this, &SequenceOutputView::updateLineNumberArea); + connect(this, &SequenceOutputView::cursorPositionChanged, this, &SequenceOutputView::highlightCurrentLine); + + updateLineNumberAreaWidth(0); + highlightCurrentLine(); + + auto hl = new TestHighlighter(document()); +} + +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()); + int bottom = top + qRound(blockBoundingRect(block).height()); + 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); + } + + block = block.next(); + top = bottom; + bottom = top + qRound(blockBoundingRect(block).height()); + ++blockNumber; + } +} + +int SequenceOutputView::lineNumberAreaWidth() const +{ + int digits = 1; + int max = qMax(1, blockCount()); + while (max >= 10) { + max /= 10; + ++digits; + } + + digits = qMax(digits,5); // Reserve at least 5 digits worth. More if needed. + + int space = 13 + fontMetrics().horizontalAdvance(QLatin1Char('9')) * digits; + + return space; +} + +void SequenceOutputView::resizeEvent(QResizeEvent *event) +{ + QPlainTextEdit::resizeEvent(event); + + QRect cr = contentsRect(); + lineNumberArea->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height())); + +} + + +void SequenceOutputView::updateLineNumberAreaWidth(int /*newBlockCount*/) +{ + setViewportMargins(lineNumberAreaWidth(), 0, 0, 0); +} + +void SequenceOutputView::highlightCurrentLine() +{ + QList extraSelections; + + if (!isReadOnly()) { + QTextEdit::ExtraSelection selection; + + QColor lineColor = QColor(0x303030); + + selection.format.setBackground(lineColor); + selection.format.setProperty(QTextFormat::FullWidthSelection, true); + selection.cursor = textCursor(); + selection.cursor.clearSelection(); + extraSelections.append(selection); + } + + setExtraSelections(extraSelections); +} + +void SequenceOutputView::updateLineNumberArea(const QRect &rect, int dy) +{ + if (dy) + lineNumberArea->scroll(0, dy); + else + lineNumberArea->update(0, rect.y(), lineNumberArea->width(), rect.height()); + + if (rect.contains(viewport()->rect())) + updateLineNumberAreaWidth(0);} diff --git a/src/sequence/sequenceoutputview.h b/src/sequence/sequenceoutputview.h new file mode 100644 index 0000000..d92d901 --- /dev/null +++ b/src/sequence/sequenceoutputview.h @@ -0,0 +1,114 @@ +#ifndef SEQUENCEOUTPUTVIEW_H +#define SEQUENCEOUTPUTVIEW_H + +#include +#include +#include +#include +#include + +class SOVNumberPanel; + + +class SequenceOutputView : public QPlainTextEdit +{ + Q_OBJECT +public: + explicit SequenceOutputView(QWidget *parent = nullptr); + + void lineNumberAreaPaintEvent(QPaintEvent *event); + int lineNumberAreaWidth() const; + +protected: + void resizeEvent(QResizeEvent *event) override; + + +private slots: + void updateLineNumberAreaWidth(int newBlockCount); + void highlightCurrentLine(); + void updateLineNumberArea(const QRect &rect, int dy); + +private: + SOVNumberPanel *lineNumberArea; + QTextDocument *m_curdoc; +}; + + +class SOVNumberPanel : public QWidget +{ + Q_OBJECT +public: + explicit SOVNumberPanel(SequenceOutputView *sov) : QWidget(sov), m_sov(sov) { } + QSize sizeHint() const override { return QSize(m_sov->lineNumberAreaWidth(), 0); } + +protected: + void paintEvent(QPaintEvent *event) override { + m_sov->lineNumberAreaPaintEvent(event);} + SequenceOutputView *m_sov; +}; + + +class TestHighlighter : public QSyntaxHighlighter +{ +public: + explicit TestHighlighter(QTextDocument *doc):QSyntaxHighlighter(doc) { } + void highlightBlock(const QString &text) { + for (int idx = 0; idx< text.length(); idx++) + { + QTextCharFormat format; + // auto block = currentBlock(); + format.setForeground(QColor("green")); + setFormat(0,5,format); + QTextCharFormat format2; + format2.setForeground(QColor("yellow")); + setFormat(5,10,format2); + QTextCharFormat format3; + format3.setForeground(QColor("magenta")); + setFormat(15,text.length()-15,format3); + QRegularExpression re("'.'"); + auto match = re.match(text); + if (match.hasMatch()) + { + auto y = match.capturedStart(); + y++; + + QRegularExpression re2("; *\\d+"); + auto m = re2.match(text); + auto x = match.capturedStart(); + x++; + + QTextCharFormat atformat; + if (m.hasMatch()) + { + auto txt = m.captured().right(m.capturedLength()-2); + int num = txt.toInt(); + +// qDebug("Number: %s %d", qPrintable(txt), num); + + if (num > 0x7f) + { + atformat.setForeground(QColor("white")); + atformat.setBackground(QColor("black")); + } + else + { + atformat.setForeground(QColor("black")); + atformat.setBackground(QColor("white")); + } + + } + else + { + atformat.setForeground(QColor("white")); + atformat.setForeground(QColor("black")); + } + + atformat.setFontFamily("Print Char 21"); + setFormat(y,1,atformat); + } + } + } +}; + + +#endif // SEQUENCEOUTPUTVIEW_H diff --git a/src/sequence/sequencetool.cpp b/src/sequence/sequencetool.cpp index ac7a46d..21099e1 100644 --- a/src/sequence/sequencetool.cpp +++ b/src/sequence/sequencetool.cpp @@ -1,23 +1,23 @@ -#include "sequencetool.h" - -SequenceTool::SequenceTool(SequenceEvent *event, QWidget *parent) : QWidget(parent) -{ - setSequenceEvent(event); -} - -SequenceTool::~SequenceTool() -{ - -} - -void SequenceTool::setSequenceEvent(SequenceEvent *event) -{ - m_seqevent = event; - - -} - -void SequenceTool::mousePressEvent(QMouseEvent *event) -{ - -} +#include "sequencetool.h" + +SequenceTool::SequenceTool(SequenceEvent *event, QWidget *parent) : QWidget(parent) +{ + setSequenceEvent(event); +} + +SequenceTool::~SequenceTool() +{ + +} + +void SequenceTool::setSequenceEvent(SequenceEvent *event) +{ + m_seqevent = event; + + +} + +void SequenceTool::mousePressEvent(QMouseEvent *event) +{ + +} diff --git a/src/sequence/sequencetool.h b/src/sequence/sequencetool.h index 4068fe4..9db12a8 100644 --- a/src/sequence/sequencetool.h +++ b/src/sequence/sequencetool.h @@ -1,33 +1,30 @@ -#ifndef SEQUENCETOOL_H -#define SEQUENCETOOL_H - -#include "sequenceevent.h" - -#include - -class SequenceTool : public QWidget -{ - Q_OBJECT -public: - explicit SequenceTool(SequenceEvent *event = nullptr, QWidget *parent = nullptr); - virtual ~SequenceTool(); - - virtual void setSequenceEvent(SequenceEvent *event); - - virtual void setCategory(QString category) { m_category = category; } - virtual QString category() const { return m_category; } - - -signals: - - -protected: - void mousePressEvent(QMouseEvent *event); - -protected: - SequenceEvent *m_seqevent; - QString m_category; - -}; - -#endif // SEQUENCETOOL_H +#ifndef SEQUENCETOOL_H +#define SEQUENCETOOL_H + +#include "sequenceevent.h" + +#include + +class SequenceTool : public QWidget +{ + Q_OBJECT +public: + explicit SequenceTool(SequenceEvent *event = nullptr, QWidget *parent = nullptr); + virtual ~SequenceTool(); + + virtual void setSequenceEvent(SequenceEvent *event); + + virtual void setCategory(QString category) { m_category = category; } + virtual QString category() const { return m_category; } + + +protected: + void mousePressEvent(QMouseEvent *event); + +protected: + SequenceEvent *m_seqevent; + QString m_category; + +}; + +#endif // SEQUENCETOOL_H diff --git a/src/sequence/sequencetoolbox.cpp b/src/sequence/sequencetoolbox.cpp index fe0812a..4c86bbd 100644 --- a/src/sequence/sequencetoolbox.cpp +++ b/src/sequence/sequencetoolbox.cpp @@ -1,84 +1,84 @@ -#include "sequencetoolbox.h" - -SequenceToolBox::SequenceToolBox(QWidget *parent) : QWidget(parent) -{ - m_layout = new QVBoxLayout(this); -} - -void SequenceToolBox::addTool(SequenceTool *tool) -{ - QString catname = tool->category(); - if (!m_category.contains(catname)) - { - QList list; - list.append(tool); - m_categories.append(catname); - m_category.insert(catname, list); - } - else - { - m_category[catname].append(tool); - } - - int count = m_layout->count(); - for (int idx = 0; idx < count; idx++) - { - auto item = m_layout->itemAt(0); - m_layout->removeItem(item); - } - - foreach (QString cat, m_categories) - { - m_layout->addWidget(getHeader(cat)); - auto catitems = m_category[cat]; - bool headerchecked = m_headers[cat]->isChecked(); - foreach (auto item, catitems) - { - m_layout->addWidget(item); - item->setVisible(headerchecked); - }; - } - m_layout->addStretch(); -} - -void SequenceToolBox::updateItems() -{ - foreach (auto item, m_layout->children()) - { - auto widget = qobject_cast(item); - if (widget) - { - widget->setVisible(m_headers[widget->category()]->isChecked()); - } - } -} - -QList SequenceToolBox::toolsInCategory(QString category) -{ - if (m_category.contains(category)) - { - return m_category[category]; - } - else - { - return QList(); - } -} - -SequenceToolBoxHeader *SequenceToolBox::getHeader(const QString &text) -{ - SequenceToolBoxHeader *header; - - if (m_headers.contains(text)) - { - header = m_headers[text]; - } - else - { - header = new SequenceToolBoxHeader(text); - m_headers.insert(text,header); - connect(header,SIGNAL(toggled(bool)), - this, SLOT(updateItems())); - } - return header; -} +#include "sequencetoolbox.h" + +SequenceToolBox::SequenceToolBox(QWidget *parent) : QWidget(parent) +{ + m_layout = new QVBoxLayout(this); +} + +void SequenceToolBox::addTool(SequenceTool *tool) +{ + QString catname = tool->category(); + if (!m_category.contains(catname)) + { + QList list; + list.append(tool); + m_categories.append(catname); + m_category.insert(catname, list); + } + else + { + m_category[catname].append(tool); + } + + int count = m_layout->count(); + for (int idx = 0; idx < count; idx++) + { + auto item = m_layout->itemAt(0); + m_layout->removeItem(item); + } + + foreach (QString cat, m_categories) + { + m_layout->addWidget(getHeader(cat)); + auto catitems = m_category[cat]; + bool headerchecked = m_headers[cat]->isChecked(); + foreach (auto item, catitems) + { + m_layout->addWidget(item); + item->setVisible(headerchecked); + }; + } + m_layout->addStretch(); +} + +void SequenceToolBox::updateItems() +{ + foreach (auto item, m_layout->children()) + { + auto widget = qobject_cast(item); + if (widget) + { + widget->setVisible(m_headers[widget->category()]->isChecked()); + } + } +} + +QList SequenceToolBox::toolsInCategory(QString category) +{ + if (m_category.contains(category)) + { + return m_category[category]; + } + else + { + return QList(); + } +} + +SequenceToolBoxHeader *SequenceToolBox::getHeader(const QString &text) +{ + SequenceToolBoxHeader *header; + + if (m_headers.contains(text)) + { + header = m_headers[text]; + } + else + { + header = new SequenceToolBoxHeader(text); + m_headers.insert(text,header); + connect(header,SIGNAL(toggled(bool)), + this, SLOT(updateItems())); + } + return header; +} diff --git a/src/sequence/sequencetoolbox.h b/src/sequence/sequencetoolbox.h index e1fd249..c233a32 100644 --- a/src/sequence/sequencetoolbox.h +++ b/src/sequence/sequencetoolbox.h @@ -1,47 +1,48 @@ -#ifndef SEQUENCETOOLBOX_H -#define SEQUENCETOOLBOX_H - -#include "sequencetool.h" - -#include -#include -#include -#include -#include -#include - -class SequenceToolBoxHeader : public QCheckBox -{ - Q_OBJECT -public: - SequenceToolBoxHeader(const QString &text, - QWidget *parent = 0) : QCheckBox(text,parent) - { - setCheckable(true); - setChecked(true); - } -}; - -class SequenceToolBox : public QWidget -{ - Q_OBJECT - -public: - explicit SequenceToolBox(QWidget *parent = nullptr); - void addTool(SequenceTool *tool); - -public slots: - void updateItems(); - -protected: - QList toolsInCategory(QString category); - SequenceToolBoxHeader *getHeader(const QString &text); - -protected: - QVBoxLayout *m_layout; - QStringList m_categories; - QMap > m_category; - QMap m_headers; -}; - -#endif // SEQUENCETOOLBOX_H +#ifndef SEQUENCETOOLBOX_H +#define SEQUENCETOOLBOX_H + +#include "sequencetool.h" + +#include +#include +#include +#include +#include +#include + +class SequenceToolBoxHeader : public QCheckBox +{ + Q_OBJECT + +public: + SequenceToolBoxHeader(const QString &text, + QWidget *parent = 0) : QCheckBox(text,parent) + { + setCheckable(true); + setChecked(true); + } +}; + +class SequenceToolBox : public QWidget +{ + Q_OBJECT + +public: + explicit SequenceToolBox(QWidget *parent = nullptr); + void addTool(SequenceTool *tool); + +public slots: + void updateItems(); + +protected: + QList toolsInCategory(QString category); + SequenceToolBoxHeader *getHeader(const QString &text); + +protected: + QVBoxLayout *m_layout; + QStringList m_categories; + QMap > m_category; + QMap m_headers; +}; + +#endif // SEQUENCETOOLBOX_H diff --git a/src/sequence/sequenceviewer.cpp b/src/sequence/sequenceviewer.cpp new file mode 100644 index 0000000..4b82354 --- /dev/null +++ b/src/sequence/sequenceviewer.cpp @@ -0,0 +1,15 @@ +#include "sequenceviewer.h" +#include "ui_sequenceviewer.h" + +SequenceViewer::SequenceViewer(QWidget *parent) : + QWidget(parent), + ui(new Ui::SequenceViewer) +{ + ui->setupUi(this); + +} + +SequenceViewer::~SequenceViewer() +{ + delete ui; +} diff --git a/src/sequence/sequenceviewer.h b/src/sequence/sequenceviewer.h new file mode 100644 index 0000000..2532d06 --- /dev/null +++ b/src/sequence/sequenceviewer.h @@ -0,0 +1,22 @@ +#ifndef SEQUENCEVIEWER_H +#define SEQUENCEVIEWER_H + +#include + +namespace Ui { +class SequenceViewer; +} + +class SequenceViewer : public QWidget +{ + Q_OBJECT + +public: + explicit SequenceViewer(QWidget *parent = nullptr); + ~SequenceViewer(); + +private: + Ui::SequenceViewer *ui; +}; + +#endif // SEQUENCEVIEWER_H diff --git a/src/sequence/sequenceviewer.ui b/src/sequence/sequenceviewer.ui new file mode 100644 index 0000000..7ea428b --- /dev/null +++ b/src/sequence/sequenceviewer.ui @@ -0,0 +1,92 @@ + + + SequenceViewer + + + + 0 + 0 + 747 + 452 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + background:black + + + + + + 50 + 100 + + + + Qt::Vertical + + + + + 50 + 50 + + + + background:lightgrey + + + + + + 50 + 50 + + + + background:lightgray + + + + + + + + + + SequenceOutputView + QWidget +
sequenceoutputview.h
+ 1 +
+ + SequenceEventListWidget + QWidget +
sequenceeventlistwidget.h
+ 1 +
+
+ + +
diff --git a/src/sequence/textblockuserdata.cpp b/src/sequence/textblockuserdata.cpp new file mode 100644 index 0000000..ffc6d9b --- /dev/null +++ b/src/sequence/textblockuserdata.cpp @@ -0,0 +1,7 @@ +#include "textblockuserdata.h" + +TextBlockUserData::TextBlockUserData() +{ + +} + diff --git a/src/sequence/textblockuserdata.h b/src/sequence/textblockuserdata.h new file mode 100644 index 0000000..1fca917 --- /dev/null +++ b/src/sequence/textblockuserdata.h @@ -0,0 +1,16 @@ +#ifndef TEXTBLOCKUSERDATA_H +#define TEXTBLOCKUSERDATA_H + +#include +#include + +class TextBlockUserData : public QTextBlockUserData +{ +public: + TextBlockUserData(); + virtual ~TextBlockUserData() { } + + virtual void applySyntaxHighlighting(QSyntaxHighlighter &highlighter) = 0; +}; + +#endif // TEXTBLOCKUSERDATA_H diff --git a/src/ui/central/centralappwindow.cpp b/src/ui/central/centralappwindow.cpp new file mode 100644 index 0000000..ba3f198 --- /dev/null +++ b/src/ui/central/centralappwindow.cpp @@ -0,0 +1,74 @@ +#include "centralappwindow.h" +#include "sequenceviewer.h" + +#include +#include +#include +#include +#include +#include +#include + +CentralAppWindow::CentralAppWindow(QWidget *parent) : QMainWindow(parent) +{ + createActions(); + initMenuBar(); + initToolBars(); + initDockWidgets(); + initStatusBar(); + + setCentralWidget(new SequenceViewer()); +} + +void CentralAppWindow::createActions() +{ + m_quitAction = new QAction(QIcon(":/images/redblob.png"),tr("E&xit")); + connect(m_quitAction, &QAction::triggered, + qApp, &QApplication::quit); +} + +void CentralAppWindow::initMenuBar() +{ + auto filemenu = menuBar()->addMenu(tr("&File")); + filemenu->addAction(m_quitAction); + +} + +void CentralAppWindow::initStatusBar() +{ + +} + +void CentralAppWindow::initToolBars() +{ + m_mainToolBar = new MainAppToolbar(this); + m_mainToolBar->setIconSize(QSize(64,64)); + m_mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + m_mainToolBar->addAction(m_quitAction); + m_mainToolBar->setFont(QFont("Ariel",14)); + addToolBar(Qt::LeftToolBarArea, m_mainToolBar); + +} + +void CentralAppWindow::initDockWidgets() +{ + QDockWidget *container = new QDockWidget(this); + 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"); + QSplitter *split = new QSplitter(container); + split->setOrientation(Qt::Vertical); + split->addWidget(m_directory_area); + split->addWidget(m_project_area); + container->setWidget(split); + + addDockWidget(Qt::LeftDockWidgetArea,container); + + +} diff --git a/src/ui/central/centralappwindow.h b/src/ui/central/centralappwindow.h new file mode 100644 index 0000000..611354b --- /dev/null +++ b/src/ui/central/centralappwindow.h @@ -0,0 +1,32 @@ +#ifndef CENTRALAPPWINDOW_H +#define CENTRALAPPWINDOW_H + +#include + +#include "mainapptoolbar.h" + +class QAction; + +class CentralAppWindow : public QMainWindow +{ + Q_OBJECT +public: + explicit CentralAppWindow(QWidget *parent = nullptr); + +private: + void createActions(); + void initMenuBar(); + void initStatusBar(); + void initToolBars(); + void initDockWidgets(); + +private: + QAction *m_quitAction; + + MainAppToolbar *m_mainToolBar; + QWidget *m_directory_area; + QWidget *m_project_area; + +}; + +#endif // CENTRALAPPWINDOW_H diff --git a/src/ui/central/mainapptoolbar.cpp b/src/ui/central/mainapptoolbar.cpp new file mode 100644 index 0000000..48a613e --- /dev/null +++ b/src/ui/central/mainapptoolbar.cpp @@ -0,0 +1,8 @@ +#include "mainapptoolbar.h" + +MainAppToolbar::MainAppToolbar(QWidget *parent) : QToolBar(parent) +{ + setStyleSheet("background: #4f4f4f; color: #ffffff; font-size: 12pt"); + setMovable(false); + setFloatable(false); +} diff --git a/src/ui/central/mainapptoolbar.h b/src/ui/central/mainapptoolbar.h new file mode 100644 index 0000000..da9db4f --- /dev/null +++ b/src/ui/central/mainapptoolbar.h @@ -0,0 +1,13 @@ +#ifndef MAINAPPTOOLBAR_H +#define MAINAPPTOOLBAR_H + +#include + +class MainAppToolbar : public QToolBar +{ + Q_OBJECT +public: + MainAppToolbar(QWidget *parent = nullptr); +}; + +#endif // MAINAPPTOOLBAR_H diff --git a/src/ui/startupdialog.cpp b/src/ui/startupdialog.cpp index c95c857..fae3861 100644 --- a/src/ui/startupdialog.cpp +++ b/src/ui/startupdialog.cpp @@ -4,6 +4,7 @@ #include "diskexplorer/DiskExplorer.h" #include +#include "centralappwindow.h" StartupDialog::StartupDialog(QWidget *parent) : QDialog(parent), @@ -22,9 +23,13 @@ void StartupDialog::on_exploreContentsBtn_clicked() { DiskExplorer *w = new DiskExplorer(this); w->showLoadDialog(false); +} - +void StartupDialog::on_newStuffButton_clicked() +{ + CentralAppWindow *w = new CentralAppWindow(this); + w->showMaximized(); } void StartupDialog::on_exploreDiskImageBtn_clicked() diff --git a/src/ui/startupdialog.h b/src/ui/startupdialog.h index 8c0c5bc..569edfe 100644 --- a/src/ui/startupdialog.h +++ b/src/ui/startupdialog.h @@ -29,6 +29,8 @@ private slots: void on_infoBtn_clicked(); + void on_newStuffButton_clicked(); + private: Ui::StartupDialog *ui; diff --git a/src/ui/startupdialog.ui b/src/ui/startupdialog.ui index 694c1ea..ef44653 100644 --- a/src/ui/startupdialog.ui +++ b/src/ui/startupdialog.ui @@ -7,7 +7,7 @@ 0 0 312 - 197 + 231 @@ -29,6 +29,13 @@ + + + + New Display Stuff + + + @@ -100,7 +107,7 @@ - V. 0.0.3pr + V. 0.2.0pr