Files
Enzo/src/Gui/GeometrySpreadsheetPanel/GeometrySpreadsheetPanel.cpp
2025-08-11 01:06:10 +01:00

96 lines
3.1 KiB
C++

#include "Gui/GeometrySpreadsheetPanel/GeometrySpreadsheetPanel.h"
#include "Gui/GeometrySpreadsheetPanel/GeometrySpreadsheetMenuBar.h"
#include "Gui/GeometrySpreadsheetPanel/GeometrySpreadsheetModel.h"
#include "Engine/Network/NetworkManager.h"
#include <QTableWidget>
#include <QTreeWidget>
#include <QLabel>
#include <qframe.h>
#include <qpushbutton.h>
#include <qtablewidget.h>
#include <QPainterPath>
GeometrySpreadsheetPanel::GeometrySpreadsheetPanel(QWidget *parent, Qt::WindowFlags f)
: QWidget(parent, f)
{
mainLayout_ = new QVBoxLayout();
mainLayout_->setSpacing(0);
view_ = new QTreeView(parent);
view_->setRootIsDecorated(false);
view_->setAlternatingRowColors(true);
view_->setUniformRowHeights(true); // improves performance
view_->setStyleSheet(R"(
QTreeView {
background-color: #282828;
alternate-background-color: #242424;
paint-alternating-row-colors-for-empty-area: 1;
}
QTreeView QScrollBar {
background: #1B1B1B;
width: 15px;
}
QTreeView QScrollBar::handle:vertical {
background: #282828;
min-height: 50px;
border-radius: 5px;
border-width: 1px;
border-color: #2D2D2D;
border-style: solid;
margin:2px;
}
QTreeView QScrollBar::add-page:vertical,
QTreeView QScrollBar::sub-page:vertical,
QTreeView QScrollBar::add-line:vertical,
QTreeView QScrollBar::sub-line:vertical
{ height: 0px; }
QHeaderView::section {
background-color: #1B1B1B;
}
)");
view_->setFrameStyle(QFrame::NoFrame);
model_ = new GeometrySpreadsheetModel();
view_->setModel(model_);
menuBar_ = new GeometrySpreadsheetMenuBar();
// connect buttons
connect(menuBar_->modeSelection->pointButton, &QPushButton::clicked, this, [this](){model_->setOwner(enzo::ga::AttributeOwner::POINT);});
connect(menuBar_->modeSelection->vertexButton, &QPushButton::clicked, this, [this](){model_->setOwner(enzo::ga::AttributeOwner::VERTEX);});
connect(menuBar_->modeSelection->primitiveButton, &QPushButton::clicked, this, [this](){model_->setOwner(enzo::ga::AttributeOwner::PRIMITIVE);});
connect(menuBar_->modeSelection->globalButton, &QPushButton::clicked, this, [this](){model_->setOwner(enzo::ga::AttributeOwner::GLOBAL);});
// set default
menuBar_->modeSelection->pointButton->click();
mainLayout_->addWidget(menuBar_);
mainLayout_->addWidget(view_);
setLayout(mainLayout_);
}
void GeometrySpreadsheetPanel::setNode(enzo::nt::OpId opId)
{
menuBar_->setNode(opId);
}
void GeometrySpreadsheetPanel::geometryChanged(enzo::geo::Geometry& geometry)
{
model_->geometryChanged(geometry);
view_->update();
}
void GeometrySpreadsheetPanel::resizeEvent(QResizeEvent *event)
{
QPainterPath path;
constexpr float radius = 10;
path.addRoundedRect(mainLayout_->contentsRect(), radius, radius);
QRegion region = QRegion(path.toFillPolygon().toPolygon());
this->setMask(region);
}