diff --git a/.gitignore b/.gitignore
index 0f3f8cba4..3d7b81afa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,6 +21,7 @@ ecflow_*.files
ecflow_*.cflags
ecflow_*.cxxflags
CMakeLists.txt.user
+.qtc_clangd/
#vscode
.vscode
diff --git a/Viewer/ecflowUI/images/aviso.svg b/Viewer/ecflowUI/images/aviso.svg
new file mode 100644
index 000000000..131de3cbb
--- /dev/null
+++ b/Viewer/ecflowUI/images/aviso.svg
@@ -0,0 +1,257 @@
+
+
+
+
diff --git a/Viewer/ecflowUI/src/NodeViewDelegate.cpp b/Viewer/ecflowUI/src/NodeViewDelegate.cpp
index 6a6691207..9bfa6feda 100644
--- a/Viewer/ecflowUI/src/NodeViewDelegate.cpp
+++ b/Viewer/ecflowUI/src/NodeViewDelegate.cpp
@@ -10,6 +10,8 @@
#include "NodeViewDelegate.hpp"
+#include
+
#include
#include
#include
@@ -84,6 +86,8 @@ NodeViewDelegate::NodeViewDelegate(QWidget* parent) : QStyledItemDelegate(parent
errPix_ = QPixmap(QPixmap::fromImage(img));
}
+ avisoPixId_ = IconProvider::add(":/viewer/aviso.svg", "aviso");
+
grad_.setCoordinateMode(QGradient::ObjectBoundingMode);
grad_.setStart(0, 0);
grad_.setFinalStop(0, 1);
@@ -666,13 +670,14 @@ void NodeViewDelegate::renderAviso(QPainter* painter,
QStringList data,
const QStyleOptionViewItem& option,
QSize& size) const {
+
int totalWidth = 0;
size = QSize(totalWidth, attrBox_->fullHeight);
if (data.count() < 2)
return;
- QString name = data.at(1) + ":";
+ QString name = data.at(1); // + ":";
QString val;
if (data.count() > 2)
val = data.at(2);
@@ -688,6 +693,7 @@ void NodeViewDelegate::renderAviso(QPainter* painter,
int currentRight = contRect.x();
int multiCnt = val.count('\n');
+ QRect avisoRect;
QRect nameRect;
QRect valRect, valRestRect;
@@ -697,11 +703,16 @@ void NodeViewDelegate::renderAviso(QPainter* painter,
QString valFirst, valRest;
QString full;
+ auto avisoPix = IconProvider::pixmapToHeight(avisoPixId_, contRect.height());
+ avisoRect = contRect.adjusted(attrBox_->leftPadding, 0, 0, 0);
+ avisoRect.setWidth(avisoPix.width());
+
if (multiCnt == 0) {
// The text rectangle
QFontMetrics fm(nameFont);
int nameWidth = ViewerUtil::textWidth(fm, name);
- nameRect = contRect.adjusted(attrBox_->leftPadding, 0, 0, 0);
+ nameRect = contRect;
+ nameRect.setX(avisoRect.x() + avisoRect.width() + attrBox_->spacing);
nameRect.setWidth(nameWidth);
// The value rectangle
@@ -718,7 +729,8 @@ void NodeViewDelegate::renderAviso(QPainter* painter,
// The text rectangle
QFontMetrics fm(nameFont);
int nameWidth = ViewerUtil::textWidth(fm, name);
- nameRect = contRect.adjusted(attrBox_->leftPadding, 0, 0, 0);
+ nameRect = contRect;
+ nameRect.setX(avisoRect.x() + avisoRect.width() + attrBox_->spacing);
nameRect.setWidth(nameWidth);
nameRect.setHeight(attrBox_->height - attrBox_->topPadding - attrBox_->bottomPadding);
@@ -781,6 +793,9 @@ void NodeViewDelegate::renderAviso(QPainter* painter,
}
}
+ // aviso pixmap
+ painter->drawPixmap(avisoRect, avisoPix);
+
// Draw name
painter->setPen(fontPen);
painter->setFont(nameFont);
diff --git a/Viewer/ecflowUI/src/NodeViewDelegate.hpp b/Viewer/ecflowUI/src/NodeViewDelegate.hpp
index 2c60c52e1..e36724e46 100644
--- a/Viewer/ecflowUI/src/NodeViewDelegate.hpp
+++ b/Viewer/ecflowUI/src/NodeViewDelegate.hpp
@@ -246,6 +246,7 @@ class NodeViewDelegate : public QStyledItemDelegate, public VPropertyObserver {
QPen holdingTimeFontPen_;
QPen holdingDateFontPen_;
+ int avisoPixId_;
int holdingTimePixId_;
int holdingDatePixId_;
diff --git a/Viewer/ecflowUI/src/viewer.qrc b/Viewer/ecflowUI/src/viewer.qrc
index afb1bd856..a28b1b693 100644
--- a/Viewer/ecflowUI/src/viewer.qrc
+++ b/Viewer/ecflowUI/src/viewer.qrc
@@ -43,6 +43,7 @@
../images/add_tab.svg
../images/add_variable_column.svg
../images/attribute.svg
+ ../images/aviso.svg
../images/autoscroll.svg
../images/autoscroll_off.svg
../images/chain.svg
diff --git a/Viewer/libViewer/src/IconProvider.cpp b/Viewer/libViewer/src/IconProvider.cpp
index 44e6b4ea8..3a04d750e 100644
--- a/Viewer/libViewer/src/IconProvider.cpp
+++ b/Viewer/libViewer/src/IconProvider.cpp
@@ -63,6 +63,32 @@ QPixmap IconItem::pixmap(int size) {
return {};
}
+
+QPixmap IconItem::pixmapToHeight(int size) {
+ auto it = pixmapsByHeight_.find(size);
+ if (it != pixmapsByHeight_.end())
+ return it->second;
+ else {
+ QPixmap pix;
+ QImageReader imgR(path_);
+ if (imgR.canRead()) {
+ int w = imgR.size().width();
+ int h = imgR.size().height();
+ float r = static_cast(w)/static_cast(h);
+ imgR.setScaledSize(QSize(size*r, size));
+ QImage img = imgR.read();
+ pix = QPixmap::fromImage(img);
+ }
+ else {
+ pix = unknown(size);
+ }
+
+ pixmapsByHeight_[size] = pix;
+ return pix;
+ }
+ return {};
+}
+
QPixmap IconItem::unknown(int size) {
return unknownIcon.pixmap(size);
}
@@ -126,6 +152,10 @@ QPixmap IconProvider::pixmap(int id, int size) {
return icon(id)->pixmap(size);
}
+QPixmap IconProvider::pixmapToHeight(int id, int size) {
+ return icon(id)->pixmapToHeight(size);
+}
+
QPixmap IconProvider::lockPixmap(int size) {
return lockIcon.pixmap(size);
}
diff --git a/Viewer/libViewer/src/IconProvider.hpp b/Viewer/libViewer/src/IconProvider.hpp
index 4bca01db1..0e4c7a601 100644
--- a/Viewer/libViewer/src/IconProvider.hpp
+++ b/Viewer/libViewer/src/IconProvider.hpp
@@ -21,6 +21,7 @@ class IconItem {
virtual ~IconItem() = default;
QPixmap pixmap(int);
+ QPixmap pixmapToHeight(int size);
int id() const { return id_; }
QString path() const { return path_; }
@@ -29,6 +30,7 @@ class IconItem {
QString path_;
std::map pixmaps_;
+ std::map pixmapsByHeight_;
int id_;
};
@@ -49,6 +51,7 @@ class IconProvider {
static QString path(int id);
static QPixmap pixmap(QString name, int size);
static QPixmap pixmap(int id, int size);
+ static QPixmap pixmapToHeight(int id, int size);
static QPixmap lockPixmap(int);
static QPixmap warningPixmap(int);