修改波列显示效果,显示颜色对应旧版logplus 添加波形部分属性修改,左刻度,右刻度,显示名称,显示单位字体属性,色板,变密度颜色级数等属性 修改波形属性修改完后保存文件,读取保存的属性显示效果
443 lines
13 KiB
C++
443 lines
13 KiB
C++
|
|
#include <QObject>
|
|
// #include <QtGui/QAbstractItemView>
|
|
#include <QPen>
|
|
#include <QPainter>
|
|
#include <qtpropertybrowser.h>
|
|
#include "ColorSchemeComboBox.h"
|
|
#include "QtColorSchemeComboBox.h"
|
|
// #include "QtColorTableData.h"
|
|
template <class Value, class PrivateData>
|
|
static Value getData(const QMap<const QtProperty *, PrivateData> &propertyMap,
|
|
Value PrivateData::*data,
|
|
const QtProperty *property, const Value &defaultValue = Value())
|
|
{
|
|
typedef QMap<const QtProperty *, PrivateData> PropertyToData;
|
|
typedef PropertyToData::const_iterator PropertyToDataConstIterator;
|
|
const PropertyToDataConstIterator it = propertyMap.constFind(property);
|
|
if (it == propertyMap.constEnd())
|
|
return defaultValue;
|
|
return it.value().*data;
|
|
}
|
|
|
|
template <class Value, class PrivateData>
|
|
static Value getValue(const QMap<const QtProperty *, PrivateData> &propertyMap,
|
|
const QtProperty *property, const Value &defaultValue = Value())
|
|
{
|
|
return getData<Value>(propertyMap, &PrivateData::val, property, defaultValue);
|
|
}
|
|
|
|
QtColorSchemeComboBoxFactory::QtColorSchemeComboBoxFactory(QObject *parent)
|
|
: QtAbstractEditorFactory<QtColorSchemeComboBoxPropertyManager>(parent), d_ptr(new QtColorSchemeComboBoxFactoryPrivate())
|
|
{
|
|
d_ptr->q_ptr = this;
|
|
|
|
}
|
|
|
|
/*!
|
|
Destroys this factory, and all the widgets it has created.
|
|
*/
|
|
QtColorSchemeComboBoxFactory::~QtColorSchemeComboBoxFactory()
|
|
{
|
|
qDeleteAll(d_ptr->m_editorToProperty.keys());
|
|
}
|
|
|
|
/*!
|
|
\internal
|
|
|
|
Reimplemented from the QtAbstractEditorFactory class.
|
|
*/
|
|
void QtColorSchemeComboBoxFactory::connectPropertyManager(QtColorSchemeComboBoxPropertyManager *manager)
|
|
{
|
|
connect(manager, SIGNAL(valueChanged(QtProperty*,int,bool)),
|
|
this, SLOT(slotPropertyChanged(QtProperty*,int,bool)));
|
|
connect(manager, SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
|
|
this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
|
|
}
|
|
|
|
// void QtColorSchemeComboBoxFactory::rendererLinearEnum(QComboBox *editor)
|
|
// {
|
|
// for (int ls = Qt::SolidLine; ls < Qt::CustomDashLine; ls++)
|
|
// {
|
|
// for(int lw = Qt::SolidLine; lw < Qt::CustomDashLine; lw++){
|
|
// QSize rectSize(200,15);
|
|
// QPixmap pix(rectSize);
|
|
// pix.fill(Qt::white);
|
|
//
|
|
// QBrush brush(Qt::black);
|
|
// QPen pen(brush,(Qt::PenStyle)lw,(Qt::PenStyle)ls);
|
|
// QPainter painter(&pix);
|
|
// painter.setPen(pen);
|
|
// painter.drawLine(2,7,500,7);
|
|
// editor->setIconSize(rectSize);
|
|
// editor->addItem(QIcon(pix),"");
|
|
//
|
|
// }
|
|
// }
|
|
// }
|
|
/*!
|
|
\internal
|
|
|
|
Reimplemented from the QtAbstractEditorFactory class.
|
|
*/
|
|
QWidget *QtColorSchemeComboBoxFactory::createEditor(QtColorSchemeComboBoxPropertyManager *manager, QtProperty *property,
|
|
QWidget *parent)
|
|
{
|
|
//QtColorSchemeComboBox * m_pColorSchemeBox = new QtColorSchemeComboBox();
|
|
//return m_pColorSchemeBox;
|
|
QtColorSchemeComboBox * pColorSchemeCombox = d_ptr->createEditor(property,parent);
|
|
QtColorTableData colorMap("Color Scheme",true);
|
|
colorMap.SetCurrentSchemeIndex(manager->value(property));
|
|
pColorSchemeCombox->setSchemeColor(colorMap.GetSchemeList());
|
|
pColorSchemeCombox->setCurrentIndex(manager->value(property));
|
|
|
|
//QComboBox *editor = d_ptr->createEditor(property, parent);
|
|
//pColorSchemeCombox->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
|
|
//pColorSchemeCombox->view()->setTextElideMode(Qt::ElideRight);
|
|
QStringList enumNames = manager->enumNames(property);
|
|
// QSize rectSize(200,15);
|
|
// editor->setIconSize(rectSize);
|
|
// editor->addItems(enumNames);
|
|
// rendererLinearEnum(editor);
|
|
//
|
|
QMap<int, QIcon> enumIcons = manager->enumIcons(property);
|
|
const int enumNamesCount = enumNames.count();
|
|
const int enumIconCount = enumIcons.count();
|
|
// for (int i = 0; i < enumIconCount; i++)
|
|
// editor->setItemIcon(i, enumIcons.value(i));
|
|
// editor->setCurrentIndex(manager->value(property));
|
|
//
|
|
connect(pColorSchemeCombox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotSetValue(int)));
|
|
connect(pColorSchemeCombox, SIGNAL(destroyed(QObject*)),
|
|
this, SLOT(slotEditorDestroyed(QObject*)));
|
|
return pColorSchemeCombox;
|
|
// return editor;
|
|
}
|
|
|
|
/*!
|
|
\internal
|
|
|
|
Reimplemented from the QtAbstractEditorFactory class.
|
|
*/
|
|
void QtColorSchemeComboBoxFactory::disconnectPropertyManager(QtColorSchemeComboBoxPropertyManager *manager)
|
|
{
|
|
disconnect(manager, SIGNAL(valueChanged(QtProperty*,int)),
|
|
this, SLOT(slotPropertyChanged(QtProperty*,int)));
|
|
disconnect(manager, SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
|
|
this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
|
|
|
|
}
|
|
|
|
|
|
void QtColorSchemeComboBoxFactoryPrivate::slotPropertyChanged(QtProperty *property, int value)
|
|
{
|
|
if (!m_createdEditors.contains(property))
|
|
return;
|
|
|
|
QListIterator<QtColorSchemeComboBox *> itEditor(m_createdEditors[property]);
|
|
while (itEditor.hasNext()) {
|
|
QtColorSchemeComboBox *editor = itEditor.next();
|
|
editor->blockSignals(true);
|
|
editor->setCurrentIndex(value);
|
|
editor->blockSignals(false);
|
|
}
|
|
}
|
|
|
|
void QtColorSchemeComboBoxFactoryPrivate::slotEnumNamesChanged(QtProperty *property,
|
|
const QStringList &enumNames)
|
|
{
|
|
if (!m_createdEditors.contains(property))
|
|
return;
|
|
|
|
QtColorSchemeComboBoxPropertyManager *manager = q_ptr->propertyManager(property);
|
|
if (!manager)
|
|
return;
|
|
|
|
QMap<int, QIcon> enumIcons = manager->enumIcons(property);
|
|
|
|
QListIterator<QtColorSchemeComboBox *> itEditor(m_createdEditors[property]);
|
|
while (itEditor.hasNext()) {
|
|
QtColorSchemeComboBox *editor = itEditor.next();
|
|
editor->blockSignals(true);
|
|
editor->clear();
|
|
editor->addItems(enumNames);
|
|
const int nameCount = enumNames.count();
|
|
for (int i = 0; i < nameCount; i++)
|
|
editor->setItemIcon(i, enumIcons.value(i));
|
|
editor->setCurrentIndex(manager->value(property));
|
|
editor->blockSignals(false);
|
|
}
|
|
}
|
|
|
|
void QtColorSchemeComboBoxFactoryPrivate::slotEnumIconsChanged(QtProperty *property,
|
|
const QMap<int, QIcon> &enumIcons)
|
|
{
|
|
if (!m_createdEditors.contains(property))
|
|
return;
|
|
|
|
QtColorSchemeComboBoxPropertyManager *manager = q_ptr->propertyManager(property);
|
|
if (!manager)
|
|
return;
|
|
|
|
const QStringList enumNames = manager->enumNames(property);
|
|
QListIterator<QtColorSchemeComboBox *> itEditor(m_createdEditors[property]);
|
|
while (itEditor.hasNext()) {
|
|
QtColorSchemeComboBox *editor = itEditor.next();
|
|
|
|
editor->blockSignals(true);
|
|
const int nameCount = enumNames.count();
|
|
for (int i = 0; i < nameCount; i++)
|
|
editor->setItemIcon(i, enumIcons.value(i));
|
|
editor->setCurrentIndex(manager->value(property));
|
|
editor->blockSignals(false);
|
|
}
|
|
}
|
|
|
|
void QtColorSchemeComboBoxFactoryPrivate::slotSetValue(int value)
|
|
{
|
|
QObject *object = q_ptr->sender();
|
|
const QMap<QtColorSchemeComboBox *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd();
|
|
for (QMap<QtColorSchemeComboBox *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor)
|
|
if (itEditor.key() == object) {
|
|
QtProperty *property = itEditor.value();
|
|
QtColorSchemeComboBoxPropertyManager *manager = q_ptr->propertyManager(property);
|
|
if (!manager)
|
|
return;
|
|
manager->setValue(property, value,false);
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
QtColorSchemeComboBoxPropertyManager::QtColorSchemeComboBoxPropertyManager(QObject *parent)
|
|
: QtAbstractPropertyManager(parent), d_ptr(new QtColorSchemeComboBoxPropertyManagerPrivate)
|
|
{
|
|
d_ptr->q_ptr = this;
|
|
}
|
|
|
|
/*!
|
|
Destroys this manager, and all the properties it has created.
|
|
*/
|
|
QtColorSchemeComboBoxPropertyManager::~QtColorSchemeComboBoxPropertyManager()
|
|
{
|
|
clear();
|
|
}
|
|
|
|
/*!
|
|
Returns the given \a property's value which is an index in the
|
|
list returned by enumNames()
|
|
|
|
If the given property is not managed by this manager, this
|
|
function returns -1.
|
|
|
|
\sa enumNames(), setValue()
|
|
*/
|
|
int QtColorSchemeComboBoxPropertyManager::value(const QtProperty *property) const
|
|
{
|
|
return getValue<int>(d_ptr->m_values, property, -1);
|
|
}
|
|
|
|
/*!
|
|
Returns the given \a property's list of enum names.
|
|
|
|
\sa value(), setEnumNames()
|
|
*/
|
|
QStringList QtColorSchemeComboBoxPropertyManager::enumNames(const QtProperty *property) const
|
|
{
|
|
return getData<QStringList>(d_ptr->m_values, &QtColorSchemeComboBoxPropertyManagerPrivate::Data::enumNames, property, QStringList());
|
|
}
|
|
|
|
/*!
|
|
Returns the given \a property's map of enum values to their icons.
|
|
|
|
\sa value(), setEnumIcons()
|
|
*/
|
|
QMap<int, QIcon> QtColorSchemeComboBoxPropertyManager::enumIcons(const QtProperty *property) const
|
|
{
|
|
return getData<QMap<int, QIcon> >(d_ptr->m_values, &QtColorSchemeComboBoxPropertyManagerPrivate::Data::enumIcons, property, QMap<int, QIcon>());
|
|
}
|
|
|
|
/*!
|
|
\reimp
|
|
*/
|
|
QString QtColorSchemeComboBoxPropertyManager::valueText(const QtProperty *property) const
|
|
{
|
|
const QtColorSchemeComboBoxPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
|
|
if (it == d_ptr->m_values.constEnd())
|
|
return QString();
|
|
|
|
const QtColorSchemeComboBoxPropertyManagerPrivate::Data &data = it.value();
|
|
|
|
const int v = data.val;
|
|
if (v >= 0 && v < data.enumNames.count())
|
|
return data.enumNames.at(v);
|
|
return QString();
|
|
}
|
|
|
|
bool QtColorSchemeComboBoxPropertyManager::IsColorScheme(const QtProperty *property) const
|
|
{
|
|
return true;
|
|
}
|
|
/*!
|
|
\reimp
|
|
*/
|
|
QIcon QtColorSchemeComboBoxPropertyManager::valueIcon(const QtProperty *property) const
|
|
{
|
|
const QtColorSchemeComboBoxPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
|
|
if (it == d_ptr->m_values.constEnd())
|
|
return QIcon();
|
|
|
|
const QtColorSchemeComboBoxPropertyManagerPrivate::Data &data = it.value();
|
|
|
|
const int v = data.val;
|
|
return data.enumIcons.value(v);
|
|
}
|
|
|
|
/*!
|
|
\fn void QtColorSchemeComboBoxPropertyManager::setValue(QtProperty *property, int value)
|
|
|
|
Sets the value of the given \a property to \a value.
|
|
|
|
The specified \a value must be less than the size of the given \a
|
|
property's enumNames() list, and larger than (or equal to) 0.
|
|
|
|
\sa value(), valueChanged()
|
|
*/
|
|
void QtColorSchemeComboBoxPropertyManager::setValue(QtProperty *property, int val,bool islineStyle)
|
|
{
|
|
const QtColorSchemeComboBoxPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
|
|
if (it == d_ptr->m_values.end())
|
|
return;
|
|
|
|
QtColorSchemeComboBoxPropertyManagerPrivate::Data data = it.value();
|
|
|
|
if (val >= data.enumNames.count())
|
|
return;
|
|
|
|
if (val < 0 && data.enumNames.count() > 0)
|
|
return;
|
|
|
|
if (val < 0)
|
|
val = -1;
|
|
|
|
if (data.val == val)
|
|
return;
|
|
|
|
data.val = val;
|
|
|
|
it.value() = data;
|
|
emit propertyChanged(property);
|
|
emit valueChanged(property, val,islineStyle);
|
|
|
|
|
|
}
|
|
|
|
/*!
|
|
Sets the given \a property's list of enum names to \a
|
|
enumNames. The \a property's current value is reset to 0
|
|
indicating the first item of the list.
|
|
|
|
If the specified \a enumNames list is empty, the \a property's
|
|
current value is set to -1.
|
|
|
|
\sa enumNames(), enumNamesChanged()
|
|
*/
|
|
|
|
void QtColorSchemeComboBoxPropertyManager::setEnumNames(QtProperty *property, const QStringList &enumNames)
|
|
{
|
|
const QtColorSchemeComboBoxPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
|
|
if (it == d_ptr->m_values.end())
|
|
return;
|
|
|
|
QtColorSchemeComboBoxPropertyManagerPrivate::Data data = it.value();
|
|
|
|
if (data.enumNames == enumNames)
|
|
return;
|
|
|
|
data.enumNames = enumNames;
|
|
|
|
data.val = -1;
|
|
|
|
if (enumNames.count() > 0)
|
|
data.val = 0;
|
|
|
|
it.value() = data;
|
|
|
|
emit enumNamesChanged(property, data.enumNames);
|
|
|
|
emit propertyChanged(property);
|
|
emit valueChanged(property, data.val,false);
|
|
}
|
|
|
|
/*!
|
|
Sets the given \a property's map of enum values to their icons to \a
|
|
enumIcons.
|
|
|
|
Each enum value can have associated icon. This association is represented with passed \a enumIcons map.
|
|
|
|
\sa enumNames(), enumNamesChanged()
|
|
*/
|
|
void QtColorSchemeComboBoxPropertyManager::setEnumIcons(QtProperty *property, const QMap<int, QIcon> &enumIcons)
|
|
{
|
|
const QtColorSchemeComboBoxPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
|
|
if (it == d_ptr->m_values.end())
|
|
return;
|
|
|
|
it.value().enumIcons = enumIcons;
|
|
|
|
emit enumIconsChanged(property, it.value().enumIcons);
|
|
|
|
emit propertyChanged(property);
|
|
}
|
|
void QtColorSchemeComboBoxPropertyManager::setLinear(QtProperty *property)
|
|
{
|
|
QStringList enumNames;
|
|
QMap<int, QIcon> enumIcons;
|
|
|
|
QtColorTableData colorMap("Color Scheme",true);
|
|
QList<QtSchemeColor> colorList = colorMap.GetSchemeList();
|
|
|
|
int nCount = colorList.size();
|
|
//样式值
|
|
///QList<Qt::PenStyle> linears;
|
|
// for(int index = 0; index < nCount; index++)
|
|
// {
|
|
// linears.push_back((Qt::PenStyle)(index));
|
|
// }
|
|
|
|
for(int i = 0 ; i < nCount; i++)
|
|
{
|
|
enumNames.push_back(QString::number(i));
|
|
//colorMap.
|
|
// QPixmap pix(rectSize);
|
|
// pix.fill(Qt::white);
|
|
// QBrush brush(Qt::black);
|
|
// QPen pen(brush,2, linears.at(i));
|
|
// QPainter painter(&pix);
|
|
// painter.setPen(pen);
|
|
// painter.drawLine(2,7,500,7);
|
|
//enumIcons[i] = QIcon(pix);
|
|
}
|
|
|
|
setEnumNames(property, enumNames);
|
|
//setEnumIcons(property, enumIcons);
|
|
|
|
}
|
|
/*!
|
|
\reimp
|
|
*/
|
|
void QtColorSchemeComboBoxPropertyManager::initializeProperty(QtProperty *property)
|
|
{
|
|
d_ptr->m_values[property] = QtColorSchemeComboBoxPropertyManagerPrivate::Data();
|
|
}
|
|
|
|
/*!
|
|
\reimp
|
|
*/
|
|
void QtColorSchemeComboBoxPropertyManager::uninitializeProperty(QtProperty *property)
|
|
{
|
|
d_ptr->m_values.remove(property);
|
|
}
|
|
|