Visibility setting for markers
This commit is contained in:
parent
80eaf5bce7
commit
29544066bb
@ -24,6 +24,7 @@ Marker::Marker(MarkerModel *model, int number, Marker *parent, QString descr)
|
|||||||
parentTrace(nullptr),
|
parentTrace(nullptr),
|
||||||
position(1000000000),
|
position(1000000000),
|
||||||
number(number),
|
number(number),
|
||||||
|
visible(true),
|
||||||
data(0),
|
data(0),
|
||||||
type(Type::Manual),
|
type(Type::Manual),
|
||||||
description(descr),
|
description(descr),
|
||||||
@ -680,7 +681,7 @@ void Marker::traceDataChanged()
|
|||||||
|
|
||||||
void Marker::updateSymbol()
|
void Marker::updateSymbol()
|
||||||
{
|
{
|
||||||
if(isVisible()) {
|
if(isDisplayedMarker()) {
|
||||||
constexpr int width = 15, height = 15;
|
constexpr int width = 15, height = 15;
|
||||||
symbol = QPixmap(width, height);
|
symbol = QPixmap(width, height);
|
||||||
symbol.fill(Qt::transparent);
|
symbol.fill(Qt::transparent);
|
||||||
@ -1056,7 +1057,7 @@ double Marker::toDecibel()
|
|||||||
return Util::SparamTodB(data);
|
return Util::SparamTodB(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Marker::isVisible()
|
bool Marker::isDisplayedMarker()
|
||||||
{
|
{
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case Type::Manual:
|
case Type::Manual:
|
||||||
@ -1119,6 +1120,7 @@ nlohmann::json Marker::toJSON()
|
|||||||
{
|
{
|
||||||
nlohmann::json j;
|
nlohmann::json j;
|
||||||
j["trace"] = parentTrace->toHash();
|
j["trace"] = parentTrace->toHash();
|
||||||
|
j["visible"] = visible;
|
||||||
j["type"] = typeToString(type).toStdString();
|
j["type"] = typeToString(type).toStdString();
|
||||||
j["number"] = number;
|
j["number"] = number;
|
||||||
j["position"] = position;
|
j["position"] = position;
|
||||||
@ -1160,6 +1162,7 @@ void Marker::fromJSON(nlohmann::json j)
|
|||||||
}
|
}
|
||||||
number = j.value("number", 1);
|
number = j.value("number", 1);
|
||||||
position = j.value("position", 0.0);
|
position = j.value("position", 0.0);
|
||||||
|
visible = j.value("visible", true);
|
||||||
|
|
||||||
unsigned int hash = j["trace"];
|
unsigned int hash = j["trace"];
|
||||||
// find correct trace
|
// find correct trace
|
||||||
@ -1484,6 +1487,19 @@ void Marker::adjustSettings(double value)
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Marker::isVisible()
|
||||||
|
{
|
||||||
|
return visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Marker::setVisible(bool visible)
|
||||||
|
{
|
||||||
|
if(this->visible != visible) {
|
||||||
|
this->visible = visible;
|
||||||
|
emit visibilityChanged(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QMenu *Marker::getContextMenu() {
|
QMenu *Marker::getContextMenu() {
|
||||||
if(parent) {
|
if(parent) {
|
||||||
return parent->getContextMenu();
|
return parent->getContextMenu();
|
||||||
|
@ -95,6 +95,8 @@ public:
|
|||||||
void updateTypeFromEditor(QWidget *c);
|
void updateTypeFromEditor(QWidget *c);
|
||||||
SIUnitEdit* getSettingsEditor();
|
SIUnitEdit* getSettingsEditor();
|
||||||
void adjustSettings(double value);
|
void adjustSettings(double value);
|
||||||
|
bool isVisible();
|
||||||
|
bool setVisible(bool visible);
|
||||||
|
|
||||||
QMenu *getContextMenu();
|
QMenu *getContextMenu();
|
||||||
|
|
||||||
@ -128,6 +130,7 @@ signals:
|
|||||||
void positionChanged(double pos);
|
void positionChanged(double pos);
|
||||||
void deleted(Marker *m);
|
void deleted(Marker *m);
|
||||||
void dataChanged(Marker *m);
|
void dataChanged(Marker *m);
|
||||||
|
void visibilityChanged(Marker *m);
|
||||||
void symbolChanged(Marker *m);
|
void symbolChanged(Marker *m);
|
||||||
void typeChanged(Marker *m);
|
void typeChanged(Marker *m);
|
||||||
void assignedDeltaChanged(Marker *m);
|
void assignedDeltaChanged(Marker *m);
|
||||||
@ -170,7 +173,7 @@ private:
|
|||||||
void deleteHelperMarkers();
|
void deleteHelperMarkers();
|
||||||
void setType(Type t);
|
void setType(Type t);
|
||||||
double toDecibel();
|
double toDecibel();
|
||||||
bool isVisible();
|
bool isDisplayedMarker();
|
||||||
|
|
||||||
void setTableFormat(Format f);
|
void setTableFormat(Format f);
|
||||||
|
|
||||||
@ -178,6 +181,7 @@ private:
|
|||||||
Trace *parentTrace;
|
Trace *parentTrace;
|
||||||
double position;
|
double position;
|
||||||
int number;
|
int number;
|
||||||
|
bool visible;
|
||||||
// Frequency domain: S parameter
|
// Frequency domain: S parameter
|
||||||
// Time domain: impulse response
|
// Time domain: impulse response
|
||||||
std::complex<double> data;
|
std::complex<double> data;
|
||||||
|
@ -95,6 +95,11 @@ void MarkerModel::addMarker(Marker *t)
|
|||||||
auto modelIndex = createIndex(row, 0, root);
|
auto modelIndex = createIndex(row, 0, root);
|
||||||
beginRemoveRows(modelIndex, 0, m->getHelperMarkers().size() - 1);
|
beginRemoveRows(modelIndex, 0, m->getHelperMarkers().size() - 1);
|
||||||
});
|
});
|
||||||
|
connect(t, &Marker::visibilityChanged, [=](Marker *m) {
|
||||||
|
auto row = find(markers.begin(), markers.end(), m) - markers.begin();
|
||||||
|
auto index = createIndex(row, (int) ColIndexVisible, root);
|
||||||
|
emit dataChanged(index, index);
|
||||||
|
});
|
||||||
connect(t, &Marker::endRemoveHelperMarkers, [=](Marker *m) {
|
connect(t, &Marker::endRemoveHelperMarkers, [=](Marker *m) {
|
||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
markerDataChanged(m);
|
markerDataChanged(m);
|
||||||
@ -222,7 +227,8 @@ int MarkerModel::columnCount(const QModelIndex &) const
|
|||||||
QVariant MarkerModel::data(const QModelIndex &index, int role) const
|
QVariant MarkerModel::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
auto marker = markerFromIndex(index);
|
auto marker = markerFromIndex(index);
|
||||||
if(role == Qt::DisplayRole) {
|
switch(role) {
|
||||||
|
case Qt::DisplayRole:
|
||||||
switch(index.column()) {
|
switch(index.column()) {
|
||||||
case ColIndexNumber:
|
case ColIndexNumber:
|
||||||
return QString::number(marker->getNumber()) + marker->getSuffix();
|
return QString::number(marker->getNumber()) + marker->getSuffix();
|
||||||
@ -243,6 +249,16 @@ QVariant MarkerModel::data(const QModelIndex &index, int role) const
|
|||||||
case ColIndexData:
|
case ColIndexData:
|
||||||
return marker->readableData();
|
return marker->readableData();
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case Qt::DecorationRole:
|
||||||
|
switch(index.column()) {
|
||||||
|
case ColIndexVisible:
|
||||||
|
if(marker->isVisible()) {
|
||||||
|
return QIcon(":/icons/visible.svg");
|
||||||
|
} else {
|
||||||
|
return QIcon(":/icons/invisible.svg");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
@ -254,6 +270,7 @@ QVariant MarkerModel::headerData(int section, Qt::Orientation orientation, int r
|
|||||||
case Qt::DecorationRole:
|
case Qt::DecorationRole:
|
||||||
switch(section) {
|
switch(section) {
|
||||||
case ColIndexGroup: return QIcon(":/icons/chainlink.png");
|
case ColIndexGroup: return QIcon(":/icons/chainlink.png");
|
||||||
|
case ColIndexVisible: return QIcon(":/icons/visible.svg");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Qt::DisplayRole:
|
case Qt::DisplayRole:
|
||||||
@ -311,6 +328,7 @@ Qt::ItemFlags MarkerModel::flags(const QModelIndex &index) const
|
|||||||
int flags = Qt::ItemIsSelectable;
|
int flags = Qt::ItemIsSelectable;
|
||||||
switch(index.column()) {
|
switch(index.column()) {
|
||||||
case ColIndexNumber: flags |= Qt::ItemIsEnabled | Qt::ItemIsEditable; break;
|
case ColIndexNumber: flags |= Qt::ItemIsEnabled | Qt::ItemIsEditable; break;
|
||||||
|
case ColIndexVisible: flags |= Qt::ItemIsEnabled; break;
|
||||||
case ColIndexGroup: flags |= Qt::ItemIsEnabled; break;
|
case ColIndexGroup: flags |= Qt::ItemIsEnabled; break;
|
||||||
case ColIndexTrace: flags |= Qt::ItemIsEnabled | Qt::ItemIsEditable; break;
|
case ColIndexTrace: flags |= Qt::ItemIsEnabled | Qt::ItemIsEditable; break;
|
||||||
case ColIndexType: flags |= Qt::ItemIsEnabled | Qt::ItemIsEditable; break;
|
case ColIndexType: flags |= Qt::ItemIsEnabled | Qt::ItemIsEditable; break;
|
||||||
|
@ -54,6 +54,7 @@ public:
|
|||||||
|
|
||||||
enum {
|
enum {
|
||||||
ColIndexNumber,
|
ColIndexNumber,
|
||||||
|
ColIndexVisible,
|
||||||
ColIndexGroup,
|
ColIndexGroup,
|
||||||
ColIndexTrace,
|
ColIndexTrace,
|
||||||
ColIndexType,
|
ColIndexType,
|
||||||
|
@ -33,6 +33,7 @@ MarkerWidget::MarkerWidget(MarkerModel &model, QWidget *parent) :
|
|||||||
|
|
||||||
ui->treeView->setColumnWidth(MarkerModel::ColIndexNumber, 60);
|
ui->treeView->setColumnWidth(MarkerModel::ColIndexNumber, 60);
|
||||||
ui->treeView->setColumnWidth(MarkerModel::ColIndexGroup, 20);
|
ui->treeView->setColumnWidth(MarkerModel::ColIndexGroup, 20);
|
||||||
|
ui->treeView->setColumnWidth(MarkerModel::ColIndexVisible, 20);
|
||||||
ui->treeView->setColumnWidth(MarkerModel::ColIndexTrace, 60);
|
ui->treeView->setColumnWidth(MarkerModel::ColIndexTrace, 60);
|
||||||
ui->treeView->setColumnWidth(MarkerModel::ColIndexType, 120);
|
ui->treeView->setColumnWidth(MarkerModel::ColIndexType, 120);
|
||||||
|
|
||||||
@ -93,6 +94,12 @@ MarkerWidget::MarkerWidget(MarkerModel &model, QWidget *parent) :
|
|||||||
updatePersistentEditors();
|
updatePersistentEditors();
|
||||||
});
|
});
|
||||||
connect(&model, &MarkerModel::setupLoadComplete, this, &MarkerWidget::updatePersistentEditors);
|
connect(&model, &MarkerModel::setupLoadComplete, this, &MarkerWidget::updatePersistentEditors);
|
||||||
|
connect(ui->treeView, &QTreeView::clicked, [&](const QModelIndex &index){
|
||||||
|
if(index.column() == (int) MarkerModel::ColIndexVisible) {
|
||||||
|
auto marker = model.markerFromIndex(index);
|
||||||
|
marker->setVisible(!marker->isVisible());
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
MarkerWidget::~MarkerWidget()
|
MarkerWidget::~MarkerWidget()
|
||||||
|
@ -299,16 +299,24 @@ void Trace::addMarker(Marker *m)
|
|||||||
{
|
{
|
||||||
markers.insert(m);
|
markers.insert(m);
|
||||||
connect(m, &Marker::dataFormatChanged, this, &Trace::markerFormatChanged);
|
connect(m, &Marker::dataFormatChanged, this, &Trace::markerFormatChanged);
|
||||||
|
connect(m, &Marker::visibilityChanged, this, &Trace::markerVisibilityChanged);
|
||||||
emit markerAdded(m);
|
emit markerAdded(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trace::removeMarker(Marker *m)
|
void Trace::removeMarker(Marker *m)
|
||||||
{
|
{
|
||||||
disconnect(m, &Marker::dataFormatChanged, this, &Trace::markerFormatChanged);
|
disconnect(m, &Marker::dataFormatChanged, this, &Trace::markerFormatChanged);
|
||||||
|
disconnect(m, &Marker::visibilityChanged, this, &Trace::markerVisibilityChanged);
|
||||||
markers.erase(m);
|
markers.erase(m);
|
||||||
emit markerRemoved(m);
|
emit markerRemoved(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Trace::markerVisibilityChanged(Marker *m)
|
||||||
|
{
|
||||||
|
// trigger replot by pretending that trace visibility also changed
|
||||||
|
emit visibilityChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
double Trace::getReferenceImpedance() const
|
double Trace::getReferenceImpedance() const
|
||||||
{
|
{
|
||||||
return reference_impedance;
|
return reference_impedance;
|
||||||
|
@ -167,6 +167,9 @@ signals:
|
|||||||
void markerRemoved(Marker *m);
|
void markerRemoved(Marker *m);
|
||||||
void markerFormatChanged(Marker *m);
|
void markerFormatChanged(Marker *m);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void markerVisibilityChanged(Marker *m);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString _name;
|
QString _name;
|
||||||
QColor _color;
|
QColor _color;
|
||||||
|
@ -197,6 +197,9 @@ void TracePlot::paintEvent(QPaintEvent *event)
|
|||||||
|
|
||||||
auto tmarkers = t.first->getMarkers();
|
auto tmarkers = t.first->getMarkers();
|
||||||
for(auto m : tmarkers) {
|
for(auto m : tmarkers) {
|
||||||
|
if(!m->isVisible()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if(!markerVisible(m->getPosition())) {
|
if(!markerVisible(m->getPosition())) {
|
||||||
// marker not visible with current plot settings
|
// marker not visible with current plot settings
|
||||||
continue;
|
continue;
|
||||||
|
@ -386,6 +386,9 @@ void TraceSmithChart::draw(QPainter &p) {
|
|||||||
// only draw markers if the trace has at least one point
|
// only draw markers if the trace has at least one point
|
||||||
auto markers = t.first->getMarkers();
|
auto markers = t.first->getMarkers();
|
||||||
for(auto m : markers) {
|
for(auto m : markers) {
|
||||||
|
if(!m->isVisible()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// if (m->isTimeDomain()) {
|
// if (m->isTimeDomain()) {
|
||||||
// continue;
|
// continue;
|
||||||
// }
|
// }
|
||||||
|
@ -505,6 +505,9 @@ void TraceXYPlot::draw(QPainter &p)
|
|||||||
// only draw markers on primary YAxis and if the trace has at least one point
|
// only draw markers on primary YAxis and if the trace has at least one point
|
||||||
auto markers = t->getMarkers();
|
auto markers = t->getMarkers();
|
||||||
for(auto m : markers) {
|
for(auto m : markers) {
|
||||||
|
if(!m->isVisible()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
double xPosition = m->getPosition();
|
double xPosition = m->getPosition();
|
||||||
if (xPosition < xAxis.getRangeMin() || xPosition > xAxis.getRangeMax()) {
|
if (xPosition < xAxis.getRangeMin() || xPosition > xAxis.getRangeMax()) {
|
||||||
// marker not in graph range
|
// marker not in graph range
|
||||||
|
Loading…
Reference in New Issue
Block a user