- added a Latin1 and a hex delegator (we need them for a better hex widget approach)
authorAkiko <akiko@linux-addicted.net>
Tue, 15 Oct 2013 06:00:30 +0000 (08:00 +0200)
committerAkiko <akiko@linux-addicted.net>
Tue, 15 Oct 2013 06:00:30 +0000 (08:00 +0200)
- updated makefiles

common/CMakeLists.txt
common/HexDelegate.cxx [new file with mode: 0644]
common/HexDelegate.hxx [new file with mode: 0644]
common/Latin1Delegate.cxx [new file with mode: 0644]
common/Latin1Delegate.hxx [new file with mode: 0644]

index dc7b864..d5edad6 100644 (file)
@@ -1,6 +1,6 @@
 # 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)
diff --git a/common/HexDelegate.cxx b/common/HexDelegate.cxx
new file mode 100644 (file)
index 0000000..d6f41fa
--- /dev/null
@@ -0,0 +1,52 @@
+#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);
+}
diff --git a/common/HexDelegate.hxx b/common/HexDelegate.hxx
new file mode 100644 (file)
index 0000000..73fdd59
--- /dev/null
@@ -0,0 +1,18 @@
+#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;
+};
diff --git a/common/Latin1Delegate.cxx b/common/Latin1Delegate.cxx
new file mode 100644 (file)
index 0000000..0fd7611
--- /dev/null
@@ -0,0 +1,51 @@
+#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);
+}
diff --git a/common/Latin1Delegate.hxx b/common/Latin1Delegate.hxx
new file mode 100644 (file)
index 0000000..9385619
--- /dev/null
@@ -0,0 +1,18 @@
+#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;
+};