From: Akiko Date: Tue, 15 Oct 2013 06:00:30 +0000 (+0200) Subject: - added a Latin1 and a hex delegator (we need them for a better hex widget approach) X-Git-Url: http://community.linux-addicted.net/gitweb/?a=commitdiff_plain;h=cbd44129874363a3a99afcf672e651319a3a72c4;p=qtinns.git - added a Latin1 and a hex delegator (we need them for a better hex widget approach) - updated makefiles --- diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index dc7b864..d5edad6 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -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 index 0000000..d6f41fa --- /dev/null +++ b/common/HexDelegate.cxx @@ -0,0 +1,52 @@ +#include +#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(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(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 index 0000000..73fdd59 --- /dev/null +++ b/common/HexDelegate.hxx @@ -0,0 +1,18 @@ +#pragma once + +#include + +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 index 0000000..0fd7611 --- /dev/null +++ b/common/Latin1Delegate.cxx @@ -0,0 +1,51 @@ +#include +#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(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(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 index 0000000..9385619 --- /dev/null +++ b/common/Latin1Delegate.hxx @@ -0,0 +1,18 @@ +#pragma once + +#include + +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; +};