mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-17 20:50:34 +01:00
Terminal strip item can be added to diagram
Initial commit about graphics item of a terminal strip, Work in progress.
This commit is contained in:
@@ -163,7 +163,8 @@ HEADERS += $$files(sources/*.h) $$files(sources/ui/*.h) \
|
|||||||
$$files(sources/print/*.h) \
|
$$files(sources/print/*.h) \
|
||||||
$$files(sources/TerminalStrip/*.h) \
|
$$files(sources/TerminalStrip/*.h) \
|
||||||
$$files(sources/TerminalStrip/ui/*.h) \
|
$$files(sources/TerminalStrip/ui/*.h) \
|
||||||
$$files(sources/TerminalStrip/UndoCommand/*.h)
|
$$files(sources/TerminalStrip/UndoCommand/*.h) \
|
||||||
|
$$files(sources/TerminalStrip/GraphicsItem/*.h)
|
||||||
|
|
||||||
SOURCES += $$files(sources/*.cpp) \
|
SOURCES += $$files(sources/*.cpp) \
|
||||||
$$files(sources/editor/*.cpp) \
|
$$files(sources/editor/*.cpp) \
|
||||||
@@ -199,7 +200,8 @@ SOURCES += $$files(sources/*.cpp) \
|
|||||||
$$files(sources/print/*.cpp) \
|
$$files(sources/print/*.cpp) \
|
||||||
$$files(sources/TerminalStrip/*.cpp) \
|
$$files(sources/TerminalStrip/*.cpp) \
|
||||||
$$files(sources/TerminalStrip/ui/*.cpp) \
|
$$files(sources/TerminalStrip/ui/*.cpp) \
|
||||||
$$files(sources/TerminalStrip/UndoCommand/*.cpp)
|
$$files(sources/TerminalStrip/UndoCommand/*.cpp) \
|
||||||
|
$$files(sources/TerminalStrip/GraphicsItem/*.cpp)
|
||||||
|
|
||||||
# Needed for use promote QTreeWidget in terminalstripeditor.ui
|
# Needed for use promote QTreeWidget in terminalstripeditor.ui
|
||||||
INCLUDEPATH += sources/TerminalStrip/ui
|
INCLUDEPATH += sources/TerminalStrip/ui
|
||||||
|
|||||||
49
sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp
Normal file
49
sources/TerminalStrip/GraphicsItem/terminalstripitem.cpp
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2006-2022 The QElectroTech Team
|
||||||
|
This file is part of QElectroTech.
|
||||||
|
|
||||||
|
QElectroTech is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
QElectroTech is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "terminalstripitem.h"
|
||||||
|
#include "../../qetgraphicsitem/qgraphicsitemutility.h"
|
||||||
|
|
||||||
|
TerminalStripItem::TerminalStripItem(QPointer<TerminalStrip> strip, QGraphicsItem *parent) :
|
||||||
|
QetGraphicsItem{parent},
|
||||||
|
m_strip{strip},
|
||||||
|
m_drawer{strip}
|
||||||
|
{
|
||||||
|
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
|
||||||
|
setAcceptHoverEvents(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TerminalStripItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||||
|
{
|
||||||
|
Q_UNUSED(option)
|
||||||
|
Q_UNUSED(widget)
|
||||||
|
|
||||||
|
m_drawer.paint(painter);
|
||||||
|
|
||||||
|
if (isSelected() || isHovered())
|
||||||
|
{
|
||||||
|
QGIUtility::drawBoundingRectSelection(this, painter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QRectF TerminalStripItem::boundingRect() const
|
||||||
|
{
|
||||||
|
auto br_ = m_drawer.boundingRect();
|
||||||
|
br_.adjust(-5,-5,5,5);
|
||||||
|
|
||||||
|
return br_;
|
||||||
|
}
|
||||||
44
sources/TerminalStrip/GraphicsItem/terminalstripitem.h
Normal file
44
sources/TerminalStrip/GraphicsItem/terminalstripitem.h
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2006-2022 The QElectroTech Team
|
||||||
|
This file is part of QElectroTech.
|
||||||
|
|
||||||
|
QElectroTech is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
QElectroTech is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#ifndef TERMINALSTRIPITEM_H
|
||||||
|
#define TERMINALSTRIPITEM_H
|
||||||
|
|
||||||
|
#include <QGraphicsObject>
|
||||||
|
|
||||||
|
#include "terminalstriplayoutpattern.h"
|
||||||
|
#include "../../qetgraphicsitem/qetgraphicsitem.h"
|
||||||
|
|
||||||
|
class TerminalStrip;
|
||||||
|
|
||||||
|
class TerminalStripItem : public QetGraphicsItem
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
TerminalStripItem(QPointer<TerminalStrip> strip, QGraphicsItem *parent = nullptr);
|
||||||
|
|
||||||
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
|
||||||
|
QRectF boundingRect() const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QPointer<TerminalStrip> m_strip;
|
||||||
|
TerminalStripDrawer m_drawer;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TERMINALSTRIPITEM_H
|
||||||
@@ -0,0 +1,247 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2006-2022 The QElectroTech Team
|
||||||
|
This file is part of QElectroTech.
|
||||||
|
|
||||||
|
QElectroTech is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
QElectroTech is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "terminalstriplayoutpattern.h"
|
||||||
|
|
||||||
|
#include "../physicalterminal.h"
|
||||||
|
#include "../realterminal.h"
|
||||||
|
#include "../terminalstrip.h"
|
||||||
|
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TerminalStripDrawer::TerminalStripDrawer
|
||||||
|
* @param strip
|
||||||
|
* @param pattern
|
||||||
|
*/
|
||||||
|
TerminalStripDrawer::TerminalStripDrawer(QPointer<TerminalStrip> strip) :
|
||||||
|
m_strip(strip)
|
||||||
|
{}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief TerminalStripDrawer::paint
|
||||||
|
* @param painter
|
||||||
|
*/
|
||||||
|
void TerminalStripDrawer::paint(QPainter *painter)
|
||||||
|
{
|
||||||
|
if (m_strip)
|
||||||
|
{
|
||||||
|
//To draw text, QPainter need a Qrect. Instead of create an instance
|
||||||
|
//for each text, we re-use the same instance of QRect.
|
||||||
|
QRect text_rect;
|
||||||
|
painter->save();
|
||||||
|
|
||||||
|
auto pen_{painter->pen()};
|
||||||
|
pen_.setColor(Qt::black);
|
||||||
|
pen_.setWidth(1);
|
||||||
|
|
||||||
|
auto brush_ = painter->brush();
|
||||||
|
brush_.setColor(Qt::white);
|
||||||
|
|
||||||
|
painter->setPen(pen_);
|
||||||
|
painter->setBrush(brush_);
|
||||||
|
|
||||||
|
//Draw header
|
||||||
|
painter->drawRect(m_pattern.m_header_rect);
|
||||||
|
|
||||||
|
//Draw the header text
|
||||||
|
painter->save();
|
||||||
|
|
||||||
|
if (m_pattern.m_header_text_orientation == Qt::Horizontal)
|
||||||
|
{
|
||||||
|
text_rect.setRect(0,m_pattern.m_header_rect.y(),m_pattern.m_header_rect.width(),m_pattern.m_header_rect.height());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
painter->translate(m_pattern.m_header_rect.bottomLeft());
|
||||||
|
painter->rotate(270);
|
||||||
|
text_rect.setRect(0,0,m_pattern.m_header_rect.height(),m_pattern.m_header_rect.width());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto text_{m_strip->installation() + " " + m_strip->location() + " " + m_strip->name()};
|
||||||
|
painter->drawText(text_rect, text_, m_pattern.headerTextOption());
|
||||||
|
painter->restore();
|
||||||
|
|
||||||
|
//Move painter pos to next drawing
|
||||||
|
painter->translate(m_pattern.m_header_rect.width(),0);
|
||||||
|
|
||||||
|
//Draw spacer
|
||||||
|
painter->drawRect(m_pattern.m_spacer_rect);
|
||||||
|
//Move painter pos to next drawing
|
||||||
|
painter->translate(m_pattern.m_spacer_rect.width(),0);
|
||||||
|
|
||||||
|
|
||||||
|
//Draw terminals
|
||||||
|
const auto terminals_text_rect{m_pattern.m_terminals_text_rect};
|
||||||
|
const auto terminals_text_orientation{m_pattern.m_terminals_text_orientation};
|
||||||
|
const auto terminals_text_option{m_pattern.terminalsTextOption()};
|
||||||
|
QRect terminal_rect;
|
||||||
|
|
||||||
|
//Loop over physical terminals
|
||||||
|
for (const auto &physical_t : m_strip->physicalTerminal())
|
||||||
|
{
|
||||||
|
//Get the good offset according to how many level have the current physical terminal
|
||||||
|
const QVector<QSharedPointer<RealTerminal>> real_terminal{physical_t->realTerminals()};
|
||||||
|
const auto real_t_count{real_terminal.size()};
|
||||||
|
const auto offset_{4 - real_t_count};
|
||||||
|
|
||||||
|
//Loop over real terminals
|
||||||
|
for (auto i=0 ; i<real_t_count ; ++i)
|
||||||
|
{
|
||||||
|
const auto index_ = offset_ + i;
|
||||||
|
if (index_ >= 4) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
terminal_rect = m_pattern.m_terminal_rect[index_];
|
||||||
|
painter->drawRect(terminal_rect);
|
||||||
|
|
||||||
|
//Draw text
|
||||||
|
painter->save();
|
||||||
|
if (terminals_text_orientation[index_] == Qt::Horizontal)
|
||||||
|
{
|
||||||
|
text_rect = terminals_text_rect[index_];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const auto rect_{terminals_text_rect[index_]};
|
||||||
|
painter->translate(rect_.bottomLeft());
|
||||||
|
painter->rotate(270);
|
||||||
|
text_rect.setRect(0, 0, rect_.height(), rect_.width());
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto shared_real_terminal{real_terminal[i]};
|
||||||
|
painter->drawText(text_rect,
|
||||||
|
shared_real_terminal ? shared_real_terminal->label() : QLatin1String(),
|
||||||
|
terminals_text_option[index_]);
|
||||||
|
painter->restore();
|
||||||
|
|
||||||
|
//Move painter pos to next drawing
|
||||||
|
painter->translate(terminal_rect.width(),0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
painter->restore();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QRectF TerminalStripDrawer::boundingRect() const
|
||||||
|
{
|
||||||
|
return QRect{0, 0, width(), height()};;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerminalStripDrawer::height() const
|
||||||
|
{
|
||||||
|
auto height_{m_pattern.m_header_rect.y() + m_pattern.m_header_rect.height()};
|
||||||
|
|
||||||
|
height_ = std::max(height_, m_pattern.m_spacer_rect.y() + m_pattern.m_spacer_rect.height());
|
||||||
|
|
||||||
|
for (const auto &rect : m_pattern.m_terminal_rect) {
|
||||||
|
height_ = std::max(height_, rect.y() + rect.height());
|
||||||
|
}
|
||||||
|
|
||||||
|
return height_;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerminalStripDrawer::width() const
|
||||||
|
{
|
||||||
|
int width_{m_pattern.m_header_rect.width() + m_pattern.m_spacer_rect.width()};
|
||||||
|
|
||||||
|
if (m_strip)
|
||||||
|
{
|
||||||
|
//Loop over physical terminals
|
||||||
|
for (const auto &physical_t : m_strip->physicalTerminal())
|
||||||
|
{
|
||||||
|
//Get the good offset according to how many level have the current physical terminal
|
||||||
|
const QVector<QSharedPointer<RealTerminal>> real_terminal{physical_t->realTerminals()};
|
||||||
|
const auto real_t_count{real_terminal.size()};
|
||||||
|
const auto offset_{4 - real_t_count};
|
||||||
|
|
||||||
|
//Loop over real terminals
|
||||||
|
for (auto i=0 ; i<real_t_count ; ++i)
|
||||||
|
{
|
||||||
|
const auto index_ = offset_ + i;
|
||||||
|
if (index_ >= 4) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
width_ += m_pattern.m_terminal_rect[index_].width();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return width_;
|
||||||
|
}
|
||||||
|
|
||||||
|
TerminalStripLayoutPattern::TerminalStripLayoutPattern()
|
||||||
|
{
|
||||||
|
updateHeaderTextOption();
|
||||||
|
updateTerminalsTextOption();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TerminalStripLayoutPattern::setHeaderTextAlignment(const Qt::Alignment &alignment)
|
||||||
|
{
|
||||||
|
m_header_text_alignment = alignment;
|
||||||
|
updateHeaderTextOption();
|
||||||
|
}
|
||||||
|
|
||||||
|
Qt::Alignment TerminalStripLayoutPattern::headerTextAlignment() const
|
||||||
|
{
|
||||||
|
return m_header_text_alignment;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextOption TerminalStripLayoutPattern::headerTextOption() const {
|
||||||
|
return m_header_text_option;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TerminalStripLayoutPattern::setTerminalsTextAlignment(const QVector<Qt::Alignment> &alignment)
|
||||||
|
{
|
||||||
|
m_terminals_text_alignment = alignment;
|
||||||
|
updateTerminalsTextOption();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<Qt::Alignment> TerminalStripLayoutPattern::terminalsTextAlignment() const
|
||||||
|
{
|
||||||
|
return m_terminals_text_alignment;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<QTextOption> TerminalStripLayoutPattern::terminalsTextOption() const
|
||||||
|
{
|
||||||
|
return m_terminals_text_option;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TerminalStripLayoutPattern::updateHeaderTextOption()
|
||||||
|
{
|
||||||
|
m_header_text_option.setAlignment(m_header_text_alignment);
|
||||||
|
m_header_text_option.setWrapMode(QTextOption::WordWrap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TerminalStripLayoutPattern::updateTerminalsTextOption()
|
||||||
|
{
|
||||||
|
if (m_terminals_text_option.size() ==
|
||||||
|
m_terminals_text_alignment.size())
|
||||||
|
{
|
||||||
|
for (auto i = 0 ; i<m_terminals_text_option.size() ; ++i)
|
||||||
|
{
|
||||||
|
m_terminals_text_option[i].setAlignment(m_terminals_text_alignment.at(i));
|
||||||
|
m_terminals_text_option[i].setWrapMode(QTextOption::WordWrap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qDebug() << "TerminalStripLayoutPattern::updateTerminalsTextOption() : Wrong vector size";
|
||||||
|
}
|
||||||
|
}
|
||||||
130
sources/TerminalStrip/GraphicsItem/terminalstriplayoutpattern.h
Normal file
130
sources/TerminalStrip/GraphicsItem/terminalstriplayoutpattern.h
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2006-2022 The QElectroTech Team
|
||||||
|
This file is part of QElectroTech.
|
||||||
|
|
||||||
|
QElectroTech is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
QElectroTech is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#ifndef TERMINALSTRIPLAYOUTPATTERN_H
|
||||||
|
#define TERMINALSTRIPLAYOUTPATTERN_H
|
||||||
|
|
||||||
|
#include <QPointer>
|
||||||
|
#include <QSize>
|
||||||
|
#include <QTextOption>
|
||||||
|
#include <QVector>
|
||||||
|
#include <QRect>
|
||||||
|
|
||||||
|
class QPainter;
|
||||||
|
class TerminalStrip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The TerminalStripLayoutPattern class
|
||||||
|
* A class with all values used to define how a terminal strip must be drawn.
|
||||||
|
* Most of the value are public, some values are private and have getter / setter
|
||||||
|
* because when these values change we need to compute the change.
|
||||||
|
*
|
||||||
|
* The values with name '_y_offset' mean offset is relating to the top
|
||||||
|
* of the QGraphicsItem used to display the terminal strip.
|
||||||
|
*
|
||||||
|
* The terminal strip can display up to 4 terminal level,
|
||||||
|
* the value used for multilevel terminal are stored in several QVector (m_terminal_y_offset, m_terminal_height, m_bridge_point_y_offset).
|
||||||
|
* The order of the values are from the most back terminal to the front terminal.
|
||||||
|
*/
|
||||||
|
class TerminalStripLayoutPattern
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TerminalStripLayoutPattern();
|
||||||
|
|
||||||
|
//Header of terminal strip
|
||||||
|
QRect m_header_rect{0,30,50,130};
|
||||||
|
Qt::Orientation m_header_text_orientation{Qt::Horizontal};
|
||||||
|
void setHeaderTextAlignment(const Qt::Alignment &alignment);
|
||||||
|
Qt::Alignment headerTextAlignment() const;
|
||||||
|
QTextOption headerTextOption() const;
|
||||||
|
|
||||||
|
//Spacer between the header and the terminals
|
||||||
|
QRect m_spacer_rect{0, 50, 10, 90};
|
||||||
|
|
||||||
|
//Terminals
|
||||||
|
QVector<QRect> m_terminal_rect
|
||||||
|
{
|
||||||
|
QRect{0, 0, 20, 190},
|
||||||
|
QRect{0, 10, 20, 170},
|
||||||
|
QRect{0, 20, 20, 150},
|
||||||
|
QRect{0, 30, 20, 130}
|
||||||
|
};
|
||||||
|
|
||||||
|
void setTerminalsTextAlignment(const QVector<Qt::Alignment> &alignment);
|
||||||
|
QVector<Qt::Alignment> terminalsTextAlignment() const;
|
||||||
|
QVector<QTextOption> terminalsTextOption() const;
|
||||||
|
|
||||||
|
QVector<QRect> m_terminals_text_rect
|
||||||
|
{
|
||||||
|
QRect{0,35,20,50},
|
||||||
|
QRect{0,35,20,50},
|
||||||
|
QRect{0,35,20,50},
|
||||||
|
QRect{0,35,20,50}
|
||||||
|
};
|
||||||
|
QVector<Qt::Orientation> m_terminals_text_orientation
|
||||||
|
{
|
||||||
|
Qt::Vertical,
|
||||||
|
Qt::Vertical,
|
||||||
|
Qt::Vertical,
|
||||||
|
Qt::Vertical
|
||||||
|
};
|
||||||
|
|
||||||
|
int m_bridge_point_d{5};
|
||||||
|
QVector<int> m_bridge_point_y_offset{50,70,90,110};
|
||||||
|
|
||||||
|
private:
|
||||||
|
void updateHeaderTextOption();
|
||||||
|
void updateTerminalsTextOption();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Qt::Alignment m_header_text_alignment{Qt::AlignCenter};
|
||||||
|
QTextOption m_header_text_option;
|
||||||
|
|
||||||
|
QVector<Qt::Alignment> m_terminals_text_alignment
|
||||||
|
{
|
||||||
|
Qt::AlignRight | Qt::AlignVCenter,
|
||||||
|
Qt::AlignRight | Qt::AlignVCenter,
|
||||||
|
Qt::AlignRight | Qt::AlignVCenter,
|
||||||
|
Qt::AlignRight | Qt::AlignVCenter
|
||||||
|
};
|
||||||
|
QVector<QTextOption> m_terminals_text_option
|
||||||
|
{
|
||||||
|
QTextOption(),
|
||||||
|
QTextOption(),
|
||||||
|
QTextOption(),
|
||||||
|
QTextOption()
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class TerminalStripDrawer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TerminalStripDrawer(QPointer<TerminalStrip> strip);
|
||||||
|
void paint(QPainter *painter);
|
||||||
|
|
||||||
|
QRectF boundingRect() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int height() const;
|
||||||
|
int width() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QPointer<TerminalStrip> m_strip;
|
||||||
|
TerminalStripLayoutPattern m_pattern;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TERMINALSTRIPLAYOUTPATTERN_H
|
||||||
85
sources/TerminalStrip/ui/addterminalstripitemdialog.cpp
Normal file
85
sources/TerminalStrip/ui/addterminalstripitemdialog.cpp
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2006-2022 The QElectroTech Team
|
||||||
|
This file is part of QElectroTech.
|
||||||
|
|
||||||
|
QElectroTech is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
QElectroTech is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "addterminalstripitemdialog.h"
|
||||||
|
#include "ui_addterminalstripitemdialog.h"
|
||||||
|
|
||||||
|
#include "../terminalstrip.h"
|
||||||
|
#include "../GraphicsItem/terminalstripitem.h"
|
||||||
|
#include "../../diagram.h"
|
||||||
|
|
||||||
|
void AddTerminalStripItemDialog::openDialog(Diagram *diagram, QWidget *parent)
|
||||||
|
{
|
||||||
|
AddTerminalStripItemDialog d(diagram->project(), parent);
|
||||||
|
if (d.exec())
|
||||||
|
{
|
||||||
|
const auto strip_{d.selectedTerminalStrip()};
|
||||||
|
if (strip_)
|
||||||
|
{
|
||||||
|
auto item_ = new TerminalStripItem(strip_);
|
||||||
|
diagram->addItem(item_);
|
||||||
|
item_->setPos(20, 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AddTerminalStripItemDialog::AddTerminalStripItemDialog(QETProject *project, QWidget *parent) :
|
||||||
|
QDialog{parent},
|
||||||
|
m_project{project},
|
||||||
|
ui{new Ui::AddTerminalStripItemDialog}
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
fillComboBox();
|
||||||
|
}
|
||||||
|
|
||||||
|
AddTerminalStripItemDialog::~AddTerminalStripItemDialog()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief AddTerminalStripItemDialog::selectedTerminalStrip
|
||||||
|
* @return The selected terminal strip or nullptr if no one is selected
|
||||||
|
* or error encounted.
|
||||||
|
*/
|
||||||
|
TerminalStrip *AddTerminalStripItemDialog::selectedTerminalStrip() const
|
||||||
|
{
|
||||||
|
if (m_project)
|
||||||
|
{
|
||||||
|
QUuid uuid_{ui->m_terminal_strip_cb->currentData().toUuid()};
|
||||||
|
for (const auto &strip_ : m_project->terminalStrip())
|
||||||
|
{
|
||||||
|
if (strip_->uuid() == uuid_) {
|
||||||
|
return strip_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddTerminalStripItemDialog::fillComboBox()
|
||||||
|
{
|
||||||
|
if (m_project)
|
||||||
|
{
|
||||||
|
for (const auto strip_ : m_project->terminalStrip())
|
||||||
|
{
|
||||||
|
const auto text{strip_->installation() + " " + strip_->location() + " " + strip_->name()};
|
||||||
|
ui->m_terminal_strip_cb->addItem(text, strip_->uuid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
51
sources/TerminalStrip/ui/addterminalstripitemdialog.h
Normal file
51
sources/TerminalStrip/ui/addterminalstripitemdialog.h
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2006-2022 The QElectroTech Team
|
||||||
|
This file is part of QElectroTech.
|
||||||
|
|
||||||
|
QElectroTech is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
QElectroTech is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#ifndef ADDTERMINALSTRIPITEMDIALOG_H
|
||||||
|
#define ADDTERMINALSTRIPITEMDIALOG_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
|
class Diagram;
|
||||||
|
class QETDiagramEditor;
|
||||||
|
class QETProject;
|
||||||
|
class TerminalStrip;
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class AddTerminalStripItemDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class AddTerminalStripItemDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void openDialog(Diagram *diagram, QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
private:
|
||||||
|
explicit AddTerminalStripItemDialog(QETProject *project, QWidget *parent = nullptr);
|
||||||
|
~AddTerminalStripItemDialog();
|
||||||
|
TerminalStrip *selectedTerminalStrip() const;
|
||||||
|
void fillComboBox();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QPointer<QETProject> m_project;
|
||||||
|
Ui::AddTerminalStripItemDialog *ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // ADDTERMINALSTRIPITEMDIALOG_H
|
||||||
87
sources/TerminalStrip/ui/addterminalstripitemdialog.ui
Normal file
87
sources/TerminalStrip/ui/addterminalstripitemdialog.ui
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>AddTerminalStripItemDialog</class>
|
||||||
|
<widget class="QDialog" name="AddTerminalStripItemDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>326</width>
|
||||||
|
<height>100</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Ajouter le plan de bornes suivant :</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="m_terminal_strip_cb"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>AddTerminalStripItemDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>AddTerminalStripItemDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
@@ -44,6 +44,7 @@
|
|||||||
#include "diagram.h"
|
#include "diagram.h"
|
||||||
#include "TerminalStrip/ui/terminalstripeditorwindow.h"
|
#include "TerminalStrip/ui/terminalstripeditorwindow.h"
|
||||||
#include "ui/diagrameditorhandlersizewidget.h"
|
#include "ui/diagrameditorhandlersizewidget.h"
|
||||||
|
#include "TerminalStrip/ui/addterminalstripitemdialog.h"
|
||||||
|
|
||||||
#ifdef BUILD_WITHOUT_KF5
|
#ifdef BUILD_WITHOUT_KF5
|
||||||
#else
|
#else
|
||||||
@@ -664,6 +665,7 @@ void QETDiagramEditor::setUpActions()
|
|||||||
QAction *add_rectangle = m_add_item_actions_group.addAction(QET::Icons::PartRectangle, tr("Ajouter un rectangle"));
|
QAction *add_rectangle = m_add_item_actions_group.addAction(QET::Icons::PartRectangle, tr("Ajouter un rectangle"));
|
||||||
QAction *add_ellipse = m_add_item_actions_group.addAction(QET::Icons::PartEllipse, tr("Ajouter une ellipse"));
|
QAction *add_ellipse = m_add_item_actions_group.addAction(QET::Icons::PartEllipse, tr("Ajouter une ellipse"));
|
||||||
QAction *add_polyline = m_add_item_actions_group.addAction(QET::Icons::PartPolygon, tr("Ajouter une polyligne"));
|
QAction *add_polyline = m_add_item_actions_group.addAction(QET::Icons::PartPolygon, tr("Ajouter une polyligne"));
|
||||||
|
QAction *add_terminal_strip = m_add_item_actions_group.addAction(QET::Icons::TerminalStrip, tr("Ajouter un plan de bornes"));
|
||||||
|
|
||||||
add_text ->setStatusTip(tr("Ajoute un champ de texte sur le folio actuel"));
|
add_text ->setStatusTip(tr("Ajoute un champ de texte sur le folio actuel"));
|
||||||
add_image ->setStatusTip(tr("Ajoute une image sur le folio actuel"));
|
add_image ->setStatusTip(tr("Ajoute une image sur le folio actuel"));
|
||||||
@@ -671,6 +673,7 @@ void QETDiagramEditor::setUpActions()
|
|||||||
add_rectangle->setStatusTip(tr("Ajoute un rectangle sur le folio actuel"));
|
add_rectangle->setStatusTip(tr("Ajoute un rectangle sur le folio actuel"));
|
||||||
add_ellipse ->setStatusTip(tr("Ajoute une ellipse sur le folio actuel"));
|
add_ellipse ->setStatusTip(tr("Ajoute une ellipse sur le folio actuel"));
|
||||||
add_polyline ->setStatusTip(tr("Ajoute une polyligne sur le folio actuel"));
|
add_polyline ->setStatusTip(tr("Ajoute une polyligne sur le folio actuel"));
|
||||||
|
add_terminal_strip->setStatusTip(tr("Ajoute un plan de bornier sur le folio actuel"));
|
||||||
|
|
||||||
add_text ->setData("text");
|
add_text ->setData("text");
|
||||||
add_image ->setData("image");
|
add_image ->setData("image");
|
||||||
@@ -678,6 +681,7 @@ void QETDiagramEditor::setUpActions()
|
|||||||
add_rectangle->setData("rectangle");
|
add_rectangle->setData("rectangle");
|
||||||
add_ellipse ->setData("ellipse");
|
add_ellipse ->setData("ellipse");
|
||||||
add_polyline ->setData("polyline");
|
add_polyline ->setData("polyline");
|
||||||
|
add_terminal_strip->setData(QStringLiteral("terminal_strip"));
|
||||||
|
|
||||||
for(QAction *action : m_add_item_actions_group.actions()) {
|
for(QAction *action : m_add_item_actions_group.actions()) {
|
||||||
action->setCheckable(true);
|
action->setCheckable(true);
|
||||||
@@ -1430,7 +1434,17 @@ void QETDiagramEditor::addItemGroupTriggered(QAction *action)
|
|||||||
diagram_event = deai;
|
diagram_event = deai;
|
||||||
}
|
}
|
||||||
else if (value == "text")
|
else if (value == "text")
|
||||||
|
{
|
||||||
diagram_event = new DiagramEventAddText(d);
|
diagram_event = new DiagramEventAddText(d);
|
||||||
|
}
|
||||||
|
else if (value == QLatin1String("terminal_strip"))
|
||||||
|
{
|
||||||
|
const auto diagram_view{currentDiagramView()};
|
||||||
|
if (diagram_view)
|
||||||
|
{
|
||||||
|
AddTerminalStripItemDialog::openDialog(diagram_view->diagram(), this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (diagram_event)
|
if (diagram_event)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -64,6 +64,10 @@ void QetGraphicsItem::setPos(qreal x, qreal y) {
|
|||||||
setPos(QPointF(x, y));
|
setPos(QPointF(x, y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QetGraphicsItem::isHovered() const {
|
||||||
|
return m_hovered;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief QetGraphicsItem::state
|
@brief QetGraphicsItem::state
|
||||||
@return the current state of this item
|
@return the current state of this item
|
||||||
@@ -155,3 +159,15 @@ void QetGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
event->accept();
|
event->accept();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QetGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
||||||
|
{
|
||||||
|
m_hovered = true;
|
||||||
|
QGraphicsObject::hoverEnterEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QetGraphicsItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
|
||||||
|
{
|
||||||
|
m_hovered = false;
|
||||||
|
QGraphicsObject::hoverLeaveEvent(event);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2006-2021 The QElectroTech Team
|
Copyright 2006-2021 The QElectroTech Team
|
||||||
This file is part of QElectroTech.
|
This file is part of QElectroTech.
|
||||||
|
|
||||||
@@ -42,6 +42,8 @@ class QetGraphicsItem : public QGraphicsObject
|
|||||||
{return is_movable_;}
|
{return is_movable_;}
|
||||||
virtual void setMovable (bool movable) { is_movable_ = movable;}
|
virtual void setMovable (bool movable) { is_movable_ = movable;}
|
||||||
|
|
||||||
|
bool isHovered() const;
|
||||||
|
|
||||||
virtual void editProperty () {}
|
virtual void editProperty () {}
|
||||||
virtual QString name ()const
|
virtual QString name ()const
|
||||||
{return QString("");}
|
{return QString("");}
|
||||||
@@ -54,6 +56,8 @@ class QetGraphicsItem : public QGraphicsObject
|
|||||||
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
|
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
|
||||||
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
|
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
|
||||||
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
|
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
|
||||||
|
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
|
||||||
|
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool is_movable_;
|
bool is_movable_;
|
||||||
@@ -62,6 +66,9 @@ class QetGraphicsItem : public QGraphicsObject
|
|||||||
QPointF m_mouse_to_origin_movement;
|
QPointF m_mouse_to_origin_movement;
|
||||||
QET::GraphicsItemState m_state = QET:: GIOK;
|
QET::GraphicsItemState m_state = QET:: GIOK;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_hovered{false};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QETGRAPHICSITEM_H
|
#endif // QETGRAPHICSITEM_H
|
||||||
|
|||||||
@@ -90,5 +90,19 @@ bool centerToBottomDiagram (QGraphicsItem *item_to_center, Element *element_to_f
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void drawBoundingRectSelection(QGraphicsItem *item, QPainter *painter)
|
||||||
|
{
|
||||||
|
painter->save();
|
||||||
|
QPen t;
|
||||||
|
t.setColor(Qt::gray);
|
||||||
|
t.setStyle(Qt::DashDotLine);
|
||||||
|
t.setCosmetic(true);
|
||||||
|
|
||||||
|
painter->setPen(t);
|
||||||
|
painter->drawRoundedRect(item->boundingRect(),10,10);
|
||||||
|
painter->restore();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,11 +22,13 @@
|
|||||||
|
|
||||||
class QGraphicsItem;
|
class QGraphicsItem;
|
||||||
class Element;
|
class Element;
|
||||||
|
class QPainter;
|
||||||
|
|
||||||
namespace QGIUtility
|
namespace QGIUtility
|
||||||
{
|
{
|
||||||
bool centerToParentBottom (QGraphicsItem *item);
|
bool centerToParentBottom (QGraphicsItem *item);
|
||||||
bool centerToBottomDiagram (QGraphicsItem *item_to_center, Element *element_to_follow, qreal offset = 0 );
|
bool centerToBottomDiagram (QGraphicsItem *item_to_center, Element *element_to_follow, qreal offset = 0 );
|
||||||
|
void drawBoundingRectSelection(QGraphicsItem *item, QPainter *painter);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // QGRAPHICSITEMUTILITY_H
|
#endif // QGRAPHICSITEMUTILITY_H
|
||||||
|
|||||||
Reference in New Issue
Block a user