Skip to content

Commit

Permalink
feat: add CP437 as optional display format in ASCII display for #20
Browse files Browse the repository at this point in the history
  • Loading branch information
hello-adam committed Mar 12, 2020
1 parent 362f27b commit 50c3d50
Show file tree
Hide file tree
Showing 12 changed files with 437 additions and 4 deletions.
11 changes: 8 additions & 3 deletions src/hobbits-plugins/displays/AsciiView/AsciiView.pro
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,14 @@ DEFINES += QT_DEPRECATED_WARNINGS
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

SOURCES += asciiview.cpp asciiviewwidget.cpp asciiviewcontrols.cpp

HEADERS += asciiview.h asciiviewwidget.h asciiviewcontrols.h
SOURCES += asciiview.cpp asciiviewwidget.cpp asciiviewcontrols.cpp \
ascii.cpp \
cp437.cpp

HEADERS += asciiview.h asciiviewwidget.h asciiviewcontrols.h \
ascii.h \
charmaker.h \
cp437.h

FORMS += asciiviewcontrols.ui

Expand Down
34 changes: 34 additions & 0 deletions src/hobbits-plugins/displays/AsciiView/ascii.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#include "ascii.h"

Ascii::Ascii()
{

}

QString Ascii::getName() {
return "ASCII";
}

QString Ascii::getDisplayChars(Frame frame, int offset) {
QString frameString = "";
if (offset + 7 >= frame.size()) {
// partial char
frameString += '.';
}
else {
char byte = 0;
for (int bit = 0; bit < 8; bit++) {
byte <<= 1;
if (frame.at(offset + bit)) {
byte |= 0x01;
}
}
if (isprint(byte)) {
frameString += byte;
}
else {
frameString += '.';
}
}
return frameString;
}
14 changes: 14 additions & 0 deletions src/hobbits-plugins/displays/AsciiView/ascii.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#ifndef ASCII_H
#define ASCII_H

#include "charmaker.h"

class Ascii : public CharMaker
{
public:
Ascii();
QString getName() override;
QString getDisplayChars(Frame frame, int offset) override;
};

#endif // ASCII_H
11 changes: 11 additions & 0 deletions src/hobbits-plugins/displays/AsciiView/asciiview.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
#include "asciiview.h"
#include "charmaker.h"
#include "ascii.h"
#include "cp437.h"

AsciiView::AsciiView() :
m_displayWidget(nullptr),
Expand Down Expand Up @@ -35,8 +38,16 @@ void AsciiView::initialize(QSharedPointer<DisplayHandle> displayHandle)
m_displayWidget = new AsciiViewWidget(displayHandle, this);
m_controlsWidget = new AsciiViewControls();

QList<QSharedPointer<CharMaker>> charMakers;
charMakers.append(QSharedPointer<CharMaker>(new Ascii()));
charMakers.append(QSharedPointer<CharMaker>(new Cp437()));

m_controlsWidget->setCharMakers(charMakers);
m_displayWidget->setCharMakers(charMakers);

connect(m_controlsWidget, SIGNAL(fontSizeChanged(int)), m_displayWidget, SLOT(setFontSize(int)));
connect(m_controlsWidget, SIGNAL(columnGroupingChanged(int)), m_displayWidget, SLOT(setColumnGrouping(int)));
connect(m_controlsWidget, SIGNAL(showHeadersChanged(bool)), m_displayWidget, SLOT(setShowHeaders(bool)));
connect(m_controlsWidget, SIGNAL(charMakerChanged(QString)), m_displayWidget, SLOT(setCurrCharMaker(QString)));
}
}
13 changes: 13 additions & 0 deletions src/hobbits-plugins/displays/AsciiView/asciiviewcontrols.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,20 @@ AsciiViewControls::AsciiViewControls() :
connect(ui->hs_fontSize, SIGNAL(valueChanged(int)), this, SIGNAL(fontSizeChanged(int)));
}


void AsciiViewControls::setCharMakers(QList<QSharedPointer<CharMaker>> charMakers) {
ui->cb_charMaker->clear();
for (auto maker : charMakers) {
ui->cb_charMaker->addItem(maker->getName());
}
}

void AsciiViewControls::on_cb_showHeaders_stateChanged(int state)
{
emit showHeadersChanged(state != Qt::Unchecked);
}

void AsciiViewControls::on_cb_charMaker_currentTextChanged(const QString &charMakerName)
{
emit charMakerChanged(charMakerName);
}
6 changes: 6 additions & 0 deletions src/hobbits-plugins/displays/AsciiView/asciiviewcontrols.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define ASCIIVIEWCONTROLS_H

#include <QWidget>
#include "charmaker.h"

namespace Ui
{
Expand All @@ -15,14 +16,19 @@ class AsciiViewControls : public QWidget
public:
AsciiViewControls();

void setCharMakers(QList<QSharedPointer<CharMaker>> charMakers);

signals:
void fontSizeChanged(int);
void columnGroupingChanged(int);
void showHeadersChanged(bool);
void charMakerChanged(QString);

private slots:
void on_cb_showHeaders_stateChanged(int state);

void on_cb_charMaker_currentTextChanged(const QString &charMakerName);

private:
Ui::AsciiViewControls *ui;
};
Expand Down
5 changes: 4 additions & 1 deletion src/hobbits-plugins/displays/AsciiView/asciiviewcontrols.ui
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>581</width>
<width>724</width>
<height>56</height>
</rect>
</property>
Expand Down Expand Up @@ -81,6 +81,9 @@
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="cb_charMaker"/>
</item>
</layout>
</item>
</layout>
Expand Down
20 changes: 20 additions & 0 deletions src/hobbits-plugins/displays/AsciiView/asciiviewwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ AsciiViewWidget::AsciiViewWidget(QSharedPointer<DisplayHandle> displayHandle, Di

QString AsciiViewWidget::getDisplayChars(Frame frame, int offset)
{
if (!m_currCharMaker.isNull()) {
return m_currCharMaker->getDisplayChars(frame, offset);
}
QString frameString = "";
if (offset + 7 >= frame.size()) {
// partial char
Expand Down Expand Up @@ -38,3 +41,20 @@ int AsciiViewWidget::bitsPerChar()
{
return 8;
}


void AsciiViewWidget::setCharMakers(QList<QSharedPointer<CharMaker>> charMakers) {
m_charMakers.clear();
for (auto maker : charMakers) {
m_charMakers.insert(maker->getName(), maker);
}

if (!charMakers.isEmpty()) {
setCurrCharMaker(charMakers.first()->getName());
}
}

void AsciiViewWidget::setCurrCharMaker(QString charMaker) {
m_currCharMaker = m_charMakers.value(charMaker);
repaint();
}
9 changes: 9 additions & 0 deletions src/hobbits-plugins/displays/AsciiView/asciiviewwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define ASCIIVIEWWIDGET_H

#include "displaybasetext.h"
#include "charmaker.h"

class AsciiViewWidget : public DisplayBaseText
{
Expand All @@ -12,6 +13,14 @@ class AsciiViewWidget : public DisplayBaseText

QString getDisplayChars(Frame frame, int offset) override;
int bitsPerChar() override;
void setCharMakers(QList<QSharedPointer<CharMaker>>);

public slots:
void setCurrCharMaker(QString charMaker);

private:
QSharedPointer<CharMaker> m_currCharMaker;
QMap<QString, QSharedPointer<CharMaker>> m_charMakers;

};

Expand Down
16 changes: 16 additions & 0 deletions src/hobbits-plugins/displays/AsciiView/charmaker.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#ifndef CHARMAKER_H
#define CHARMAKER_H

#include "frame.h"
#include <QString>

class CharMaker {
public:
virtual ~CharMaker()
{
}
virtual QString getName() = 0;
virtual QString getDisplayChars(Frame frame, int offset) = 0;
};

#endif // CHARMAKER_H
Loading

0 comments on commit 50c3d50

Please sign in to comment.