# Qt sources
-set (CO_SOURCES CodeWidget.cxx HexWidget.cxx)
-set (CO_HEADERS CodeWidget.hxx HexWidget.hxx)
+set (CO_SOURCES CodeWidget.cxx HexWidget.cxx HexDelegate.cxx Latin1Delegate.cxx)
+set (CO_HEADERS CodeWidget.hxx HexWidget.hxx HexDelegate.hxx Latin1Delegate.hxx)
set (CO_UI_FILES HexWidget.ui)
set (CO_RES_FILES Resources.qrc)
set (CO_TS_FILES i18n_english.ts i18n_french.ts i18n_german.ts)
--- /dev/null
+#include <QLineEdit>
+#include "HexDelegate.hxx"
+
+// --- internal constants ---
+
+const QChar Null('0');
+const QRegExpValidator VLatin1(QRegExp("\\H\\H"));
+
+// --- constructors and deconstructors ---
+
+HexDelegate::HexDelegate(QObject *parent)
+: QStyledItemDelegate(parent)
+{
+}
+
+HexDelegate::~HexDelegate()
+{
+}
+
+// --- public methods ---
+
+QWidget *HexDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem& /*option*/,
+ const QModelIndex& /*index*/) const
+{
+ QLineEdit *editor = new QLineEdit(parent);
+
+ editor->setValidator(&VLatin1);
+ editor->setFrame(false);
+
+ return editor;
+}
+
+void HexDelegate::setEditorData(QWidget *editor, const QModelIndex& index) const
+{
+ QLineEdit *ed = static_cast<QLineEdit *>(editor);
+ const qint32 chr = index.model()->data(index, Qt::EditRole).toInt();
+
+ ed->setText(QString("%1").arg(chr, 2, 16, Null));
+}
+
+void HexDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const
+{
+ QLineEdit *ed = static_cast<QLineEdit *>(editor);
+
+ model->setData(index, ed->text(), Qt::EditRole);
+}
+
+void HexDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem& option,
+ const QModelIndex& /*index*/) const
+{
+ editor->setGeometry(option.rect);
+}
--- /dev/null
+#pragma once
+
+#include <QStyledItemDelegate>
+
+class HexDelegate : public QStyledItemDelegate {
+ Q_OBJECT
+public:
+ explicit HexDelegate(QObject *parent = 0);
+ virtual ~HexDelegate();
+
+ virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
+ override;
+ virtual void setEditorData(QWidget *editor, const QModelIndex& index) const override;
+ virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const override;
+
+ virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem& option, const QModelIndex& index)
+ const override;
+};
--- /dev/null
+#include <QLineEdit>
+#include "Latin1Delegate.hxx"
+
+// --- internal constants ---
+
+const QRegExpValidator VLatin1(QRegExp("\\S"));
+
+// --- constructors and deconstructors ---
+
+Latin1Delegate::Latin1Delegate(QObject *parent)
+: QStyledItemDelegate(parent)
+{
+}
+
+Latin1Delegate::~Latin1Delegate()
+{
+}
+
+// --- public methods ---
+
+QWidget *Latin1Delegate::createEditor(QWidget *parent, const QStyleOptionViewItem& /*option*/,
+ const QModelIndex& /*index*/) const
+{
+ QLineEdit *editor = new QLineEdit(parent);
+
+ editor->setValidator(&VLatin1);
+ editor->setFrame(false);
+
+ return editor;
+}
+
+void Latin1Delegate::setEditorData(QWidget *editor, const QModelIndex& index) const
+{
+ QLineEdit *ed = static_cast<QLineEdit *>(editor);
+ const qint32 chr = index.model()->data(index, Qt::EditRole).toInt();
+
+ ed->setText(QChar(chr));
+}
+
+void Latin1Delegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const
+{
+ QLineEdit *ed = static_cast<QLineEdit *>(editor);
+
+ model->setData(index, ed->text(), Qt::EditRole);
+}
+
+void Latin1Delegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem& option,
+ const QModelIndex& /*index*/) const
+{
+ editor->setGeometry(option.rect);
+}
--- /dev/null
+#pragma once
+
+#include <QStyledItemDelegate>
+
+class Latin1Delegate : public QStyledItemDelegate {
+ Q_OBJECT
+public:
+ explicit Latin1Delegate(QObject *parent = 0);
+ virtual ~Latin1Delegate();
+
+ virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
+ override;
+ virtual void setEditorData(QWidget *editor, const QModelIndex& index) const override;
+ virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex& index) const override;
+
+ virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem& option, const QModelIndex& index)
+ const override;
+};