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