mirror of
https://gitlab.com/pholy/OSCAR-code.git
synced 2025-04-04 02:00:43 +00:00
298 lines
6.4 KiB
C++
298 lines
6.4 KiB
C++
/* Graph Layer Implementation
|
|
*
|
|
* Copyright (c) 2019-2024 The OSCAR Team
|
|
* Copyright (c) 2011-2018 Mark Watkins
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
* License. See the file COPYING in the main directory of the source code
|
|
* for more details. */
|
|
|
|
#define TEST_MACROS_ENABLEDoff
|
|
#include "test_macros.h"
|
|
|
|
#include "Graphs/layer.h"
|
|
|
|
Layer::~Layer()
|
|
{
|
|
// for (int i = 0; i < mgl_buffers.size(); i++) {
|
|
// delete mgl_buffers[i];
|
|
// }
|
|
|
|
// for (int i = 0; i < mv_buffers.size(); i++) {
|
|
// delete mv_buffers[i];
|
|
// }
|
|
}
|
|
|
|
//void Layer::drawGLBuf(float linesize)
|
|
//{
|
|
// int type;
|
|
// float size;
|
|
|
|
// if (!m_visible) { return; }
|
|
|
|
// GLBuffer *buf;
|
|
// gVertexBuffer *vb;
|
|
|
|
// for (int i = 0; i < mv_buffers.size(); i++) {
|
|
// vb = mv_buffers[i];
|
|
// size = vb->size();
|
|
// type = vb->type();
|
|
|
|
// if ((linesize > size) && ((type == GL_LINES) || (type == GL_LINE_LOOP))) {
|
|
// vb->setSize(linesize);
|
|
// }
|
|
|
|
// vb->draw();
|
|
// vb->setSize(size);
|
|
// }
|
|
|
|
// for (int i = 0; i < mgl_buffers.size(); i++) {
|
|
// buf = mgl_buffers[i];
|
|
// size = buf->size();
|
|
// type = buf->type();
|
|
|
|
// if ((linesize > size) && ((type == GL_LINES) || (type == GL_LINE_LOOP))) {
|
|
// buf->setSize(linesize);
|
|
// }
|
|
|
|
// buf->draw();
|
|
// //if ((linesize>size) && ((type==GL_LINES) || (type==GL_LINE_LOOP))) {
|
|
// buf->setSize(size);
|
|
// //}
|
|
// }
|
|
//}
|
|
|
|
void Layer::CloneInto(Layer * layer)
|
|
{
|
|
layer->m_refcount = m_refcount;
|
|
layer->m_day = m_day;
|
|
layer->m_visible = m_visible;
|
|
layer->m_movable = m_movable;
|
|
layer->m_minx = m_minx;
|
|
layer->m_maxx = m_maxx;
|
|
layer->m_miny = m_miny;
|
|
layer->m_maxy = m_maxy;
|
|
layer->m_physmaxy = m_physmaxy;
|
|
layer->m_physminy = m_physminy;
|
|
layer->m_code = m_code;
|
|
layer->m_width = m_width;
|
|
layer->m_height = m_height;
|
|
layer->m_X = m_X;
|
|
layer->m_Y = m_Y;
|
|
layer->m_order = m_order;
|
|
layer->m_position = m_position;
|
|
layer->m_rect = m_rect;
|
|
layer->m_mouseover = m_mouseover;
|
|
layer->m_recalculating = m_recalculating;
|
|
layer->m_layertype = m_layertype;
|
|
}
|
|
|
|
void Layer::SetDay(Day *d)
|
|
{
|
|
m_day = d;
|
|
if (d) {
|
|
m_minx = d->first(m_code);
|
|
m_maxx = d->last(m_code);
|
|
m_miny = d->Min(m_code);
|
|
m_maxy = d->Max(m_code);
|
|
} else { m_day = nullptr; }
|
|
|
|
}
|
|
|
|
bool Layer::isEmpty()
|
|
{
|
|
//if (m_day && (m_day->count(m_code)>0))
|
|
if (m_day && (m_day->channelExists(m_code))) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
void Layer::setLayout(LayerPosition position, short width, short height, short order)
|
|
{
|
|
m_position = position;
|
|
m_width = width;
|
|
m_height = height;
|
|
m_order = order;
|
|
}
|
|
|
|
LayerGroup::~LayerGroup()
|
|
{
|
|
for (int i = 0; i < layers.size(); i++) {
|
|
delete layers[i];
|
|
}
|
|
}
|
|
bool LayerGroup::isEmpty()
|
|
{
|
|
if (!m_day) {
|
|
return true;
|
|
}
|
|
|
|
bool empty = true;
|
|
|
|
for (int i = 0; i < layers.size(); i++) {
|
|
if (layers[i]->isEmpty()) {
|
|
empty = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return empty;
|
|
}
|
|
//void LayerGroup::drawGLBuf(float linesize)
|
|
//{
|
|
// Layer::drawGLBuf(linesize);
|
|
|
|
// for (int i = 0; i < layers.size(); i++) {
|
|
// layers[i]->drawGLBuf(linesize);
|
|
// }
|
|
//}
|
|
|
|
void LayerGroup::SetDay(Day *d)
|
|
{
|
|
m_day = d;
|
|
|
|
for (int i = 0; i < layers.size(); i++) {
|
|
layers[i]->SetDay(d);
|
|
}
|
|
}
|
|
|
|
void LayerGroup::AddLayer(Layer *l)
|
|
{
|
|
layers.push_back(l);
|
|
l->addref();
|
|
}
|
|
|
|
qint64 LayerGroup::Minx()
|
|
{
|
|
bool first = true;
|
|
qint64 m = 0, t;
|
|
|
|
for (int i = 0; i < layers.size(); i++) {
|
|
t = layers[i]->Minx();
|
|
|
|
if (!t) { continue; }
|
|
|
|
if (first) {
|
|
m = t;
|
|
first = false;
|
|
} else if (m > t) { m = t; }
|
|
}
|
|
|
|
return m;
|
|
}
|
|
qint64 LayerGroup::Maxx()
|
|
{
|
|
bool first = true;
|
|
qint64 m = 0, t;
|
|
|
|
for (int i = 0; i < layers.size(); i++) {
|
|
t = layers[i]->Maxx();
|
|
|
|
if (!t) { continue; }
|
|
|
|
if (first) {
|
|
m = t;
|
|
first = false;
|
|
} else if (m < t) { m = t; }
|
|
}
|
|
|
|
return m;
|
|
}
|
|
|
|
EventDataType LayerGroup::Miny()
|
|
{
|
|
bool first = true;
|
|
EventDataType m = 0, t;
|
|
|
|
for (int i = 0; i < layers.size(); i++) {
|
|
t = layers[i]->Miny();
|
|
|
|
if (t == layers[i]->Maxy()) { continue; }
|
|
|
|
if (first) {
|
|
m = t;
|
|
first = false;
|
|
} else {
|
|
if (m > t) { m = t; }
|
|
}
|
|
}
|
|
|
|
return m;
|
|
}
|
|
|
|
EventDataType LayerGroup::Maxy()
|
|
{
|
|
bool first = true;
|
|
EventDataType m = 0, t;
|
|
|
|
for (int i = 0; i < layers.size(); i++) {
|
|
t = layers[i]->Maxy();
|
|
|
|
if (t == layers[i]->Miny()) { continue; }
|
|
|
|
if (first) {
|
|
m = t;
|
|
first = false;
|
|
} else if (m < t) { m = t; }
|
|
}
|
|
|
|
return m;
|
|
}
|
|
|
|
//! \brief Mouse wheel moved somewhere over this layer
|
|
bool LayerGroup::wheelEvent(QWheelEvent *event, gGraph *graph)
|
|
{
|
|
for (int i = 0; i < layers.size(); i++)
|
|
if (layers[i]->wheelEvent(event, graph)) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
//! \brief Mouse moved somewhere over this layer
|
|
bool LayerGroup::mouseMoveEvent(QMouseEvent *event, gGraph *graph)
|
|
{
|
|
for (int i = 0; i < layers.size(); i++)
|
|
if (layers[i]->mouseMoveEvent(event, graph)) { return true; }
|
|
|
|
return false;
|
|
}
|
|
|
|
//! \brief Mouse left or right button pressed somewhere on this layer
|
|
bool LayerGroup::mousePressEvent(QMouseEvent *event, gGraph *graph)
|
|
{
|
|
for (int i = 0; i < layers.size(); i++)
|
|
if (layers[i]->mousePressEvent(event, graph)) { return true; }
|
|
|
|
return false;
|
|
}
|
|
|
|
//! \brief Mouse button released that was originally pressed somewhere on this layer
|
|
bool LayerGroup::mouseReleaseEvent(QMouseEvent *event, gGraph *graph)
|
|
{
|
|
for (int i = 0; i < layers.size(); i++)
|
|
if (layers[i]->mouseReleaseEvent(event, graph)) { return true; }
|
|
|
|
return false;
|
|
}
|
|
|
|
//! \brief Mouse button double clicked somewhere on this layer
|
|
bool LayerGroup::mouseDoubleClickEvent(QMouseEvent *event, gGraph *graph)
|
|
{
|
|
for (int i = 0; i < layers.size(); i++)
|
|
if (layers[i]->mouseDoubleClickEvent(event, graph)) { return true; }
|
|
|
|
return false;
|
|
}
|
|
|
|
//! \brief A key was pressed on the keyboard while the graph area was focused.
|
|
bool LayerGroup::keyPressEvent(QKeyEvent *event, gGraph *graph)
|
|
{
|
|
for (int i = 0; i < layers.size(); i++)
|
|
if (layers[i]->keyPressEvent(event, graph)) { return true; }
|
|
|
|
return false;
|
|
}
|