diff --git a/SingleApplication/singleapplication.pri b/SingleApplication/singleapplication.pri index 26f5c9c73..c37471304 100644 --- a/SingleApplication/singleapplication.pri +++ b/SingleApplication/singleapplication.pri @@ -1,5 +1,5 @@ QT += core network -CONFIG += c++11 +CONFIG += c++17 HEADERS += $$PWD/singleapplication.h \ $$PWD/singleapplication_p.h diff --git a/SingleApplication/singleapplication_p.cpp b/SingleApplication/singleapplication_p.cpp index 93112bbcf..b3553b0ee 100644 --- a/SingleApplication/singleapplication_p.cpp +++ b/SingleApplication/singleapplication_p.cpp @@ -43,9 +43,9 @@ #include "singleapplication_p.h" #ifdef Q_OS_UNIX - #include - #include - #include + #include + #include + #include #endif #ifdef Q_OS_WIN @@ -68,7 +68,7 @@ SingleApplicationPrivate::~SingleApplicationPrivate() socket->close(); delete socket; } - + memory->lock(); InstancesInfo* inst = static_cast(memory->data()); if( server != nullptr ) { @@ -79,7 +79,7 @@ SingleApplicationPrivate::~SingleApplicationPrivate() inst->checksum = blockChecksum(); } memory->unlock(); - + delete memory; } @@ -90,11 +90,11 @@ void SingleApplicationPrivate::genBlockServerName() appData.addData( SingleApplication::app_t::applicationName().toUtf8() ); appData.addData( SingleApplication::app_t::organizationName().toUtf8() ); appData.addData( SingleApplication::app_t::organizationDomain().toUtf8() ); - + if( ! (options & SingleApplication::Mode::ExcludeAppVersion) ) { appData.addData( SingleApplication::app_t::applicationVersion().toUtf8() ); } - + if( ! (options & SingleApplication::Mode::ExcludeAppPath) ) { #ifdef Q_OS_WIN appData.addData( SingleApplication::app_t::applicationFilePath().toLower().toUtf8() ); @@ -102,7 +102,7 @@ void SingleApplicationPrivate::genBlockServerName() appData.addData( SingleApplication::app_t::applicationFilePath().toUtf8() ); #endif } - + // User level block requires a user specific data in the hash if( options & SingleApplication::Mode::User ) { #ifdef Q_OS_WIN @@ -128,7 +128,7 @@ void SingleApplicationPrivate::genBlockServerName() appData.addData(username); #endif } - + // Replace the backslash in RFC 2045 Base64 [a-zA-Z0-9+/=] to comply with // server naming requirements. blockServerName = appData.result().toBase64().replace("/", "_"); @@ -146,12 +146,12 @@ void SingleApplicationPrivate::initializeMemoryBlock() void SingleApplicationPrivate::startPrimary() { Q_Q(SingleApplication); - + // Successful creation means that no main process exists // So we start a QLocalServer to listen for connections QLocalServer::removeServer( blockServerName ); server = new QLocalServer(); - + // Restrict access to the socket according to the // SingleApplication::Mode::User flag on User level or no restrictions if( options & SingleApplication::Mode::User ) { @@ -159,7 +159,7 @@ void SingleApplicationPrivate::startPrimary() } else { server->setSocketOptions( QLocalServer::WorldAccessOption ); } - + server->listen( blockServerName ); QObject::connect( server, @@ -167,14 +167,14 @@ void SingleApplicationPrivate::startPrimary() this, &SingleApplicationPrivate::slotConnectionEstablished ); - + // Reset the number of connections InstancesInfo* inst = static_cast ( memory->data() ); - + inst->primary = true; inst->primaryPid = q->applicationPid(); inst->checksum = blockChecksum(); - + instanceNumber = 0; } @@ -189,47 +189,62 @@ void SingleApplicationPrivate::connectToPrimary( int msecs, ConnectionType conne if( socket == nullptr ) { socket = new QLocalSocket(); } - + // If already connected - we are done; if( socket->state() == QLocalSocket::ConnectedState ) return; - + // If not connect if( socket->state() == QLocalSocket::UnconnectedState || socket->state() == QLocalSocket::ClosingState ) { socket->connectToServer( blockServerName ); } - + // Wait for being connected if( socket->state() == QLocalSocket::ConnectingState ) { socket->waitForConnected( msecs ); } - + // Initialisation message according to the SingleApplication protocol if( socket->state() == QLocalSocket::ConnectedState ) { // Notify the parent that a new instance had been started; QByteArray initMsg; QDataStream writeStream(&initMsg, QIODevice::WriteOnly); - + #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) writeStream.setVersion(QDataStream::Qt_5_6); #endif - + writeStream << blockServerName.toLatin1(); writeStream << static_cast(connectionType); writeStream << instanceNumber; - quint16 checksum = qChecksum(initMsg.constData(), static_cast(initMsg.length())); + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + quint16 checksum = + qChecksum( + initMsg.constData(), + static_cast(initMsg.length())); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + quint16 checksum = + qChecksum( + QByteArrayView( + initMsg.constData(), + static_cast(initMsg.length()))); +#endif writeStream << checksum; - + // The header indicates the message length that follows QByteArray header; QDataStream headerStream(&header, QIODevice::WriteOnly); - + #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) headerStream.setVersion(QDataStream::Qt_5_6); #endif headerStream << static_cast ( initMsg.length() ); - + socket->write( header ); socket->write( initMsg ); socket->flush(); @@ -239,21 +254,32 @@ void SingleApplicationPrivate::connectToPrimary( int msecs, ConnectionType conne quint16 SingleApplicationPrivate::blockChecksum() { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove return qChecksum( static_cast ( memory->data() ), offsetof( InstancesInfo, checksum ) ); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + return qChecksum( + QByteArrayView( + static_cast ( memory->data() ), + offsetof( InstancesInfo, checksum ))); + +#endif } qint64 SingleApplicationPrivate::primaryPid() { qint64 pid; - + memory->lock(); InstancesInfo* inst = static_cast( memory->data() ); pid = inst->primaryPid; memory->unlock(); - + return pid; } @@ -264,21 +290,21 @@ void SingleApplicationPrivate::slotConnectionEstablished() { QLocalSocket *nextConnSocket = server->nextPendingConnection(); connectionMap.insert(nextConnSocket, ConnectionInfo()); - + QObject::connect(nextConnSocket, &QLocalSocket::aboutToClose, [nextConnSocket, this]() { auto &info = connectionMap[nextConnSocket]; Q_EMIT this->slotClientConnectionClosed( nextConnSocket, info.instanceId ); } ); - + QObject::connect(nextConnSocket, &QLocalSocket::disconnected, [nextConnSocket, this](){ connectionMap.remove(nextConnSocket); nextConnSocket->deleteLater(); } ); - + QObject::connect(nextConnSocket, &QLocalSocket::readyRead, [nextConnSocket, this]() { auto &info = connectionMap[nextConnSocket]; @@ -304,24 +330,24 @@ void SingleApplicationPrivate::readInitMessageHeader( QLocalSocket *sock ) if (!connectionMap.contains( sock )) { return; } - + if( sock->bytesAvailable() < ( qint64 )sizeof( quint64 ) ) { return; } - + QDataStream headerStream( sock ); - + #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) headerStream.setVersion( QDataStream::Qt_5_6 ); #endif - + // Read the header to know the message length quint64 msgLen = 0; headerStream >> msgLen; ConnectionInfo &info = connectionMap[sock]; info.stage = StageBody; info.msgLen = msgLen; - + if ( sock->bytesAvailable() >= (qint64) msgLen ) { readInitMessageBody( sock ); } @@ -330,63 +356,76 @@ void SingleApplicationPrivate::readInitMessageHeader( QLocalSocket *sock ) void SingleApplicationPrivate::readInitMessageBody( QLocalSocket *sock ) { Q_Q(SingleApplication); - + if (!connectionMap.contains( sock )) { return; } - + ConnectionInfo &info = connectionMap[sock]; if( sock->bytesAvailable() < ( qint64 )info.msgLen ) { return; } - + // Read the message body QByteArray msgBytes = sock->read(info.msgLen); QDataStream readStream(msgBytes); - + #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)) readStream.setVersion( QDataStream::Qt_5_6 ); #endif - + // server name QByteArray latin1Name; readStream >> latin1Name; - + // connection type ConnectionType connectionType = InvalidConnection; quint8 connTypeVal = InvalidConnection; readStream >> connTypeVal; connectionType = static_cast ( connTypeVal ); - + // instance id quint32 instanceId = 0; readStream >> instanceId; - + // checksum quint16 msgChecksum = 0; readStream >> msgChecksum; - - const quint16 actualChecksum = qChecksum( msgBytes.constData(), static_cast( msgBytes.length() - sizeof( quint16 ) ) ); - + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + const quint16 actualChecksum = + qChecksum( + msgBytes.constData(), + static_cast( msgBytes.length() - sizeof( quint16 ) ) ); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + const quint16 actualChecksum = + qChecksum( + QByteArrayView( + msgBytes.constData(), + static_cast(msgBytes.length() - sizeof(quint16)))); +#endif bool isValid = readStream.status() == QDataStream::Ok && QLatin1String(latin1Name) == blockServerName && msgChecksum == actualChecksum; - + if( !isValid ) { sock->close(); return; } - + info.instanceId = instanceId; info.stage = StageConnected; - + if( connectionType == NewInstance || ( connectionType == SecondaryInstance && options & SingleApplication::Mode::SecondaryNotification ) ) { Q_EMIT q->instanceStarted(); } - + if (sock->bytesAvailable() > 0) { Q_EMIT this->slotDataAvailable( sock, instanceId ); } diff --git a/qelectrotech.pro b/qelectrotech.pro index af534afb5..426787070 100644 --- a/qelectrotech.pro +++ b/qelectrotech.pro @@ -220,7 +220,7 @@ UI_SOURCES_DIR = sources/ui/ UI_HEADERS_DIR = sources/ui/ # Configuration de la compilation -CONFIG += c++11 debug_and_release warn_on +CONFIG += c++17 debug_and_release warn_on # Nom du binaire genere par la compilation TARGET = qelectrotech @@ -229,8 +229,8 @@ TARGET = qelectrotech unix:QMAKE_LIBS_THREAD -= -lpthread unix|win32: LIBS += -lsqlite3 -# Enable C++11 -QMAKE_CXXFLAGS += -std=c++11 +# Enable C++17 +QMAKE_CXXFLAGS += -std=c++17 # Description de l'installation target.path = $$join(INSTALL_PREFIX,,,$${QET_BINARY_PATH}) diff --git a/sources/ElementsCollection/elementslocation.cpp b/sources/ElementsCollection/elementslocation.cpp index 2a074bc58..e1fb167c0 100644 --- a/sources/ElementsCollection/elementslocation.cpp +++ b/sources/ElementsCollection/elementslocation.cpp @@ -144,11 +144,23 @@ bool ElementsLocation::operator!=(const ElementsLocation &other) const */ QString ElementsLocation::baseName() const { - QRegExp regexp("^.*([^/]+)\\.elmt$"); - if (regexp.exactMatch(m_collection_path)) { - return(regexp.capturedTexts().at(1)); + QRegularExpression regexp("^.*(?[^/]+)\\.elmt$"); + if (!regexp.isValid()) + { + qWarning() <<"this is an error in the code" + << regexp.errorString() + << regexp.patternErrorOffset(); + return QString(); } - return(QString()); + + QRegularExpressionMatch match = regexp.match(m_collection_path); + if (!match.hasMatch()) + { + qDebug()<<"no Match => return" + < return" - <[a-z]+://.*)/.*$"); + if (!re.isValid()) + { + qWarning() + < return" + < + /** Constructeur @param diagram Schema a afficher ; si diagram vaut 0, un nouveau Diagram est utilise @@ -200,7 +202,19 @@ void DiagramView::handleElementDrop(QDropEvent *event) return; } - diagram()->setEventInterface(new DiagramEventAddElement(location, diagram(), mapToScene(event->pos()))); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + diagram()->setEventInterface( + new DiagramEventAddElement( + location, diagram(), mapToScene(event->pos()))); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + diagram()->setEventInterface( + new DiagramEventAddElement( + location, diagram(), event->position())); +#endif + //Set focus to the view to get event this->setFocus(); } @@ -268,7 +282,19 @@ void DiagramView::handleTextDrop(QDropEvent *e) { iti -> setHtml (e -> mimeData() -> text()); } - m_diagram -> undoStack().push(new AddItemCommand(iti, m_diagram, mapToScene(e->pos()))); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + + m_diagram -> undoStack().push( + new AddItemCommand( + iti, m_diagram, mapToScene(e->pos()))); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + m_diagram -> undoStack().push( + new AddItemCommand( + iti, m_diagram, e->position())); +#endif } /** @@ -423,7 +449,14 @@ void DiagramView::mousePressEvent(QMouseEvent *e) if (m_event_interface && m_event_interface->mousePressEvent(e)) return; //Start drag view when hold the middle button +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove if (e->button() == Qt::MidButton) +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + if (e->button() == Qt::MiddleButton) +#endif { m_drag_last_pos = e->pos(); viewport()->setCursor(Qt::ClosedHandCursor); @@ -473,7 +506,14 @@ void DiagramView::mouseMoveEvent(QMouseEvent *e) if (m_event_interface && m_event_interface->mouseMoveEvent(e)) return; //Drag the view - if (e->buttons() == Qt::MidButton) +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + if (e->button() == Qt::MidButton) +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + if (e->button() == Qt::MiddleButton) +#endif { QScrollBar *h = horizontalScrollBar(); QScrollBar *v = verticalScrollBar(); @@ -534,7 +574,14 @@ void DiagramView::mouseReleaseEvent(QMouseEvent *e) if (m_event_interface && m_event_interface->mouseReleaseEvent(e)) return; //Stop drag view - if (e -> button() == Qt::MidButton) +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + if (e->button() == Qt::MidButton) +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + if (e->button() == Qt::MiddleButton) +#endif { viewport()->setCursor(Qt::ArrowCursor); } @@ -567,7 +614,15 @@ void DiagramView::mouseReleaseEvent(QMouseEvent *e) }); QMenu *menu = new QMenu(this); menu->addAction(act); + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove menu->popup(e->globalPos()); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + menu->popup(e->pos()); +#endif } m_free_rubberbanding = false; diff --git a/sources/editor/elementview.cpp b/sources/editor/elementview.cpp index 8eb65c465..7dcf2e3e1 100644 --- a/sources/editor/elementview.cpp +++ b/sources/editor/elementview.cpp @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -58,14 +58,14 @@ QRectF ElementView::viewedSceneRect() const { // recupere la taille du widget viewport QSize viewport_size = viewport() -> size(); - + // recupere la transformation viewport -> scene QTransform view_to_scene = viewportTransform().inverted(); - + // mappe le coin superieur gauche et le coin inferieur droit de la viewport sur la scene QPointF scene_left_top = view_to_scene.map(QPointF(0.0, 0.0)); QPointF scene_right_bottom = view_to_scene.map(QPointF(viewport_size.width(), viewport_size.height())); - + // en deduit le rectangle visualise par la scene return(QRectF(scene_left_top, scene_right_bottom)); } @@ -213,10 +213,10 @@ void ElementView::paste() { QString clipboard_text = QApplication::clipboard() -> text(); if (clipboard_text.isEmpty()) return; - + QDomDocument document_xml; if (!document_xml.setContent(clipboard_text)) return; - + if (m_scene -> wasCopiedFromThisElement(clipboard_text)) { // copier/coller avec decalage pasteWithOffset(document_xml); @@ -224,7 +224,7 @@ void ElementView::paste() // copier/coller par choix de la zone de collage QRectF pasted_content_bounding_rect = m_scene -> boundingRectFromXml(document_xml); if (pasted_content_bounding_rect.isEmpty()) return; - + to_paste_in_area_ = clipboard_text; getPasteArea(pasted_content_bounding_rect); } @@ -238,13 +238,13 @@ void ElementView::pasteInArea() { QString clipboard_text = QApplication::clipboard() -> text(); if (clipboard_text.isEmpty()) return; - + QDomDocument document_xml; if (!document_xml.setContent(clipboard_text)) return; - + QRectF pasted_content_bounding_rect = m_scene -> boundingRectFromXml(document_xml); if (pasted_content_bounding_rect.isEmpty()) return; - + // copier/coller par choix de la zone de collage to_paste_in_area_ = clipboard_text; getPasteArea(pasted_content_bounding_rect); @@ -260,10 +260,10 @@ void ElementView::pasteInArea() ElementContent ElementView::paste(const QPointF &position) { QString clipboard_text = QApplication::clipboard() -> text(); if (clipboard_text.isEmpty()) return(ElementContent()); - + QDomDocument document_xml; if (!document_xml.setContent(clipboard_text)) return(ElementContent()); - + // objet pour recuperer le contenu ajoute au schema par le coller return(paste(document_xml, position)); } @@ -274,7 +274,7 @@ ElementContent ElementView::paste(const QPointF &position) { void ElementView::getPasteArea(const QRectF &to_paste) { // on copie le rectangle fourni - on s'interesse a ses dimensions, pas a sa position QRectF used_rect(to_paste); - + // on lui attribue pour centre l'origine du repere if (underMouse()) { used_rect.moveCenter(mapToScene(mapFromGlobal(QCursor::pos()))); @@ -290,7 +290,7 @@ void ElementView::getPasteArea(const QRectF &to_paste) { */ ElementContent ElementView::pasteAreaDefined(const QRectF &target_rect) { if (to_paste_in_area_.isEmpty()) return(ElementContent()); - + QDomDocument xml_document; if (!xml_document.setContent(to_paste_in_area_)) { to_paste_in_area_.clear(); @@ -309,7 +309,7 @@ ElementContent ElementView::paste(const QDomDocument &xml_document, const QPoint // objet pour recuperer le contenu ajoute au schema par le coller ElementContent content_pasted; m_scene -> fromXml(xml_document, pos, false, &content_pasted); - + // si quelque chose a effectivement ete ajoute au schema, on cree un objet d'annulation if (content_pasted.count()) { m_scene -> clearSelection(); @@ -326,11 +326,11 @@ ElementContent ElementView::paste(const QDomDocument &xml_document, const QPoint ElementContent ElementView::pasteWithOffset(const QDomDocument &xml_document) { // objet pour recuperer le contenu ajoute au schema par le coller ElementContent content_pasted; - + // rectangle source QRectF pasted_content_bounding_rect = m_scene -> boundingRectFromXml(xml_document); if (pasted_content_bounding_rect.isEmpty()) return(content_pasted); - + // copier/coller avec decalage QRectF final_pasted_content_bounding_rect; ++ offset_paste_count_; @@ -346,7 +346,7 @@ ElementContent ElementView::pasteWithOffset(const QDomDocument &xml_document) { } else { pasted_content_bounding_rect.moveTopLeft(start_top_left_corner_); } - + // on applique le decalage qui convient final_pasted_content_bounding_rect = applyMovement( pasted_content_bounding_rect, @@ -356,7 +356,7 @@ ElementContent ElementView::pasteWithOffset(const QDomDocument &xml_document) { QPointF old_start_top_left_corner = start_top_left_corner_; start_top_left_corner_ = final_pasted_content_bounding_rect.topLeft(); m_scene -> fromXml(xml_document, start_top_left_corner_, false, &content_pasted); - + // si quelque chose a effectivement ete ajoute au schema, on cree un objet d'annulation if (content_pasted.count()) { m_scene -> clearSelection(); @@ -373,7 +373,14 @@ ElementContent ElementView::pasteWithOffset(const QDomDocument &xml_document) { @param e QMouseEvent decrivant l'evenement souris */ void ElementView::mousePressEvent(QMouseEvent *e) { - if (e->buttons() == Qt::MidButton) +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + if (e->button() == Qt::MidButton) +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + if (e->button() == Qt::MiddleButton) +#endif { setCursor( (Qt::ClosedHandCursor)); reference_view_ = e->pos(); @@ -387,7 +394,14 @@ void ElementView::mousePressEvent(QMouseEvent *e) { Manage the event move mouse */ void ElementView::mouseMoveEvent(QMouseEvent *e) { - if (e->buttons() == Qt::MidButton) +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + if (e->button() == Qt::MidButton) +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + if (e->button() == Qt::MiddleButton) +#endif { QScrollBar *h = horizontalScrollBar(); QScrollBar *v = verticalScrollBar(); @@ -405,7 +419,15 @@ void ElementView::mouseMoveEvent(QMouseEvent *e) { Manage event release click mouse */ void ElementView::mouseReleaseEvent(QMouseEvent *e) { - if (e -> button() == Qt::MidButton) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + if (e->button() == Qt::MidButton) +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + if (e->button() == Qt::MiddleButton) +#endif + { setCursor(Qt::ArrowCursor); adjustSceneRect(); return; @@ -484,20 +506,20 @@ bool ElementView::gestureEvent(QGestureEvent *event){ */ void ElementView::drawBackground(QPainter *p, const QRectF &r) { p -> save(); - + // desactive tout antialiasing, sauf pour le texte p -> setRenderHint(QPainter::Antialiasing, false); p -> setRenderHint(QPainter::TextAntialiasing, true); p -> setRenderHint(QPainter::SmoothPixmapTransform, false); - + // dessine un fond blanc p -> setPen(Qt::NoPen); p -> setBrush(Qt::white); p -> drawRect(r); - + // determine le zoom en cours qreal zoom_factor = transform().m11(); - + // choisit la granularite de la grille en fonction du zoom en cours int drawn_x_grid = 1;//scene_ -> xGrid(); int drawn_y_grid = 1;//scene_ -> yGrid(); @@ -516,13 +538,13 @@ void ElementView::drawBackground(QPainter *p, const QRectF &r) { } else if (zoom_factor < 10.0) { //< grid 2*2 drawn_x_grid *= 2; drawn_y_grid *= 2; - draw_cross = true; + draw_cross = true; } else { //< grid 1*1 draw_cross = true; } m_scene->setGrid(drawn_x_grid, drawn_y_grid); - + if (draw_grid) { // draw the dot of the grid QPen pen(Qt::black); @@ -531,12 +553,12 @@ void ElementView::drawBackground(QPainter *p, const QRectF &r) { p -> setBrush(Qt::NoBrush); qreal limite_x = r.x() + r.width(); qreal limite_y = r.y() + r.height(); - + int g_x = (int)ceil(r.x()); while (g_x % drawn_x_grid) ++ g_x; int g_y = (int)ceil(r.y()); while (g_y % drawn_y_grid) ++ g_y; - + for (int gx = g_x ; gx < limite_x ; gx += drawn_x_grid) { for (int gy = g_y ; gy < limite_y ; gy += drawn_y_grid) { if (draw_cross) { diff --git a/sources/editor/graphicspart/partarc.cpp b/sources/editor/graphicspart/partarc.cpp index c58b2c8ec..1b3430d8c 100644 --- a/sources/editor/graphicspart/partarc.cpp +++ b/sources/editor/graphicspart/partarc.cpp @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -61,9 +61,16 @@ void PartArc::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, //Always remove the brush painter -> setBrush(Qt::NoBrush); QPen t = painter -> pen(); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove t.setCosmetic(options && options -> levelOfDetail < 1.0); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + t.setCosmetic(options && options -> levelOfDetailFromTransform(painter->worldTransform()) < 1.0); +#endif painter -> setPen(t); - + if (isSelected()) { painter->save(); @@ -79,7 +86,7 @@ void PartArc::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, t.setColor(Qt::red); painter -> setPen(t); } - + painter->drawArc(m_rect, m_start_angle, m_span_angle); if (m_hovered) @@ -196,8 +203,8 @@ QVariant PartArc::itemChange(QGraphicsItem::GraphicsItemChange change, const QVa { //When item is selected, he must to be up to date whene the selection in the scene change, for display or not the handler, //according to the number of selected items. - connect(scene(), &QGraphicsScene::selectionChanged, this, &PartArc::sceneSelectionChanged); - + connect(scene(), &QGraphicsScene::selectionChanged, this, &PartArc::sceneSelectionChanged); + if (scene()->selectedItems().size() == 1) addHandler(); } @@ -215,10 +222,10 @@ QVariant PartArc::itemChange(QGraphicsItem::GraphicsItemChange change, const QVa { if(scene()) disconnect(scene(), &QGraphicsScene::selectionChanged, this, &PartArc::sceneSelectionChanged); - + setSelected(false); //This is item removed from scene, then we deselect this, and so, the handlers is also removed. } - + return QGraphicsItem::itemChange(change, value); } @@ -234,7 +241,7 @@ bool PartArc::sceneEventFilter(QGraphicsItem *watched, QEvent *event) if(watched->type() == QetGraphicsHandlerItem::Type) { QetGraphicsHandlerItem *qghi = qgraphicsitem_cast(watched); - + if(m_handler_vector.contains(qghi)) //Handler must be in m_vector_index, then we can start resize { m_vector_index = m_handler_vector.indexOf(qghi); @@ -258,7 +265,7 @@ bool PartArc::sceneEventFilter(QGraphicsItem *watched, QEvent *event) } } } - + return false; } @@ -266,7 +273,7 @@ bool PartArc::sceneEventFilter(QGraphicsItem *watched, QEvent *event) @brief PartArc::switchResizeMode */ void PartArc::switchResizeMode() -{ +{ if (m_resize_mode == 1) { m_resize_mode = 2; @@ -274,24 +281,24 @@ void PartArc::switchResizeMode() qghi->setColor(Qt::darkGreen); } else if (m_resize_mode == 2) - { + { m_resize_mode = 3; - + //From rect mode to angle mode, then numbers of handlers change removeHandler(); addHandler(); - + for (QetGraphicsHandlerItem *qghi : m_handler_vector) qghi->setColor(Qt::magenta); } else - { + { m_resize_mode = 1; - + //From angle mode to rect mode, then numbers of handlers change removeHandler(); addHandler(); - + for (QetGraphicsHandlerItem *qghi : m_handler_vector) qghi->setColor(Qt::blue); } @@ -304,21 +311,21 @@ void PartArc::adjusteHandlerPos() { if (m_handler_vector.isEmpty()) return; - + QVector points_vector; - + if(m_resize_mode == 3) points_vector = QetGraphicsHandlerUtility::pointsForArc(m_rect, m_start_angle/16, m_span_angle/16); else points_vector = QetGraphicsHandlerUtility::pointsForRect(m_rect); - - + + if (m_handler_vector.size() == points_vector.size()) { points_vector = mapToScene(points_vector); for (int i = 0 ; i < points_vector.size() ; ++i) m_handler_vector.at(i)->setPos(points_vector.at(i)); - } + } } /** @@ -330,7 +337,7 @@ void PartArc::handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphicsScen { Q_UNUSED(qghi) Q_UNUSED(event) - + if (m_resize_mode == 3) //Resize angle { if (m_vector_index == 0) @@ -368,12 +375,12 @@ void PartArc::handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphicsScen void PartArc::handlerMouseMoveEvent(QetGraphicsHandlerItem *qghi, QGraphicsSceneMouseEvent *event) { Q_UNUSED(qghi) - + QPointF new_pos = event->scenePos(); if (event->modifiers() != Qt::ControlModifier) new_pos = elementScene()->snapToGrid(event->scenePos()); new_pos = mapFromScene(new_pos); - + if (m_resize_mode == 1) setRect(QetGraphicsHandlerUtility::rectForPosAtIndex(m_rect, new_pos, m_vector_index)); else if (m_resize_mode == 2) @@ -403,7 +410,7 @@ void PartArc::handlerMouseReleaseEvent(QetGraphicsHandlerItem *qghi, QGraphicsSc { Q_UNUSED(qghi) Q_UNUSED(event) - + if (m_resize_mode == 3) { if (m_vector_index == 0) @@ -461,7 +468,7 @@ void PartArc::addHandler() } else m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(QetGraphicsHandlerUtility::pointsForRect(m_rect))); - + for(QetGraphicsHandlerItem *handler : m_handler_vector) { QColor color = Qt::blue; @@ -469,7 +476,7 @@ void PartArc::addHandler() color = Qt::darkGreen; else if (m_resize_mode == 3) color = Qt::magenta; - + handler->setColor(color); scene()->addItem(handler); handler->installSceneEventFilter(this); diff --git a/sources/editor/graphicspart/partellipse.cpp b/sources/editor/graphicspart/partellipse.cpp index 8e30f2636..c121e6135 100644 --- a/sources/editor/graphicspart/partellipse.cpp +++ b/sources/editor/graphicspart/partellipse.cpp @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -55,8 +55,15 @@ void PartEllipse::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio applyStylesToQPainter(*painter); QPen t = painter -> pen(); - t.setCosmetic(options && options -> levelOfDetail < 1.0); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + t.setCosmetic(options && options -> levelOfDetail < 1.0); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + t.setCosmetic(options && options -> levelOfDetailFromTransform(painter->worldTransform()) < 1.0); +#endif if (isSelected()) t.setColor(Qt::red); @@ -159,7 +166,7 @@ void PartEllipse::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton && event->buttonDownPos(Qt::LeftButton) == event->pos()) switchResizeMode(); - + CustomElementGraphicPart::mouseReleaseEvent(event); } @@ -177,8 +184,8 @@ QVariant PartEllipse::itemChange(QGraphicsItem::GraphicsItemChange change, const { //When item is selected, he must to be up to date whene the selection in the scene change, for display or not the handler, //according to the number of selected items. - connect(scene(), &QGraphicsScene::selectionChanged, this, &PartEllipse::sceneSelectionChanged); - + connect(scene(), &QGraphicsScene::selectionChanged, this, &PartEllipse::sceneSelectionChanged); + if (scene()->selectedItems().size() == 1) addHandler(); } @@ -196,10 +203,10 @@ QVariant PartEllipse::itemChange(QGraphicsItem::GraphicsItemChange change, const { if(scene()) disconnect(scene(), &QGraphicsScene::selectionChanged, this, &PartEllipse::sceneSelectionChanged); - + setSelected(false); //This item is removed from scene, then we deselect this, and so, the handlers is also removed. } - + return QGraphicsItem::itemChange(change, value); } @@ -215,7 +222,7 @@ bool PartEllipse::sceneEventFilter(QGraphicsItem *watched, QEvent *event) if(watched->type() == QetGraphicsHandlerItem::Type) { QetGraphicsHandlerItem *qghi = qgraphicsitem_cast(watched); - + if(m_handler_vector.contains(qghi)) //Handler must be in m_vector_index, then we can start resize { m_vector_index = m_handler_vector.indexOf(qghi); @@ -239,7 +246,7 @@ bool PartEllipse::sceneEventFilter(QGraphicsItem *watched, QEvent *event) } } } - + return false; } @@ -266,9 +273,9 @@ void PartEllipse::adjusteHandlerPos() { if (m_handler_vector.isEmpty()) return; - + QVector points_vector = QetGraphicsHandlerUtility::pointsForRect(m_rect); - + if (m_handler_vector.size() == points_vector.size()) { points_vector = mapToScene(points_vector); @@ -290,7 +297,7 @@ void PartEllipse::handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphics m_undo_command = new QPropertyUndoCommand(this, "rect", QVariant(m_rect)); m_undo_command->setText(tr("Modifier un rectangle")); m_undo_command->enableAnimation(); - return; + return; } /** @@ -301,17 +308,17 @@ void PartEllipse::handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphics void PartEllipse::handlerMouseMoveEvent(QetGraphicsHandlerItem *qghi, QGraphicsSceneMouseEvent *event) { Q_UNUSED(qghi); - + QPointF new_pos = event->scenePos(); if (event->modifiers() != Qt::ControlModifier) new_pos = elementScene()->snapToGrid(event->scenePos()); new_pos = mapFromScene(new_pos); - + if (m_resize_mode == 1) setRect(QetGraphicsHandlerUtility::rectForPosAtIndex(m_rect, new_pos, m_vector_index)); else setRect(QetGraphicsHandlerUtility::mirrorRectForPosAtIndex(m_rect, new_pos, m_vector_index)); - + adjusteHandlerPos(); } @@ -324,7 +331,7 @@ void PartEllipse::handlerMouseReleaseEvent(QetGraphicsHandlerItem *qghi, QGraphi { Q_UNUSED(qghi); Q_UNUSED(event); - + m_undo_command->setNewValue(QVariant(m_rect)); elementScene()->undoStack().push(m_undo_command); m_undo_command = nullptr; @@ -350,15 +357,15 @@ void PartEllipse::sceneSelectionChanged() void PartEllipse::addHandler() { if (m_handler_vector.isEmpty() && scene()) - { + { m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(QetGraphicsHandlerUtility::pointsForRect(m_rect))); - + for(QetGraphicsHandlerItem *handler : m_handler_vector) { QColor color = Qt::blue; if (m_resize_mode == 2) color = Qt::darkGreen; - + handler->setColor(color); scene()->addItem(handler); handler->installSceneEventFilter(this); diff --git a/sources/editor/graphicspart/partline.cpp b/sources/editor/graphicspart/partline.cpp index 6e6a799c1..304406e2e 100644 --- a/sources/editor/graphicspart/partline.cpp +++ b/sources/editor/graphicspart/partline.cpp @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -42,7 +42,7 @@ PartLine::~PartLine() { if(m_undo_command) delete m_undo_command; - + removeHandler(); } @@ -79,12 +79,19 @@ void PartLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, applyStylesToQPainter(*painter); QPen t = painter -> pen(); t.setJoinStyle(Qt::MiterJoin); - t.setCosmetic(options && options -> levelOfDetail < 1.0); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + t.setCosmetic(options && options -> levelOfDetail < 1.0); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + t.setCosmetic(options && options -> levelOfDetailFromTransform(painter->worldTransform()) < 1.0); +#endif if (isSelected()) t.setColor(Qt::red); painter -> setPen(t); - + if (first_end || second_end) painter -> drawPath(path()); else @@ -106,7 +113,7 @@ const QDomElement PartLine::toXml(QDomDocument &xml_document) const { QPointF p1(sceneP1()); QPointF p2(sceneP2()); - + QDomElement xml_element = xml_document.createElement("line"); xml_element.setAttribute("x1", QString("%1").arg(p1.x())); xml_element.setAttribute("y1", QString("%1").arg(p1.y())); @@ -116,7 +123,7 @@ const QDomElement PartLine::toXml(QDomDocument &xml_document) const xml_element.setAttribute("length1", QString("%1").arg(first_length)); xml_element.setAttribute("end2", Qet::endTypeToString(second_end)); xml_element.setAttribute("length2", QString("%1").arg(second_length)); - + stylesToXml(xml_element); return(xml_element); } @@ -153,8 +160,8 @@ QVariant PartLine::itemChange(QGraphicsItem::GraphicsItemChange change, const QV { //When item is selected, he must to be up to date whene the selection in the scene change, for display or not the handler, //according to the number of selected items. - connect(scene(), &QGraphicsScene::selectionChanged, this, &PartLine::sceneSelectionChanged); - + connect(scene(), &QGraphicsScene::selectionChanged, this, &PartLine::sceneSelectionChanged); + if (scene()->selectedItems().size() == 1) addHandler(); } @@ -172,10 +179,10 @@ QVariant PartLine::itemChange(QGraphicsItem::GraphicsItemChange change, const QV { if(scene()) disconnect(scene(), &QGraphicsScene::selectionChanged, this, &PartLine::sceneSelectionChanged); - + setSelected(false); //This is item removed from scene, then we deselect this, and so, the handlers is also removed. } - + return QGraphicsItem::itemChange(change, value); } @@ -191,7 +198,7 @@ bool PartLine::sceneEventFilter(QGraphicsItem *watched, QEvent *event) if(watched->type() == QetGraphicsHandlerItem::Type) { QetGraphicsHandlerItem *qghi = qgraphicsitem_cast(watched); - + if(m_handler_vector.contains(qghi)) //Handler must be in m_vector_index, then we can start resize { m_vector_index = m_handler_vector.indexOf(qghi); @@ -215,7 +222,7 @@ bool PartLine::sceneEventFilter(QGraphicsItem *watched, QEvent *event) } } } - + return false; } @@ -227,10 +234,10 @@ void PartLine::adjusteHandlerPos() { if(m_handler_vector.isEmpty()) return; - + QVector points_vector; points_vector << m_line.p1() << m_line.p2(); - + if (m_handler_vector.size() == points_vector.size()) { points_vector = mapToScene(points_vector); @@ -248,7 +255,7 @@ void PartLine::handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphicsSce { Q_UNUSED(qghi) Q_UNUSED(event) - + m_undo_command = new QPropertyUndoCommand(this, "line", QVariant(m_line)); m_undo_command->setText(tr("Modifier une ligne")); m_undo_command->enableAnimation(); @@ -263,12 +270,12 @@ void PartLine::handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphicsSce void PartLine::handlerMouseMoveEvent(QetGraphicsHandlerItem *qghi, QGraphicsSceneMouseEvent *event) { Q_UNUSED(qghi) - + QPointF new_pos = event->scenePos(); if (event->modifiers() != Qt::ControlModifier) new_pos = elementScene()->snapToGrid(event->scenePos()); new_pos = mapFromScene(new_pos); - + prepareGeometryChange(); if (m_vector_index == 0) m_line.setP1(new_pos); @@ -276,7 +283,7 @@ void PartLine::handlerMouseMoveEvent(QetGraphicsHandlerItem *qghi, QGraphicsScen m_line.setP2(new_pos); emit lineChanged(); - + adjusteHandlerPos(); } @@ -289,7 +296,7 @@ void PartLine::handlerMouseReleaseEvent(QetGraphicsHandlerItem *qghi, QGraphicsS { Q_UNUSED(qghi) Q_UNUSED(event) - + m_undo_command->setNewValue(QVariant(m_line)); elementScene()->undoStack().push(m_undo_command); m_undo_command = nullptr; @@ -318,9 +325,9 @@ void PartLine::addHandler() { QVector points_vector; points_vector << m_line.p1() << m_line.p2(); - + m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(points_vector)); - + for(QetGraphicsHandlerItem *handler : m_handler_vector) { handler->setColor(Qt::blue); @@ -416,12 +423,12 @@ QRectF PartLine::firstEndCircleRect() const QList interesting_points = fourEndPoints(m_line.p1(), m_line.p2(), first_length); - + QRectF end_rect( interesting_points[0] - QPointF(first_length, first_length), QSizeF(2.0 * first_length, 2.0 * first_length) ); - + return(end_rect); } @@ -434,12 +441,12 @@ QRectF PartLine::secondEndCircleRect() const QList interesting_points = fourEndPoints(m_line.p2(), m_line.p1(), second_length); - + QRectF end_rect( interesting_points[0] - QPointF(second_length, second_length), QSizeF(2.0 * second_length, 2.0 * second_length) ); - + return(end_rect); } @@ -448,7 +455,7 @@ QRectF PartLine::secondEndCircleRect() const @return the bounding rect of this part */ QRectF PartLine::boundingRect() const -{ +{ QRectF bound; if (first_end || second_end) bound = path().boundingRect(); @@ -537,13 +544,13 @@ QList PartLine::fourEndPoints(const QPointF &end_point, const QPointF & //Unitary vector and perpendicular vector QPointF u(line_vector / line_length * length); QPointF v(-u.y(), u.x()); - + // points O, A, B, C QPointF o(end_point - u); QPointF a(o - u); QPointF b(o + v); QPointF c(o - v); - + return(QList() << o << a << b << c); } diff --git a/sources/editor/graphicspart/partpolygon.cpp b/sources/editor/graphicspart/partpolygon.cpp index e859ef8b4..0875781de 100644 --- a/sources/editor/graphicspart/partpolygon.cpp +++ b/sources/editor/graphicspart/partpolygon.cpp @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -66,7 +66,14 @@ void PartPolygon::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio applyStylesToQPainter(*painter); QPen t = painter -> pen(); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove t.setCosmetic(options && options -> levelOfDetail < 1.0); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + t.setCosmetic(options && options -> levelOfDetailFromTransform(painter->worldTransform()) < 1.0); +#endif if (isSelected()) t.setColor(Qt::red); painter -> setPen(t); @@ -95,7 +102,7 @@ void PartPolygon::fromXml(const QDomElement &qde) else break; } - + QPolygonF temp_polygon; for (int j = 1 ; j < i ; ++ j) { @@ -103,7 +110,7 @@ void PartPolygon::fromXml(const QDomElement &qde) qde.attribute(QString("y%1").arg(j)).toDouble()); } m_polygon = temp_polygon; - + m_closed = qde.attribute("closed") != "false"; } @@ -290,7 +297,7 @@ void PartPolygon::resetAllHandlerColor() @brief PartPolygon::itemChange @param change @param value - @return + @return */ QVariant PartPolygon::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) { @@ -300,8 +307,8 @@ QVariant PartPolygon::itemChange(QGraphicsItem::GraphicsItemChange change, const { //When item is selected, he must to be up to date whene the selection in the scene change, for display or not the handler, //according to the number of selected items. - connect(scene(), &QGraphicsScene::selectionChanged, this, &PartPolygon::sceneSelectionChanged); - + connect(scene(), &QGraphicsScene::selectionChanged, this, &PartPolygon::sceneSelectionChanged); + if (scene()->selectedItems().size() == 1) addHandler(); } @@ -319,10 +326,10 @@ QVariant PartPolygon::itemChange(QGraphicsItem::GraphicsItemChange change, const { if(scene()) disconnect(scene(), &QGraphicsScene::selectionChanged, this, &PartPolygon::sceneSelectionChanged); - + setSelected(false); //This is item removed from scene, then we deselect this, and so, the handlers is also removed. } - + return QGraphicsItem::itemChange(change, value); } @@ -330,7 +337,7 @@ QVariant PartPolygon::itemChange(QGraphicsItem::GraphicsItemChange change, const @brief PartPolygon::sceneEventFilter @param watched @param event - @return + @return */ bool PartPolygon::sceneEventFilter(QGraphicsItem *watched, QEvent *event) { @@ -338,7 +345,7 @@ bool PartPolygon::sceneEventFilter(QGraphicsItem *watched, QEvent *event) if(watched->type() == QetGraphicsHandlerItem::Type) { QetGraphicsHandlerItem *qghi = qgraphicsitem_cast(watched); - + if(m_handler_vector.contains(qghi)) //Handler must be in m_vector_index, then we can start resize { m_vector_index = m_handler_vector.indexOf(qghi); @@ -362,7 +369,7 @@ bool PartPolygon::sceneEventFilter(QGraphicsItem *watched, QEvent *event) } } } - + return false; } @@ -397,7 +404,7 @@ void PartPolygon::adjusteHandlerPos() { if(m_handler_vector.isEmpty()) return; - + if (m_handler_vector.size() == m_polygon.size()) { QVector points_vector = mapToScene(m_polygon); @@ -421,7 +428,7 @@ void PartPolygon::handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphics { Q_UNUSED(qghi); Q_UNUSED(event); - + m_undo_command = new QPropertyUndoCommand(this, "polygon", QVariant(m_polygon)); m_undo_command->setText(tr("Modifier un polygone")); } @@ -434,12 +441,12 @@ void PartPolygon::handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphics void PartPolygon::handlerMouseMoveEvent(QetGraphicsHandlerItem *qghi, QGraphicsSceneMouseEvent *event) { Q_UNUSED(qghi); - + QPointF new_pos = event->scenePos(); if (event->modifiers() != Qt::ControlModifier) new_pos = elementScene()->snapToGrid(event->scenePos()); new_pos = mapFromScene(new_pos); - + prepareGeometryChange(); m_polygon.replace(m_vector_index, new_pos); adjusteHandlerPos(); @@ -455,7 +462,7 @@ void PartPolygon::handlerMouseReleaseEvent(QetGraphicsHandlerItem *qghi, QGraphi { Q_UNUSED(qghi); Q_UNUSED(event); - + m_undo_command->setNewValue(QVariant(m_polygon)); elementScene()->undoStack().push(m_undo_command); m_undo_command = nullptr; @@ -481,9 +488,9 @@ void PartPolygon::sceneSelectionChanged() void PartPolygon::addHandler() { if (m_handler_vector.isEmpty() && scene()) - { + { m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(m_polygon)); - + for(QetGraphicsHandlerItem *handler : m_handler_vector) { handler->setColor(Qt::blue); @@ -514,7 +521,7 @@ void PartPolygon::removeHandler() void PartPolygon::insertPoint() { QPolygonF new_polygon = QetGraphicsHandlerUtility::polygonForInsertPoint(m_polygon, m_closed, elementScene()->snapToGrid(m_context_menu_pos)); - + if(new_polygon != m_polygon) { //Wrap the undo for avoid to merge the undo commands when user add several points. @@ -532,7 +539,7 @@ void PartPolygon::removePoint() { if (m_handler_vector.size() == 2) return; - + QPointF point = mapToScene(m_context_menu_pos); int index = -1; for (int i=0 ; ipolygon(); qDebug() << index; polygon.removeAt(index); - + //Wrap the undo for avoid to merge the undo commands when user add several points. QUndoCommand *undo = new QUndoCommand(tr("Supprimer un point d'un polygone")); new QPropertyUndoCommand(this, "polygon", this->polygon(), polygon, undo); elementScene()->undoStack().push(undo); } - + } /** diff --git a/sources/editor/graphicspart/partrectangle.cpp b/sources/editor/graphicspart/partrectangle.cpp index 1ad7d7685..b087829cd 100644 --- a/sources/editor/graphicspart/partrectangle.cpp +++ b/sources/editor/graphicspart/partrectangle.cpp @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -51,17 +51,23 @@ void PartRectangle::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt Q_UNUSED(widget); applyStylesToQPainter(*painter); QPen t = painter -> pen(); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove t.setCosmetic(options && options -> levelOfDetail < 1.0); - +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + t.setCosmetic(options && options -> levelOfDetailFromTransform(painter->worldTransform()) < 1.0); +#endif if (isSelected()) t.setColor(Qt::red); t.setJoinStyle(Qt::MiterJoin); - + //Force the pen to width 0 if one of dimension is null if (!rect().width() || !rect().height()) t.setWidth(0); - + painter->setPen(t); painter->drawRoundedRect(m_rect, m_xRadius, m_yRadius); @@ -86,7 +92,7 @@ const QDomElement PartRectangle::toXml(QDomDocument &xml_document) const xml_element.setAttribute("y", QString("%1").arg(top_left.y())); xml_element.setAttribute("width", QString("%1").arg(m_rect.width())); xml_element.setAttribute("height", QString("%1").arg(m_rect.height())); - + QRectF rect = m_rect.normalized(); qreal x = m_xRadius; if (x > rect.width()/2) { @@ -96,10 +102,10 @@ const QDomElement PartRectangle::toXml(QDomDocument &xml_document) const if (y > rect.height()/2) { y = rect.height()/2; } - + xml_element.setAttribute("rx", QString::number(m_xRadius)); xml_element.setAttribute("ry", QString::number(m_yRadius)); - + stylesToXml(xml_element); return(xml_element); } @@ -272,7 +278,7 @@ void PartRectangle::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton && event->buttonDownPos(Qt::LeftButton) == event->pos()) switchResizeMode(); - + CustomElementGraphicPart::mouseReleaseEvent(event); } @@ -280,7 +286,7 @@ void PartRectangle::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) @brief PartRectangle::itemChange @param change @param value - @return + @return */ QVariant PartRectangle::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) { @@ -290,8 +296,8 @@ QVariant PartRectangle::itemChange(QGraphicsItem::GraphicsItemChange change, con { //When item is selected, he must to be up to date whene the selection in the scene change, for display or not the handler, //according to the number of selected items. - connect(scene(), &QGraphicsScene::selectionChanged, this, &PartRectangle::sceneSelectionChanged); - + connect(scene(), &QGraphicsScene::selectionChanged, this, &PartRectangle::sceneSelectionChanged); + if (scene()->selectedItems().size() == 1) addHandler(); } @@ -309,10 +315,10 @@ QVariant PartRectangle::itemChange(QGraphicsItem::GraphicsItemChange change, con { if(scene()) disconnect(scene(), &QGraphicsScene::selectionChanged, this, &PartRectangle::sceneSelectionChanged); - + setSelected(false); //This item is removed from scene, then we deselect this, and so, the handlers is also removed. } - + return QGraphicsItem::itemChange(change, value); } @@ -320,7 +326,7 @@ QVariant PartRectangle::itemChange(QGraphicsItem::GraphicsItemChange change, con @brief PartRectangle::sceneEventFilter @param watched @param event - @return + @return */ bool PartRectangle::sceneEventFilter(QGraphicsItem *watched, QEvent *event) { @@ -328,7 +334,7 @@ bool PartRectangle::sceneEventFilter(QGraphicsItem *watched, QEvent *event) if(watched->type() == QetGraphicsHandlerItem::Type) { QetGraphicsHandlerItem *qghi = qgraphicsitem_cast(watched); - + if(m_handler_vector.contains(qghi)) //Handler must be in m_vector_index, then we can start resize { m_vector_index = m_handler_vector.indexOf(qghi); @@ -352,7 +358,7 @@ bool PartRectangle::sceneEventFilter(QGraphicsItem *watched, QEvent *event) } } } - + return false; } @@ -397,16 +403,16 @@ void PartRectangle::adjusteHandlerPos() if (m_handler_vector.isEmpty()) { return; } - + QVector points_vector; - + if(m_resize_mode != 3) { points_vector = QetGraphicsHandlerUtility::pointsForRect(m_rect); } else { points_vector = QetGraphicsHandlerUtility::pointForRadiusRect(m_rect, m_xRadius, m_yRadius); } - + if (m_handler_vector.size() == points_vector.size()) { points_vector = mapToScene(points_vector); @@ -430,7 +436,7 @@ void PartRectangle::handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphi { Q_UNUSED(qghi) Q_UNUSED(event) - + m_old_rect = m_rect; m_old_xRadius = m_xRadius; m_old_yRadius = m_yRadius; @@ -447,12 +453,12 @@ void PartRectangle::handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphi void PartRectangle::handlerMouseMoveEvent(QetGraphicsHandlerItem *qghi, QGraphicsSceneMouseEvent *event) { Q_UNUSED(qghi) - + QPointF new_pos = event->scenePos(); if (event->modifiers() != Qt::ControlModifier) new_pos = elementScene()->snapToGrid(event->scenePos()); new_pos = mapFromScene(new_pos); - + if (m_resize_mode == 1) setRect(QetGraphicsHandlerUtility::rectForPosAtIndex(m_rect, new_pos, m_vector_index)); else if (m_resize_mode == 2) @@ -471,7 +477,7 @@ void PartRectangle::handlerMouseMoveEvent(QetGraphicsHandlerItem *qghi, QGraphic setYRadius(radius); } } - + adjusteHandlerPos(); } @@ -479,9 +485,9 @@ void PartRectangle::handlerMouseReleaseEvent(QetGraphicsHandlerItem *qghi, QGrap { Q_UNUSED(qghi) Q_UNUSED(event) - + m_modifie_radius_equaly = false; - + QUndoCommand *undo = new QUndoCommand("Modifier un rectangle"); if (m_old_rect != m_rect) { QPropertyUndoCommand *u = new QPropertyUndoCommand(this, "rect", QVariant(m_old_rect.normalized()), QVariant(m_rect.normalized()), undo); @@ -495,7 +501,7 @@ void PartRectangle::handlerMouseReleaseEvent(QetGraphicsHandlerItem *qghi, QGrap QPropertyUndoCommand *u = new QPropertyUndoCommand(this, "yRadius", QVariant(m_old_yRadius), QVariant(m_yRadius), undo); u->setAnimated(); } - + elementScene()->undoStack().push(undo); m_vector_index = -1; } @@ -519,21 +525,21 @@ void PartRectangle::sceneSelectionChanged() void PartRectangle::addHandler() { if (m_handler_vector.isEmpty() && scene()) - { + { if (m_resize_mode != 3) { m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(QetGraphicsHandlerUtility::pointsForRect(m_rect))); } else { m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(QetGraphicsHandlerUtility::pointForRadiusRect(m_rect, m_xRadius, m_yRadius))); } - + for (QetGraphicsHandlerItem *handler : m_handler_vector) { QColor color; if(m_resize_mode == 1) {color = Qt::blue;} else if (m_resize_mode == 2) {color = Qt::darkGreen;} else {color = Qt::magenta;} - + handler->setColor(color); scene()->addItem(handler); handler->installSceneEventFilter(this); diff --git a/sources/editor/graphicspart/partterminal.cpp b/sources/editor/graphicspart/partterminal.cpp index 0f8621f19..9fe3728a5 100644 --- a/sources/editor/graphicspart/partterminal.cpp +++ b/sources/editor/graphicspart/partterminal.cpp @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -62,37 +62,52 @@ const QDomElement PartTerminal::toXml(QDomDocument &xml_document) const /** Dessine la borne - @param p QPainter a utiliser pour rendre le dessin + @param painter QPainter a utiliser pour rendre le dessin @param options Options pour affiner le rendu @param widget Widget sur lequel le rendu est effectue */ -void PartTerminal::paint(QPainter *p, const QStyleOptionGraphicsItem *options, QWidget *widget) { +void PartTerminal::paint( + QPainter *painter, + const QStyleOptionGraphicsItem *options, + QWidget *widget) +{ Q_UNUSED(widget); - p -> save(); + painter -> save(); // annulation des renderhints - p -> setRenderHint(QPainter::Antialiasing, false); - p -> setRenderHint(QPainter::TextAntialiasing, false); - p -> setRenderHint(QPainter::SmoothPixmapTransform, false); + painter -> setRenderHint(QPainter::Antialiasing, false); + painter -> setRenderHint(QPainter::TextAntialiasing, false); + painter -> setRenderHint(QPainter::SmoothPixmapTransform, false); QPen t; t.setWidthF(1.0); + +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove t.setCosmetic(options && options -> levelOfDetail < 1.0); - +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + t.setCosmetic( + options + && options->levelOfDetailFromTransform( + painter->worldTransform()) + < 1.0); +#endif // dessin de la borne en rouge t.setColor(isSelected() ? Terminal::neutralColor : Qt::red); - p -> setPen(t); - p -> drawLine(QPointF(0.0, 0.0), d -> second_point); + painter -> setPen(t); + painter -> drawLine(QPointF(0.0, 0.0), d -> second_point); // dessin du point d'amarrage au conducteur en bleu t.setColor(isSelected() ? Qt::red : Terminal::neutralColor); - p -> setPen(t); - p -> setBrush(Terminal::neutralColor); - p -> drawPoint(QPointF(0.0, 0.0)); - p -> restore(); + painter -> setPen(t); + painter -> setBrush(Terminal::neutralColor); + painter -> drawPoint(QPointF(0.0, 0.0)); + painter -> restore(); if (m_hovered) - drawShadowShape(p); + drawShadowShape(painter); } /** diff --git a/sources/editor/graphicspart/partterminal.h b/sources/editor/graphicspart/partterminal.h index 49f7beafd..0f323acff 100644 --- a/sources/editor/graphicspart/partterminal.h +++ b/sources/editor/graphicspart/partterminal.h @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -55,7 +55,10 @@ class PartTerminal : public CustomElementGraphicPart { QString xmlName() const override { return(QString("terminal")); } void fromXml(const QDomElement &) override; const QDomElement toXml(QDomDocument &) const override; - void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) override; + void paint( + QPainter *painter, + const QStyleOptionGraphicsItem *, + QWidget *) override; QPainterPath shape() const override; QPainterPath shadowShape() const override {return shape();} @@ -70,7 +73,7 @@ class PartTerminal : public CustomElementGraphicPart { void setName(QString& name); void setNewUuid(); - + private: void updateSecondPoint(); TerminalData* d; // pointer to the terminal data diff --git a/sources/editor/qetelementeditor.cpp b/sources/editor/qetelementeditor.cpp index 2528d3d24..400a25555 100644 --- a/sources/editor/qetelementeditor.cpp +++ b/sources/editor/qetelementeditor.cpp @@ -1471,7 +1471,14 @@ void QETElementEditor::slot_createPartsList() QString part_desc = cep -> name(); QListWidgetItem *qlwi = new QListWidgetItem(part_desc); QVariant v; +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove v.setValue(qgi); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif qlwi -> setData(42, v); m_parts_list -> addItem(qlwi); qlwi -> setSelected(qgi -> isSelected()); diff --git a/sources/machine_info.cpp b/sources/machine_info.cpp index 7da28a5a8..fdc2cb778 100644 --- a/sources/machine_info.cpp +++ b/sources/machine_info.cpp @@ -46,9 +46,9 @@ void Machine_info::send_info_to_debug() { qInfo()<<"debugging enabled:" << QLibraryInfo::isDebugBuild(); - qInfo()<< "Qt library version:" << QLibraryInfo::version(); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove qInfo()<< "Qt library location default prefix:" << QLibraryInfo::location(QLibraryInfo::PrefixPath); qInfo()<< "Qt library location documentation:" @@ -80,6 +80,43 @@ void Machine_info::send_info_to_debug() #ifndef Q_OS_WIN qInfo()<< "Qt library location Qt settings:" << QLibraryInfo::location(QLibraryInfo::SettingsPath); +#endif +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qInfo()<< "Qt library path default prefix:" + << QLibraryInfo::path(QLibraryInfo::PrefixPath); + qInfo()<< "Qt library path documentation:" + << QLibraryInfo::path(QLibraryInfo::DocumentationPath); + qInfo()<< "Qt library path headers:" + << QLibraryInfo::path(QLibraryInfo::HeadersPath); + qInfo()<< "Qt library path libraries:" + << QLibraryInfo::path(QLibraryInfo::LibrariesPath); + qInfo()<< "Qt library path executables:" + << QLibraryInfo::path(QLibraryInfo::LibraryExecutablesPath); + qInfo()<< "Qt library path Qt binaries:" + << QLibraryInfo::path(QLibraryInfo::BinariesPath); + qInfo()<< "Qt library path Qt plugins:" + << QLibraryInfo::path(QLibraryInfo::PluginsPath); +// qInfo()<< "Qt library path installed QML extensions:" +// << QLibraryInfo::path(QLibraryInfo::ImportsPath); + qInfo()<< "Qt library path installed QML extensions:" + << QLibraryInfo::path(QLibraryInfo::Qml2ImportsPath); + qInfo()<< "Qt library path dependent Qt data:" + << QLibraryInfo::path(QLibraryInfo::ArchDataPath); + qInfo()<< "Qt library path independent Qt data:" + << QLibraryInfo::path(QLibraryInfo::DataPath); + qInfo()<< "Qt library path translation:" + << QLibraryInfo::path(QLibraryInfo::TranslationsPath); + qInfo()<< "Qt library path examples:" + << QLibraryInfo::path(QLibraryInfo::ExamplesPath); + qInfo()<< "Qt library path Qt testcases:" + << QLibraryInfo::path(QLibraryInfo::TestsPath); +#ifndef Q_OS_WIN + qInfo()<< "Qt library path Qt settings:" + << QLibraryInfo::path(QLibraryInfo::SettingsPath); +#endif #endif qInfo()<< "GitRevision " + QString(GIT_COMMIT_SHA); qInfo()<< "QElectroTech V " + QET::displayedVersion; @@ -224,17 +261,17 @@ void Machine_info::init_get_cpu_info_winnt() QProcess wingpuraminfo; wingpuraminfo.start("wmic", - QStringList() - << "PATH" - << "Win32_videocontroller" - << "get" - << "AdapterRAM "); + QStringList() + << "PATH" + << "Win32_videocontroller" + << "get" + << "AdapterRAM "); wingpuraminfo.waitForFinished(); QString WinGPURAMOutput = wingpuraminfo.readAllStandardOutput(); pc.gpu.RAM=QString("RAM Total : %1 B").arg( WinGPURAMOutput.toLocal8Bit().constData()); wingpuraminfo.close(); - + #ifdef Q_OS_WIN MEMORYSTATUSEX memory_status; ZeroMemory(&memory_status, sizeof(MEMORYSTATUSEX)); @@ -266,7 +303,7 @@ void Machine_info::init_get_cpu_info_macos() macoscpuinfo.waitForFinished(); QString macosOutput = macoscpuinfo.readAllStandardOutput(); pc.cpu.info=QString(macosOutput.toLocal8Bit().constData()); - + QProcess macosraminfo; macosraminfo.start("bash", QStringList() diff --git a/sources/main.cpp b/sources/main.cpp index bbaea47b9..ca966e2d2 100644 --- a/sources/main.cpp +++ b/sources/main.cpp @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -30,8 +30,8 @@ @param msg : Message */ void myMessageOutput(QtMsgType type, - const QMessageLogContext &context, - const QString &msg) + const QMessageLogContext &context, + const QString &msg) { QString txt=QTime::currentTime().toString("hh:mm:ss.zzz"); @@ -110,8 +110,8 @@ void myMessageOutput(QtMsgType type, txt+=")\n"; } QFile outFile(QETApp::configDir() - +QDate::currentDate().toString("yyyyMMdd") - +".log"); + +QDate::currentDate().toString("yyyyMMdd") + +".log"); if(outFile.open(QIODevice::WriteOnly | QIODevice::Append)) { QTextStream ts(&outFile); @@ -166,7 +166,13 @@ int main(int argc, char **argv) QCoreApplication::setApplicationName("QElectroTech"); //Creation and execution of the application //HighDPI +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif +#endif SingleApplication app(argc, argv, true); #ifdef Q_OS_MACOS //Handle the opening of QET when user double click on a .qet .elmt .tbt file diff --git a/sources/print/projectprintwindow.cpp b/sources/print/projectprintwindow.cpp index 4c1a7b52a..63276a7c9 100644 --- a/sources/print/projectprintwindow.cpp +++ b/sources/print/projectprintwindow.cpp @@ -23,7 +23,13 @@ #include "qeticons.h" #include +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove #include +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif +#endif #include #include #include @@ -45,7 +51,14 @@ void ProjectPrintWindow::launchDialog(QETProject *project, QWidget *parent) } auto printer_ = new QPrinter(); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove printer_->setOrientation(QPrinter::Landscape); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif printer_->setDocName(doc_name); printer_->setOutputFileName(file_name); printer_->setCreator(QString("QElectroTech %1").arg(QET::displayedVersion)); @@ -55,7 +68,14 @@ void ProjectPrintWindow::launchDialog(QETProject *project, QWidget *parent) print_dialog.setWindowFlags(Qt::Sheet); #endif print_dialog.setWindowTitle(tr("Options d'impression", "window title")); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove print_dialog.setEnabledOptions(QAbstractPrintDialog::PrintToFile | QAbstractPrintDialog::PrintShowPageSize); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif if (print_dialog.exec() == QDialog::Rejected) { delete printer_; return; @@ -95,7 +115,7 @@ QString ProjectPrintWindow::docName(QETProject *project) * @param parent */ ProjectPrintWindow::ProjectPrintWindow(QETProject *project, QPrinter *printer, QWidget *parent) : - QMainWindow(parent), + QMainWindow(parent), ui(new Ui::ProjectPrintWindow), m_project(project), m_printer(printer) @@ -213,8 +233,15 @@ void ProjectPrintWindow::printDiagram(Diagram *diagram, bool fit_page, QPainter diagram->render(painter, QRectF(), diagram_rect, Qt::KeepAspectRatio); } else { //Print on one or several pages +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove auto printed_rect = full_page ? printer->paperRect() : printer->pageRect(); - +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; + auto printed_rect = full_page ? printer->paperRect(QPrinter::Millimeter) : printer->pageRect(QPrinter::Millimeter); +#endif auto used_width = printed_rect.width(); auto used_height = printed_rect.height(); auto h_pages_count = horizontalPagesCount(diagram, option, full_page); @@ -231,9 +258,16 @@ void ProjectPrintWindow::printDiagram(Diagram *diagram, bool fit_page, QPainter auto x_offset = 0; for (auto j=0 ; j paperRect() : m_printer-> pageRect(); + QRect printable_area; +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + printable_area = full_page ? m_printer-> paperRect() : m_printer-> pageRect(); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif QRect diagram_rect = diagramRect(diagram, option); int h_pages_count = int(ceil(qreal(diagram_rect.width()) / qreal(printable_area.width()))); @@ -311,9 +354,18 @@ int ProjectPrintWindow::horizontalPagesCount(Diagram *diagram, const ExportPrope * @return The height of the "poster" in number of pages for print the diagram * with the orientation and paper format used by the actual printer */ -int ProjectPrintWindow::verticalPagesCount(Diagram *diagram, const ExportProperties &option, bool full_page) const +int ProjectPrintWindow::verticalPagesCount( + Diagram *diagram, const ExportProperties &option, bool full_page) const { - QRect printable_area = full_page ? m_printer->paperRect() : m_printer->pageRect(); + QRect printable_area; +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + printable_area = full_page ? m_printer->paperRect() : m_printer->pageRect(); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif QRect diagram_rect = diagramRect(diagram, option); int v_pages_count = int(ceil(qreal(diagram_rect.height()) / qreal(printable_area.height()))); @@ -371,6 +423,7 @@ QString ProjectPrintWindow::settingsSectionName(const QPrinter *printer) void ProjectPrintWindow::loadPageSetupForCurrentPrinter() { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove QSettings settings; QString printer_section = settingsSectionName(m_printer); @@ -413,10 +466,17 @@ void ProjectPrintWindow::loadPageSetupForCurrentPrinter() settings.endGroup(); settings.endGroup(); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif } void ProjectPrintWindow::savePageSetupForCurrentPrinter() { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove QSettings settings; QString printer_section = settingsSectionName(m_printer); @@ -444,6 +504,12 @@ void ProjectPrintWindow::savePageSetupForCurrentPrinter() settings.endGroup(); settings.endGroup(); settings.sync(); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif } /** diff --git a/sources/qet.cpp b/sources/qet.cpp index 4f93f3030..23f5fe2d9 100644 --- a/sources/qet.cpp +++ b/sources/qet.cpp @@ -25,6 +25,7 @@ #include #include #include +#include /** Permet de convertir une chaine de caracteres ("n", "s", "e" ou "w") @@ -164,9 +165,9 @@ bool QET::lineContainsPoint(const QLineF &line, const QPointF &point) { @return true si le projete orthogonal du point sur la droite appartient au segment de droite. */ -bool QET::orthogonalProjection(const QPointF &point, - const QLineF &line, - QPointF *intersection) { +bool QET::orthogonalProjection( + const QPointF &point,const QLineF &line,QPointF *intersection) +{ // recupere le vecteur normal de `line' QLineF line_normal_vector(line.normalVector()); QPointF normal_vector(line_normal_vector.dx(), line_normal_vector.dy()); @@ -210,9 +211,9 @@ bool QET::orthogonalProjection(const QPointF &point, @param entier Pointeur facultatif vers un entier @return true si l'attribut est bien un entier, false sinon */ -bool QET::attributeIsAnInteger(const QDomElement &e, - const QString& nom_attribut, - int *entier) { +bool QET::attributeIsAnInteger( + const QDomElement &e,const QString& nom_attribut,int *entier) +{ // verifie la presence de l'attribut if (!e.hasAttribute(nom_attribut)) return(false); // verifie la validite de l'attribut @@ -231,9 +232,9 @@ bool QET::attributeIsAnInteger(const QDomElement &e, @param reel Pointeur facultatif vers un double @return true si l'attribut est bien un reel, false sinon */ -bool QET::attributeIsAReal(const QDomElement &e, - const QString& nom_attribut, - qreal *reel) { +bool QET::attributeIsAReal( + const QDomElement &e,const QString& nom_attribut,qreal *reel) +{ // verifie la presence de l'attribut if (!e.hasAttribute(nom_attribut)) return(false); // verifie la validite de l'attribut @@ -258,13 +259,14 @@ bool QET::attributeIsAReal(const QDomElement &e, @return la proposition decrivant le nombre d'elements, de conducteurs et de textes */ -QString QET::ElementsAndConductorsSentence(int elements_count, - int conductors_count, - int texts_count, - int images_count, - int shapes_count, - int element_text_count, - int tables_count) +QString QET::ElementsAndConductorsSentence( + int elements_count, + int conductors_count, + int texts_count, + int images_count, + int shapes_count, + int element_text_count, + int tables_count) { QString text; if (elements_count) { @@ -333,9 +335,14 @@ QString QET::ElementsAndConductorsSentence(int elements_count, /** @return the list of \a tag_name elements directly under the \a e XML element. */ -QList QET::findInDomElement(const QDomElement &e, const QString &tag_name) { +QList QET::findInDomElement( + const QDomElement &e, const QString &tag_name) +{ QList return_list; - for (QDomNode node = e.firstChild() ; !node.isNull() ; node = node.nextSibling()) { + for (QDomNode node = e.firstChild() ; + !node.isNull() ; + node = node.nextSibling()) + { if (!node.isElement()) continue; QDomElement element = node.toElement(); if (element.isNull() || element.tagName() != tag_name) continue; @@ -352,18 +359,24 @@ QList QET::findInDomElement(const QDomElement &e, const QString &ta @param children tag XML a rechercher @return La liste des elements XML children */ -QList QET::findInDomElement(const QDomElement &e, - const QString &parent, - const QString &children) { +QList QET::findInDomElement( + const QDomElement &e,const QString &parent,const QString &children) +{ QList return_list; // parcours des elements parents - for (QDomNode enfant = e.firstChild() ; !enfant.isNull() ; enfant = enfant.nextSibling()) { + for (QDomNode enfant = e.firstChild() ; + !enfant.isNull() ; + enfant = enfant.nextSibling()) + { // on s'interesse a l'element XML "parent" QDomElement parents = enfant.toElement(); if (parents.isNull() || parents.tagName() != parent) continue; // parcours des enfants de l'element XML "parent" - for (QDomNode node_children = parents.firstChild() ; !node_children.isNull() ; node_children = node_children.nextSibling()) { + for (QDomNode node_children = parents.firstChild() ; + !node_children.isNull() ; + node_children = node_children.nextSibling()) + { // on s'interesse a l'element XML "children" QDomElement n_children = node_children.toElement(); if (!n_children.isNull() && n_children.tagName() == children) return_list.append(n_children); @@ -404,8 +417,8 @@ QString QET::license() */ QList QET::forbiddenCharacters() { - return(QList() << '\\' << '/' << ':' << '*' << '?' << '"' - << '<' << '>' << '|'); + return(QList() + << '\\' << '/' << ':' << '*' << '?' << '"'<< '<' << '>' << '|'); } /** @@ -614,7 +627,14 @@ bool QET::writeXmlFile(QDomDocument &xml_doc, const QString &filepath, QString * } QTextStream out(&file); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove out.setCodec("UTF-8"); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + out.setEncoding(QStringConverter::Utf8); +#endif out.setGenerateByteOrderMark(false); out << xml_doc.toString(4); if (!file.commit()) @@ -741,7 +761,14 @@ bool QET::writeToFile(QDomDocument &xml_doc, QFile *file, QString *error_message QTextStream out(file); out.seek(0); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove out.setCodec("UTF-8"); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + out.setEncoding(QStringConverter::Utf8); +#endif out.setGenerateByteOrderMark(false); out << xml_doc.toString(4); if (opened_here) { diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index 03f3360b5..7793ae22d 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -105,12 +105,12 @@ QETApp::QETApp() : if (qet_arguments_.files().isEmpty()) { setSplashScreenStep(tr("Chargement... Éditeur de schéma", - "splash screen caption")); + "splash screen caption")); new QETDiagramEditor(); } else { setSplashScreenStep(tr("Chargement... Ouverture des fichiers", - "splash screen caption")); + "splash screen caption")); openFiles(qet_arguments_); } @@ -167,7 +167,14 @@ void QETApp::setLanguage(const QString &desired_language) { QString languages_path = languagesPath(); // load Qt library translations +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove QString qt_l10n_path = QLibraryInfo::location(QLibraryInfo::TranslationsPath); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + QString qt_l10n_path = QLibraryInfo::path(QLibraryInfo::TranslationsPath); +#endif if (!qtTranslator.load("qt_" + desired_language, qt_l10n_path)) { qtTranslator.load("qt_" + desired_language, languages_path); } @@ -549,7 +556,7 @@ TitleBlockTemplatesFilesCollection *QETApp::customTitleBlockTemplatesCollection( new TitleBlockTemplatesFilesCollection( QETApp::customTitleBlockTemplatesDir()); m_custom_tbt_collection -> setTitle(tr("Cartouches utilisateur", - "title of the user's \ + "title of the user's \ title block templates collection")); m_custom_tbt_collection -> setProtocol(QETAPP_CUSTOM_TBT_PROTOCOL); m_custom_tbt_collection -> setCollection(QET::QetCollection::Custom); @@ -651,7 +658,7 @@ QString QETApp::commonElementsDir() * relatif au dossier contenant le binaire executable */ return(QCoreApplication::applicationDirPath() - + "/" + QUOTE(QET_COMMON_COLLECTION_PATH)); + + "/" + QUOTE(QET_COMMON_COLLECTION_PATH)); #endif #endif } @@ -752,7 +759,7 @@ QString QETApp::commonTitleBlockTemplatesDir() * to the directory that contains the executable binary */ return(QCoreApplication::applicationDirPath() - + "/" + QUOTE(QET_COMMON_TBT_PATH)); + + "/" + QUOTE(QET_COMMON_TBT_PATH)); #endif #endif } @@ -860,7 +867,7 @@ QString QETApp::realPath(const QString &sym_path) { directory = customTitleBlockTemplatesDir(); } else return(QString()); return(directory - + QDir::toNativeSeparators(sym_path.right(sym_path.length() - 9))); + + QDir::toNativeSeparators(sym_path.right(sym_path.length() - 9))); } @@ -1081,7 +1088,7 @@ QString QETApp::languagesPath() * au dossier contenant le binaire executable */ return(QCoreApplication::applicationDirPath() - + "/" + QUOTE(QET_LANG_PATH)); + + "/" + QUOTE(QET_LANG_PATH)); #endif #endif } @@ -1126,9 +1133,9 @@ QFont QETApp::diagramTextsFont(qreal size) //Font to use QString diagram_texts_family = settings.value("diagramfont", - "Sans Serif").toString(); + "Sans Serif").toString(); qreal diagram_texts_size = settings.value("diagramsize", - 9.0).toDouble(); + 9.0).toDouble(); if (size != -1.0) { diagram_texts_size = size; @@ -1155,8 +1162,9 @@ QFont QETApp::diagramTextsItemFont(qreal size) "Sans Serif").toString(); qreal diagram_texts_item_size = settings.value("diagramitemsize", 9.0).toDouble(); - qreal diagram_texts_item_weight = settings.value("diagramitemweight" - ).toDouble(); + auto diagram_texts_item_weight = + static_cast( + settings.value("diagramitemweight").toInt()); QString diagram_texts_item_style = settings.value("diagramitemstyle", "normal").toString(); @@ -1290,15 +1298,15 @@ QTextOrientationSpinBoxWidget *QETApp::createTextOrientationSpinBoxWidget() widget -> orientationWidget() -> setFont(QETApp::diagramTextsFont()); widget -> orientationWidget() -> setUsableTexts(QList() << QETApp::tr("Q", - "Single-letter example text - translate length, not meaning") + "Single-letter example text - translate length, not meaning") << QETApp::tr("QET", - "Small example text - translate length, not meaning") + "Small example text - translate length, not meaning") << QETApp::tr("Schema", - "Normal example text - translate length, not meaning") + "Normal example text - translate length, not meaning") << QETApp::tr("Electrique", - "Normal example text - translate length, not meaning") + "Normal example text - translate length, not meaning") << QETApp::tr("QElectroTech", - "Long example text - translate length, not meaning") + "Long example text - translate length, not meaning") ); return(widget); } @@ -1699,7 +1707,7 @@ void QETApp::openElementLocations(const QList &locations_list) @see QETTitleBlockTemplateEditor::setOpenForDuplication() */ void QETApp::openTitleBlockTemplate(const TitleBlockTemplateLocation &location, - bool duplicate) { + bool duplicate) { QETTitleBlockTemplateEditor *qet_template_editor = new QETTitleBlockTemplateEditor(); qet_template_editor -> setOpenForDuplication(duplicate); qet_template_editor -> edit(location); @@ -1822,7 +1830,7 @@ QList QETApp::floatingToolbarsAndDocksForMainWindow( foreach(QWidget *qw, qApp->topLevelWidgets()) { if (!qw -> isWindow()) continue; if (qobject_cast(qw) - || qobject_cast(qw)) { + || qobject_cast(qw)) { if (qw -> parent() == window) widgets << qw; } } @@ -1935,7 +1943,7 @@ void QETApp::setSplashScreenStep(const QString &message) { if (!m_splash_screen) return; if (!message.isEmpty()) { m_splash_screen -> showMessage(message, - Qt::AlignBottom | Qt::AlignLeft); + Qt::AlignBottom | Qt::AlignLeft); } qApp->processEvents(); } @@ -2016,7 +2024,7 @@ void QETApp::initConfiguration() void QETApp::initSystemTray() { setSplashScreenStep(tr("Chargement... icône du systray", - "splash screen caption")); + "splash screen caption")); // initialization of the icon menus in the systray // initialisation des menus de l'icone dans le systray menu_systray = new QMenu(tr("QElectroTech", "systray menu title")); @@ -2118,7 +2126,7 @@ int QETApp::projectIdFromString(const QString &url) { if (!match.hasMatch()) { qDebug()<<"no Match => return" - <Les fichiers de restauration suivant on été trouvé,
" "Voulez-vous les ouvrir ?
")); } - for(const KAutoSaveFile *kasf : stale_files) - { + for(const KAutoSaveFile *kasf : stale_files) + { #ifdef Q_OS_WIN //Remove the first character '/' before the name of the drive text.append("
" + kasf->managedFile().path().remove(0,1)); @@ -2329,19 +2337,19 @@ void QETApp::fetchWindowStats( #ifdef Q_OS_DARWIN /** - Gere les evenements, en particulier l'evenement FileOpen sous MacOs. - @param e Evenement a gerer + Gere les evenements, en particulier l'evenement FileOpen sous MacOs. + @param e Evenement a gerer */ bool QETApp::eventFiltrer(QObject *object, QEvent *e) { - // gere l'ouverture de fichiers (sous MacOs) - if (e -> type() == QEvent::FileOpen) { + // gere l'ouverture de fichiers (sous MacOs) + if (e -> type() == QEvent::FileOpen) { // nom du fichier a ouvrir QString filename = static_cast(e) -> file(); openFiles(QStringList() << filename); return(true); - } else { + } else { return QObject::eventFilter(object, e); - } + } } #endif diff --git a/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp b/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp index 25093b9ad..496108948 100644 --- a/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp +++ b/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp @@ -436,7 +436,7 @@ void QetGraphicsTableItem::setPreviousTable(QetGraphicsTableItem *table) setModel(m_previous_table->m_model); } else //Copie the model of old previous table - { + { setModel(new ProjectDBModel(*static_cast(old_previous_table->model()))); } @@ -657,7 +657,7 @@ bool QetGraphicsTableItem::toDXF(const QString &filepath) //QRectF rect = boundingRect(); QRectF rect(0,0, m_header_item->rect().width(), m_current_size.height()); QPolygonF poly(rect); - Createdxf::drawPolygon(filepath,mapToScene(poly),0); + Createdxf::drawPolygon(filepath,mapToScene(poly),0); //Draw vertical lines auto offset= 0; @@ -970,6 +970,7 @@ void QetGraphicsTableItem::adjustColumnsWidth() int sum_=0; for(auto i= 0 ; icolumnCount() ; ++i) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove auto at_a = std::min(m_minimum_column_width.size()-1, i); //In case of the I is higher than m_minimum_column_width or auto at_b = std::min(m_header_item->minimumSectionWidth().size()-1, i); //m_header_item->minimumSectionWidth().size() m_header_item->resizeSection( @@ -978,6 +979,12 @@ void QetGraphicsTableItem::adjustColumnsWidth() m_minimum_column_width.at(at_a), m_header_item->minimumSectionWidth().at(at_b))+b); sum_+= m_header_item->sectionSize(i); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif } diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index f1aceaa62..b77fa014f 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -470,15 +470,15 @@ QPointF Conductor::extendTerminal(const QPointF &terminal, Qet::Orientation term /** Dessine le conducteur sans antialiasing. - @param qp Le QPainter a utiliser pour dessiner le conducteur + @param painter Le QPainter a utiliser pour dessiner le conducteur @param options Les options de style pour le conducteur @param qw Le QWidget sur lequel on dessine */ -void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWidget *qw) +void Conductor::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *qw) { Q_UNUSED(qw); - qp -> save(); - qp -> setRenderHint(QPainter::Antialiasing, false); + painter -> save(); + painter -> setRenderHint(QPainter::Antialiasing, false); // Set the color of conductor QColor final_conductor_color(m_properties.color); @@ -500,7 +500,7 @@ void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWi conductor_pen.setWidthF(m_mouse_over? (m_properties.cond_size) +4 : (m_properties.cond_size)); //Set the QPen and QBrush to the QPainter - qp -> setBrush(conductor_brush); + painter -> setBrush(conductor_brush); QPen final_conductor_pen = conductor_pen; //Set the conductor style @@ -509,14 +509,22 @@ void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWi final_conductor_pen.setJoinStyle(Qt::SvgMiterJoin); // better rendering with dot //Use a cosmetique line, below a certain zoom - if (options && options -> levelOfDetail < 1.0) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + if (options && options -> levelOfDetail < 1.0) +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + if (options && options->levelOfDetailFromTransform(painter->worldTransform()) < 1.0) +#endif + { final_conductor_pen.setCosmetic(true); } - qp -> setPen(final_conductor_pen); + painter -> setPen(final_conductor_pen); //Draw the conductor - qp -> drawPath(path()); + painter -> drawPath(path()); //Draw the second color if(m_properties.m_bicolor) { @@ -525,20 +533,20 @@ void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWi QVector dash_pattern; dash_pattern << m_properties.m_dash_size-2 << m_properties.m_dash_size; final_conductor_pen.setDashPattern(dash_pattern); - qp->save(); - qp->setPen(final_conductor_pen); - qp->drawPath(path()); - qp->restore(); + painter->save(); + painter->setPen(final_conductor_pen); + painter->drawPath(path()); + painter->restore(); } if (m_properties.type == ConductorProperties::Single) { - qp -> setBrush(final_conductor_color); + painter -> setBrush(final_conductor_color); m_properties.singleLineProperties.draw( - qp, + painter, middleSegment() -> isHorizontal() ? QET::Horizontal : QET::Vertical, QRectF(middleSegment() -> middle() - QPointF(12.0, 12.0), QSizeF(24.0, 24.0)) ); - if (isSelected()) qp -> setBrush(Qt::NoBrush); + if (isSelected()) painter -> setBrush(Qt::NoBrush); } //Draw the junctions @@ -546,15 +554,15 @@ void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWi if (!junctions_list.isEmpty()) { final_conductor_pen.setStyle(Qt::SolidLine); QBrush junction_brush(final_conductor_color, Qt::SolidPattern); - qp -> setPen(final_conductor_pen); - qp -> setBrush(junction_brush); - qp -> setRenderHint(QPainter::Antialiasing, true); + painter -> setPen(final_conductor_pen); + painter -> setBrush(junction_brush); + painter -> setRenderHint(QPainter::Antialiasing, true); foreach(QPointF point, junctions_list) { - qp -> drawEllipse(QRectF(point.x() - 1.5, point.y() - 1.5, 3.0, 3.0)); + painter -> drawEllipse(QRectF(point.x() - 1.5, point.y() - 1.5, 3.0, 3.0)); } } - qp -> restore(); + painter -> restore(); } /// @return le Diagram auquel ce conducteur appartient, ou 0 si ce conducteur est independant @@ -1014,8 +1022,8 @@ bool Conductor::fromXml(QDomElement &dom_element) @return Un element XML representant le conducteur */ QDomElement Conductor::toXml(QDomDocument &dom_document, - QHash &table_adr_id) const + QHash &table_adr_id) const { QDomElement dom_element = dom_document.createElement("conductor"); @@ -1514,7 +1522,7 @@ QPainterPath Conductor::path() const the other values of property stay unmodified */ void Conductor::setPropertyToPotential(const ConductorProperties &property, - bool only_text) + bool only_text) { setProperties(property); QSet potential_list = relatedPotentialConductors(); diff --git a/sources/qetgraphicsitem/element.cpp b/sources/qetgraphicsitem/element.cpp index 1c0f8197d..e12132489 100644 --- a/sources/qetgraphicsitem/element.cpp +++ b/sources/qetgraphicsitem/element.cpp @@ -33,6 +33,7 @@ #include "elementtextitemgroup.h" #include "elementpicturefactory.h" #include "iostream" +#include class ElementXmlRetroCompatibility { @@ -45,11 +46,11 @@ class ElementXmlRetroCompatibility { int i = 0; while (!dom_element.attribute(seq + - QString::number(i+1)).isEmpty()) + QString::number(i+1)).isEmpty()) { list->append(dom_element.attribute( - seq + - QString::number(i+1))); + seq + + QString::number(i+1))); i++; } } @@ -210,7 +211,15 @@ void Element::paint( drawHighlight(painter, options); } - if (options && options -> levelOfDetail < 1.0) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + if (options && options -> levelOfDetail < 1.0) +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + if (options && options->levelOfDetailFromTransform(painter->worldTransform()) < 1.0) +#endif + { painter->drawPicture(0, 0, m_low_zoom_picture); } else { painter->drawPicture(0, 0, m_picture); @@ -228,7 +237,7 @@ void Element::paint( QRectF Element::boundingRect() const { return(QRectF(QPointF(-hotspot_coord.x(), -hotspot_coord.y()), - dimensions)); + dimensions)); } /** @@ -357,7 +366,7 @@ void Element::drawHighlight( painter -> save(); qreal gradient_radius = qMin(boundingRect().width(), - boundingRect().height()) / 2.0; + boundingRect().height()) / 2.0; QRadialGradient gradient( boundingRect().center(), gradient_radius, @@ -457,8 +466,8 @@ bool Element::buildFromXml(const QDomElement &xml_def_elmt, int *state) //scroll of the Children of the Definition: Parts of the Drawing int parsed_elements_count = 0; for (QDomNode node = xml_def_elmt.firstChild() ; - !node.isNull() ; - node = node.nextSibling()) + !node.isNull() ; + node = node.nextSibling()) { QDomElement elmts = node.toElement(); if (elmts.isNull()) @@ -471,8 +480,8 @@ bool Element::buildFromXml(const QDomElement &xml_def_elmt, int *state) QList input_field; bool have_label = false; for (QDomElement input_node = node.firstChildElement("input") ; - !input_node.isNull() ; - input_node = input_node.nextSiblingElement("input")) + !input_node.isNull() ; + input_node = input_node.nextSiblingElement("input")) { if (!input_node.isNull()) { @@ -488,8 +497,8 @@ bool Element::buildFromXml(const QDomElement &xml_def_elmt, int *state) //Parse the definition for (QDomNode n = node.firstChild() ; - !n.isNull() ; - n = n.nextSibling()) + !n.isNull() ; + n = n.nextSibling()) { QDomElement qde = n.toElement(); if (qde.isNull()) @@ -588,7 +597,7 @@ bool Element::parseInput(const QDomElement &dom_element) QTransform transform; //First make the rotation transform.rotate(dom_element.attribute("rotation", - "0").toDouble()); + "0").toDouble()); QPointF pos = transform.map( QPointF(0, -deti->boundingRect().height()/2)); @@ -753,17 +762,23 @@ bool Element::fromXml( // copie des associations id / adr foreach(int id_trouve, priv_id_adr.keys()) { table_id_adr.insert(id_trouve, - priv_id_adr.value(id_trouve)); + priv_id_adr.value(id_trouve)); } } //load uuid of connected elements QList uuid_list = QET::findInDomElement(e, - "links_uuids", - "link_uuid"); + "links_uuids", + "link_uuid"); foreach (QDomElement qdo, uuid_list) +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove tmp_uuids_link << qdo.attribute("uuid"); - +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif //uuid of this element m_uuid= QUuid(e.attribute("uuid", QUuid::createUuid().toString())); @@ -810,9 +825,9 @@ bool Element::fromXml( //***Dynamic texts item***// //************************// for (const QDomElement& qde : QET::findInDomElement( - e, - "dynamic_texts", - DynamicElementTextItem::xmlTagName())) + e, + "dynamic_texts", + DynamicElementTextItem::xmlTagName())) { DynamicElementTextItem *deti = new DynamicElementTextItem(this); addDynamicTextItem(deti); @@ -842,7 +857,7 @@ bool Element::fromXml( if (qFuzzyCompare(qreal(dom_input.attribute("x").toDouble()), m_converted_text_from_xml_description.value(deti).x()) && qFuzzyCompare(qreal(dom_input.attribute("y").toDouble()), - m_converted_text_from_xml_description.value(deti).y())) + m_converted_text_from_xml_description.value(deti).y())) { //Once again this 'if', is only for retrocompatibility with old old old project //when element text with tagg "label" is not null, but the element information "label" is. @@ -913,9 +928,9 @@ bool Element::fromXml( m_converted_text_from_xml_description.clear(); for (QDomElement qde : QET::findInDomElement( - e, - "texts_groups", - ElementTextItemGroup::xmlTaggName())) + e, + "texts_groups", + ElementTextItemGroup::xmlTaggName())) { ElementTextItemGroup *group = addTextGroup("loaded_from_xml_group"); @@ -991,11 +1006,11 @@ bool Element::fromXml( { if(!label.isEmpty() && la && ((!comment.isEmpty() && c) - || (!location.isEmpty() && lo))) + || (!location.isEmpty() && lo))) { //#2 in the converted list one text must have text from = element info and info name = label for(DynamicElementTextItem *deti - : successfully_converted) + : successfully_converted) { if(deti->textFrom()== DynamicElementTextItem::ElementInfo && deti->infoName() == "label") @@ -1058,10 +1073,10 @@ bool Element::fromXml( addTextToGroup(deti, group); if(comment_text) addTextToGroup(comment_text, - group); + group); if(location_text) addTextToGroup(location_text, - group); + group); group->setAlignment(Qt::AlignVCenter); group->setVerticalAdjustment(-4); group->setRotation(rotation); @@ -1354,7 +1369,7 @@ ElementTextItemGroup *Element::addTextGroup(const QString &name) if(m_texts_group.isEmpty()) { ElementTextItemGroup *group = new ElementTextItemGroup(name, - this); + this); m_texts_group << group; emit textsGroupAdded(group); return group; @@ -1454,7 +1469,7 @@ QList Element::textGroups() const @return : true if the text was succesfully added to the group. */ bool Element::addTextToGroup(DynamicElementTextItem *text, - ElementTextItemGroup *group) + ElementTextItemGroup *group) { if(!m_dynamic_text_list.contains(text)) return false; @@ -1643,7 +1658,7 @@ void Element::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) */ void Element::hoverEnterEvent(QGraphicsSceneHoverEvent *e) { - Q_UNUSED(e) + Q_UNUSED(e) foreach (Element *elmt, linkedElements()) elmt -> setHighlighted(true); @@ -1661,7 +1676,7 @@ void Element::hoverEnterEvent(QGraphicsSceneHoverEvent *e) */ void Element::hoverLeaveEvent(QGraphicsSceneHoverEvent *e) { - Q_UNUSED(e) + Q_UNUSED(e) foreach (Element *elmt, linkedElements()) elmt -> setHighlighted(false); @@ -1703,10 +1718,10 @@ void Element::setUpFormula(bool code_letter) m_autoNum_seq.clear(); autonum::setSequential(formula, - m_autoNum_seq, - nc, - diagram(), - element_currentAutoNum); + m_autoNum_seq, + nc, + diagram(), + element_currentAutoNum); diagram()->project()->addElementAutoNum(element_currentAutoNum, ncc.next()); diff --git a/sources/qetgraphicsitem/terminal.cpp b/sources/qetgraphicsitem/terminal.cpp index 1befcfa1b..a3de13335 100644 --- a/sources/qetgraphicsitem/terminal.cpp +++ b/sources/qetgraphicsitem/terminal.cpp @@ -262,23 +262,30 @@ void Terminal::removeConductor(Conductor *conductor) /** @brief Terminal::paint Fonction de dessin des bornes - @param p Le QPainter a utiliser + @param painter Le QPainter a utiliser @param options Les options de dessin */ void Terminal::paint( - QPainter *p, + QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *) { // en dessous d'un certain zoom, les bornes ne sont plus dessinees +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove if (options && options -> levelOfDetail < 0.5) return; - - p -> save(); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + if (options && options->levelOfDetailFromTransform(painter->worldTransform()) < 0.5) + return; +#endif + painter -> save(); //annulation des renderhints - p -> setRenderHint(QPainter::Antialiasing, false); - p -> setRenderHint(QPainter::TextAntialiasing, false); - p -> setRenderHint(QPainter::SmoothPixmapTransform, false); + painter -> setRenderHint(QPainter::Antialiasing, false); + painter -> setRenderHint(QPainter::TextAntialiasing, false); + painter -> setRenderHint(QPainter::SmoothPixmapTransform, false); // on travaille avec les coordonnees de l'element parent QPointF c = mapFromParent(d->m_pos); @@ -287,23 +294,31 @@ void Terminal::paint( QPen t; t.setWidthF(1.0); - if (options && options -> levelOfDetail < 1.0) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove + if (options && options -> levelOfDetail < 1.0) +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + if (options && options->levelOfDetailFromTransform(painter->worldTransform()) < 1.0) +#endif + { t.setCosmetic(true); } // dessin de la borne en rouge t.setColor(Qt::red); - p -> setPen(t); - p -> drawLine(c, e); + painter -> setPen(t); + painter -> drawLine(c, e); // dessin du point d'amarrage au conducteur en bleu t.setColor(hovered_color_); - p -> setPen(t); - p -> setBrush(hovered_color_); + painter -> setPen(t); + painter -> setBrush(hovered_color_); if (hovered_) { - p -> setRenderHint(QPainter::Antialiasing, true); - p -> drawEllipse(QRectF(c.x() - 2.5, c.y() - 2.5, 5.0, 5.0)); - } else p -> drawPoint(c); + painter -> setRenderHint(QPainter::Antialiasing, true); + painter -> drawEllipse(QRectF(c.x() - 2.5, c.y() - 2.5, 5.0, 5.0)); + } else painter -> drawPoint(c); //Draw help line if needed, if (diagram() && m_draw_help_line) @@ -365,7 +380,7 @@ void Terminal::paint( m_help_line_a -> setLine(line); } - p -> restore(); + painter -> restore(); } /** diff --git a/sources/qetgraphicsitem/terminal.h b/sources/qetgraphicsitem/terminal.h index 6250fe52e..7e0ca59f6 100644 --- a/sources/qetgraphicsitem/terminal.h +++ b/sources/qetgraphicsitem/terminal.h @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -38,7 +38,7 @@ class Terminal : public QGraphicsObject signals: void conductorWasAdded(Conductor *conductor); void conductorWasRemoved(Conductor *conductor); - + // constructors, destructor public: Terminal(QPointF, Qet::Orientation, Element * = nullptr); @@ -47,10 +47,10 @@ class Terminal : public QGraphicsObject Terminal(QPointF, Qet::Orientation, QString number, QString name, bool hiddenName, Element * = nullptr); ~Terminal() override; - + private: Terminal(const Terminal &); - + // methods public: /** @@ -60,13 +60,15 @@ class Terminal : public QGraphicsObject @return the QGraphicsItem type */ int type() const override { return Type; } - - void paint (QPainter *,const QStyleOptionGraphicsItem *, - QWidget *) override; + + void paint( + QPainter *painter, + const QStyleOptionGraphicsItem *, + QWidget *) override; void drawHelpLine (bool draw = true); QLineF HelpLine () const; QRectF boundingRect () const override; - + // methods to manage conductors attached to the terminal Terminal* alignedWithTerminal () const; bool addConductor (Conductor *conductor); @@ -75,7 +77,7 @@ class Terminal : public QGraphicsObject Diagram *diagram () const; Element *parentElement () const; QUuid uuid () const; - + QList conductors() const; Qet::Orientation orientation() const; QPointF dockConductor() const; @@ -86,12 +88,12 @@ class Terminal : public QGraphicsObject void updateConductor(); bool isLinkedTo(Terminal *); bool canBeLinkedTo(Terminal *); - + // methods related to XML import/export static bool valideXml(QDomElement &); bool fromXml (QDomElement &); QDomElement toXml (QDomDocument &) const; - + protected: // methods related to events management void hoverEnterEvent (QGraphicsSceneHoverEvent *) override; @@ -100,7 +102,7 @@ class Terminal : public QGraphicsObject void mousePressEvent (QGraphicsSceneMouseEvent *) override; void mouseMoveEvent (QGraphicsSceneMouseEvent *) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent *) override; - + // attributes public: enum { Type = UserType + 1002 }; @@ -116,7 +118,7 @@ class Terminal : public QGraphicsObject static QColor warningColor; /// color for forbidden actions static QColor forbiddenColor; - + private: bool m_draw_help_line{false}; QGraphicsLineItem *m_help_line{nullptr}; @@ -127,10 +129,10 @@ class Terminal : public QGraphicsObject /// Parent electrical element Element *parent_element_{nullptr}; - public: + public: /// docking point for parent element QPointF dock_elmt_; - private: + private: /// List of conductors attached to the terminal QList conductors_; /** @@ -150,7 +152,7 @@ class Terminal : public QGraphicsObject /// Name of Terminal QString name_terminal_; bool name_terminal_hidden; - + private: void init(QString number, QString name, bool hiddenName); void init(QPointF pf, Qet::Orientation o, QString number, @@ -185,6 +187,6 @@ inline QString Terminal::name() const } QList relatedPotentialTerminal (const Terminal *terminal, - const bool all_diagram = true); + const bool all_diagram = true); #endif diff --git a/sources/qetproject.cpp b/sources/qetproject.cpp index 06a58985a..436fa300b 100644 --- a/sources/qetproject.cpp +++ b/sources/qetproject.cpp @@ -16,11 +16,6 @@ along with QElectroTech. If not, see . */ -#include -#include -#include -#include -#include #include "qetproject.h" #include "diagram.h" @@ -37,6 +32,13 @@ #include "numerotationcontextcommands.h" #include "assignvariables.h" +#include +#include +#include +#include +#include +#include + static int BACKUP_INTERVAL = 120000; //interval in ms of backup = 2min /** @@ -178,7 +180,7 @@ QETProject::ProjectState QETProject::openFile(QFile *file) bool opened_here = file->isOpen() ? false : true; if (!file->isOpen() && !file->open(QIODevice::ReadOnly - | QIODevice::Text)) { + | QIODevice::Text)) { return FileOpenFailed; } QFileInfo fi(*file); @@ -887,7 +889,7 @@ QDomDocument QETProject::toXml() for(Diagram *diagram : diagrams_list) { qDebug() << QString("exporting diagram \"%1\"" - ).arg(diagram -> title()) + ).arg(diagram -> title()) << "[" << diagram << "]"; @@ -1080,7 +1082,7 @@ ElementsLocation QETProject::importElement(ElementsLocation &location) //Element doesn't exist in the collection, we just import it else { ElementsLocation loc(m_elements_collection->addElement( - location), this); + location), this); if (!loc.exist()) { qDebug() << "failed to import location. " @@ -1370,8 +1372,8 @@ void QETProject::readDiagramsXml(QDomDocument &xml_project) int diagram_order = -1; if (!QET::attributeIsAnInteger(diagram_xml_element, - "order", - &diagram_order)) + "order", + &diagram_order)) diagram_order = 500000; addDiagram(diagram, diagram_order-1); @@ -1691,11 +1693,16 @@ NamesList QETProject::namesListForIntegrationCategory() */ void QETProject::writeBackup() { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove QDomDocument xml_project(toXml()); - QtConcurrent::run(QET::writeToFile, - xml_project, - &m_backup_file, - nullptr); + QtConcurrent::run( + QET::writeToFile,xml_project,&m_backup_file,nullptr); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif } /** diff --git a/sources/qetxml.cpp b/sources/qetxml.cpp index a2b15443f..a70d74949 100644 --- a/sources/qetxml.cpp +++ b/sources/qetxml.cpp @@ -274,7 +274,14 @@ bool QETXML::writeXmlFile( } QTextStream out(&file); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove out.setCodec("UTF-8"); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + out.setEncoding(QStringConverter::Utf8); +#endif out.setGenerateByteOrderMark(false); out << xml_document.toString(4); file.close(); @@ -314,9 +321,9 @@ QVector QETXML::directChild( { QVector return_list; for ( - QDomNode node = element.firstChild() ; - !node.isNull() ; - node = node.nextSibling()) + QDomNode node = element.firstChild() ; + !node.isNull() ; + node = node.nextSibling()) { if (!node.isElement()) continue; QDomElement element = node.toElement(); @@ -345,18 +352,18 @@ QVector QETXML::subChild( QVector return_list; for ( - QDomNode child = element.firstChild() ; - !child.isNull() ; - child = child.nextSibling()) + QDomNode child = element.firstChild() ; + !child.isNull() ; + child = child.nextSibling()) { QDomElement parents = child.toElement(); if (parents.isNull() || parents.tagName() != parent_tag_name) continue; for ( - QDomNode node_children = parents.firstChild() ; - !node_children.isNull() ; - node_children = node_children.nextSibling()) + QDomNode node_children = parents.firstChild() ; + !node_children.isNull() ; + node_children = node_children.nextSibling()) { QDomElement n_children = node_children.toElement(); if (!n_children.isNull() && n_children.tagName() == children_tag_name) diff --git a/sources/qtextorientationwidget.cpp b/sources/qtextorientationwidget.cpp index 3fd8b65a6..642a056af 100644 --- a/sources/qtextorientationwidget.cpp +++ b/sources/qtextorientationwidget.cpp @@ -1,28 +1,29 @@ /* Copyright 2006-2020 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 . */ #include "qtextorientationwidget.h" #include +#include /** Constructeur Par defaut, ce widget met en valeur les angles multiples de 45 degres et presente un texte oriente a 0 degre, avec la police par defaut de - l'application. Le texte affiche est + l'application. Le texte affiche est @param parent Widget parent */ QTextOrientationWidget::QTextOrientationWidget(QWidget *parent) : @@ -36,14 +37,14 @@ QTextOrientationWidget::QTextOrientationWidget(QWidget *parent) : // chaines par defaut text_size_hash_.insert(tr("Ex.", "Short example string"), -1); text_size_hash_.insert(tr("Exemple", "Longer example string"), -1); - + // definit la politique de gestion de la taille de ce widget : // on prefere la sizeHint() QSizePolicy size_policy(QSizePolicy::Minimum, QSizePolicy::Minimum); // on souhaite conserver le rapport entre sa hauteur et sa largeur size_policy.setHeightForWidth(true); setSizePolicy(size_policy); - + // suivi de la souris : permet de recevoir les evenements relatifs aux // mouvement de la souris sans que l'utilisateur n'ait a cliquer setMouseTracking(true); @@ -82,7 +83,7 @@ double QTextOrientationWidget::orientation() const */ void QTextOrientationWidget::setFont(const QFont &font) { text_font_ = font; - + // invalide le cache contenant les longueurs des textes a disposition foreach(QString text, text_size_hash_.keys()) { text_size_hash_[text] = -1; @@ -121,7 +122,7 @@ bool QTextOrientationWidget::textDisplayed() const */ void QTextOrientationWidget::setUsableTexts(const QStringList &texts_list) { if (texts_list.isEmpty()) return; - + // on oublie les anciennes chaines foreach(QString text, text_size_hash_.keys()) { // il faut oublier les anciennes chaines @@ -129,7 +130,7 @@ void QTextOrientationWidget::setUsableTexts(const QStringList &texts_list) { text_size_hash_.remove(text); } } - + // on ajoute les nouvelles, sans les calculer (on met -1 en guise de longueur) foreach(QString text, texts_list) { if (!text_size_hash_.contains(text)) { @@ -185,31 +186,31 @@ int QTextOrientationWidget::heightForWidth(int w) const */ void QTextOrientationWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); - + // rectangle de travail avec son centre et son rayon QRect drawing_rectangle(QPoint(0, 0), size()); drawing_rectangle.adjust(5, 5, -5, -5); - + QPointF drawing_rectangle_center(drawing_rectangle.center()); qreal drawing_rectangle_radius = drawing_rectangle.width() / 2.0; - + QPainter p; p.begin(this); - + p.setRenderHint(QPainter::Antialiasing, true); p.setRenderHint(QPainter::TextAntialiasing, true); - + // cercle gris a fond jaune p.setPen(QPen(QBrush(QColor("#9FA8A8")), 2.0)); p.setBrush(QBrush(QColor("#ffffaa"))); p.drawEllipse(drawing_rectangle); - + // ligne rouge indiquant l'angle actuel p.setPen(QPen(QBrush(Qt::red), 1.0)); p.translate(drawing_rectangle_center); p.rotate(current_orientation_); p.drawLine(QLineF(QPointF(), QPointF(drawing_rectangle_radius, 0.0))); - + // texte optionnel if (display_text_) { // determine le texte a afficher @@ -223,7 +224,7 @@ void QTextOrientationWidget::paintEvent(QPaintEvent *event) { p.drawText(QPoint(), chosen_text); } } - + // carres verts a fond vert qreal squares_size = size().width() / 15.0; qreal square_offset = - squares_size / 2.0; @@ -244,7 +245,7 @@ void QTextOrientationWidget::paintEvent(QPaintEvent *event) { p.setBrush(QBrush(QColor("#248A34"))); } } - + p.end(); } @@ -254,9 +255,15 @@ void QTextOrientationWidget::paintEvent(QPaintEvent *event) { */ void QTextOrientationWidget::mouseMoveEvent(QMouseEvent *event) { if (read_only_) return; - +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove bool drawn_angle_hovered = positionIsASquare(event -> localPos(), &highlight_angle_); - +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + bool drawn_angle_hovered = positionIsASquare(event -> position(), &highlight_angle_); +#endif + if (must_highlight_angle_ != drawn_angle_hovered) { must_highlight_angle_ = drawn_angle_hovered; update(); @@ -269,10 +276,16 @@ void QTextOrientationWidget::mouseMoveEvent(QMouseEvent *event) { */ void QTextOrientationWidget::mouseReleaseEvent(QMouseEvent *event) { if (read_only_) return; - + double clicked_angle; +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove bool drawn_angle_clicked = positionIsASquare(event -> localPos(), &clicked_angle); - +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + bool drawn_angle_clicked = positionIsASquare(event -> position(), &clicked_angle); +#endif if (drawn_angle_clicked) { setOrientation(clicked_angle); emit(orientationChanged(clicked_angle)); @@ -288,7 +301,7 @@ void QTextOrientationWidget::mouseReleaseEvent(QMouseEvent *event) { QString QTextOrientationWidget::getMostUsableStringForRadius(const qreal &radius) { // s'assure que l'on connait la longueur de chaque texte a disposition generateTextSizeHash(); - + // recupere les longueurs a disposition QList available_lengths = text_size_hash_.values(); // trie les longueurs par ordre croissant @@ -297,7 +310,7 @@ QString QTextOrientationWidget::getMostUsableStringForRadius(const qreal &radius QList::const_iterator i = std::upper_bound(available_lengths.begin(), available_lengths.end(), radius); - + // la valeur precedent cette position est donc celle qui nous interesse if (i == available_lengths.begin()) { // nous sommes au debut de la liste - nous ne pouvons donc pas afficher de chaine @@ -335,27 +348,27 @@ bool QTextOrientationWidget::positionIsASquare(const QPointF &pos, double *angle // rectangle de travail avec son centre et son rayon QRect drawing_rectangle(QPoint(0, 0), size()); drawing_rectangle.adjust(5, 5, -5, -5); - + QPointF drawing_rectangle_center(drawing_rectangle.center()); qreal drawing_rectangle_radius = drawing_rectangle.width() / 2.0; - + qreal squares_size = size().width() / 15.0; qreal square_offset = - squares_size / 2.0; QRectF square_qrect = QRect(square_offset, square_offset, squares_size, squares_size); - + for (double drawing_angle = 0.0 ; drawing_angle < 360.0 ; drawing_angle += squares_interval_) { QTransform transform = QTransform() .translate(drawing_rectangle_center.x(), drawing_rectangle_center.y()) .rotate(drawing_angle) .translate(drawing_rectangle_radius - 1.0, 0.0) .rotate(-45.0); - + QRectF mapped_rectangle = transform.mapRect(square_qrect); if (mapped_rectangle.contains(pos)) { if (angle_value_ptr) *angle_value_ptr = drawing_angle; return(true); } } - + return(false); } diff --git a/sources/richtext/richtexteditor.cpp b/sources/richtext/richtexteditor.cpp index 47a9b7a15..9fe9d2321 100644 --- a/sources/richtext/richtexteditor.cpp +++ b/sources/richtext/richtexteditor.cpp @@ -75,6 +75,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -86,14 +87,14 @@ QT_BEGIN_NAMESPACE namespace qdesigner_internal { // Richtext simplification filter helpers: Elements to be discarded - static inline bool filterElement(const QStringRef &name) + static inline bool filterElement(const QStringView &name) { return name != QLatin1String("meta") && name != QLatin1String("style"); } // Richtext simplification filter helpers: Filter attributes of elements static inline void filterAttributes( - const QStringRef &name, + const QStringView &name, QXmlStreamAttributes *atts, bool *paragraphAlignmentFound) { @@ -122,8 +123,8 @@ namespace qdesigner_internal { } } - // Richtext simplification filter helpers: Check for blank QStringRef. - static inline bool isWhiteSpace(const QStringRef &in) + // Richtext simplification filter helpers: Check for blank QStringView. + static inline bool isWhiteSpace(const QStringView &in) { const int count = in.size(); for (int i = 0; i < count; i++) @@ -150,7 +151,7 @@ namespace qdesigner_internal { case QXmlStreamReader::StartElement: elementCount++; if (filterElement(reader.name())) { - const QStringRef name = reader.name(); + const QStringView name = reader.name(); QXmlStreamAttributes attributes = reader.attributes(); filterAttributes(name, &attributes, ¶graphAlignmentFound); writer.writeStartElement(name.toString()); diff --git a/sources/titleblocktemplate.cpp b/sources/titleblocktemplate.cpp index 098bf9a2b..2c6c102ff 100644 --- a/sources/titleblocktemplate.cpp +++ b/sources/titleblocktemplate.cpp @@ -56,7 +56,7 @@ TitleBlockCell *TitleBlockTemplate::createCell( const TitleBlockCell *existing_cell) { TitleBlockCell *new_cell = existing_cell ? new TitleBlockCell(*existing_cell) - : new TitleBlockCell(); + : new TitleBlockCell(); registered_cells_ << new_cell; return(new_cell); } @@ -260,8 +260,8 @@ TitleBlockTemplate *TitleBlockTemplate::clone() const */ void TitleBlockTemplate::loadInformation(const QDomElement &xml_element) { for (QDomNode n = xml_element.firstChild() ; - !n.isNull() ; - n = n.nextSibling()) { + !n.isNull() ; + n = n.nextSibling()) { if (n.isElement() && n.toElement().tagName() == "information") { setInformation(n.toElement().text()); } @@ -291,12 +291,12 @@ bool TitleBlockTemplate::loadLogos(const QDomElement &xml_element, bool reset) { // we look for //logos/logo elements for (QDomNode n = xml_element.firstChild() ; - !n.isNull() ; - n = n.nextSibling()) { + !n.isNull() ; + n = n.nextSibling()) { if (n.isElement() && n.toElement().tagName() == "logos") { for (QDomNode p = n.firstChild() ; - !p.isNull() ; - p = p.nextSibling()) { + !p.isNull() ; + p = p.nextSibling()) { if (p.isElement() && p.toElement().tagName() == "logo") { loadLogo(p.toElement()); @@ -357,8 +357,8 @@ bool TitleBlockTemplate::loadGrid(const QDomElement &xml_element) { // we parse the first available "grid" XML element QDomElement grid_element; for (QDomNode n = xml_element.firstChild() ; - !n.isNull() ; - n = n.nextSibling()) { + !n.isNull() ; + n = n.nextSibling()) { if (n.isElement() && n.toElement().tagName() == "grid") { grid_element = n.toElement(); break; @@ -430,10 +430,10 @@ void TitleBlockTemplate::parseColumns(const QString &cols_string) { QRegularExpression abs_col_size_format,rel_col_size_format; abs_col_size_format.setPattern("^([0-9]+)(?:px)?$"); abs_col_size_format.setPatternOptions(QRegularExpression::CaseInsensitiveOption); - //QRegExp rel_col_size_format("^([rt])([0-9]+)%$", Qt::CaseInsensitive); rel_col_size_format.setPattern("^([rt])([0-9]+)%$"); rel_col_size_format.setPatternOptions(QRegularExpression::CaseInsensitiveOption); bool conv_ok; + qDebug() <<"is QRegularExpression ok?"; #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) // ### Qt 6: remove QStringList cols_descriptions = @@ -471,7 +471,7 @@ void TitleBlockTemplate::parseColumns(const QString &cols_string) { foreach (TitleBlockColDimension icd, columns_width_) { qDebug() << Q_FUNC_INFO << QString("%1 [%2]").arg(icd.value).arg( - QET::titleBlockColumnLengthToString(icd.type)); + QET::titleBlockColumnLengthToString(icd.type)); } #endif } @@ -487,8 +487,8 @@ bool TitleBlockTemplate::loadCells(const QDomElement &xml_element) { // we are interested by the "logo" and "field" elements QDomElement grid_element; for (QDomNode n = xml_element.firstChild() ; - !n.isNull() ; - n = n.nextSibling()) { + !n.isNull() ; + n = n.nextSibling()) { if (!n.isElement()) continue; QDomElement cell_element = n.toElement(); if (cell_element.tagName() == "field" @@ -648,9 +648,9 @@ void TitleBlockTemplate::saveCell(TitleBlockCell *cell, cell_elmt.setAttribute("row", cell -> num_row); cell_elmt.setAttribute("col", cell -> num_col); if (cell -> row_span) cell_elmt.setAttribute("rowspan", - cell -> row_span); + cell -> row_span); if (cell -> col_span) cell_elmt.setAttribute("colspan", - cell -> col_span); + cell -> col_span); // save other information cell -> saveContentToXml(cell_elmt); @@ -1134,8 +1134,8 @@ void TitleBlockTemplate::addColumn(int i) { @return true */ bool TitleBlockTemplate::insertColumn(const TitleBlockDimension &dimension, - const QList &column, - int i) { + const QList &column, + int i) { int index = (i == -1) ? columns_width_.count() : i; cells_.insert(index, column); columns_width_.insert(index, dimension); @@ -1213,11 +1213,11 @@ QSet TitleBlockTemplate::spannedCells( if (!final_row_span && !final_col_span) return(set); for (int i = given_cell -> num_col ; - i <= given_cell -> num_col + final_col_span ; - ++ i) { + i <= given_cell -> num_col + final_col_span ; + ++ i) { for (int j = given_cell -> num_row ; - j <= given_cell -> num_row + final_row_span ; - ++ j) { + j <= given_cell -> num_row + final_row_span ; + ++ j) { if (i == given_cell -> num_col && j == given_cell -> num_row) continue; @@ -1257,7 +1257,7 @@ QHash > TitleBlockTemplate::getAllSpans( @param spans : */ void TitleBlockTemplate::setAllSpans(const QHash > &spans) { + QPair > &spans) { foreach (TitleBlockCell *cell, spans.keys()) { cell -> row_span = spans[cell].first; cell -> col_span = spans[cell].second; @@ -1344,9 +1344,9 @@ bool TitleBlockTemplate::addLogoFromFile(const QString &filepath, // we then try to add it as a bitmap image return addLogo(filename, - &file_content, - filepath_info.suffix(), - "base64"); + &file_content, + filepath_info.suffix(), + "base64"); } /** @@ -1405,7 +1405,7 @@ bool TitleBlockTemplate::removeLogo(const QString &logo_name) { @return */ bool TitleBlockTemplate::renameLogo(const QString &logo_name, - const QString &new_name) { + const QString &new_name) { if (!data_logos_.contains(logo_name) || data_logos_.contains(new_name)) { return(false); @@ -1531,8 +1531,8 @@ void TitleBlockTemplate::render(QPainter &painter, // calculate the border rect of the current cell int x = lengthRange(0, cells_[i][j] -> num_col, widths); int y = lengthRange(0, - cells_[i][j] -> num_row, - rows_heights_); + cells_[i][j] -> num_row, + rows_heights_); int row_span = 0, col_span = 0; if (cells_[i][j] -> span_state @@ -1541,11 +1541,11 @@ void TitleBlockTemplate::render(QPainter &painter, col_span = cells_[i][j] -> applied_col_span; } int w = lengthRange(cells_[i][j] -> num_col, - cells_[i][j] -> num_col + 1 + col_span, - widths); + cells_[i][j] -> num_col + 1 + col_span, + widths); int h = lengthRange(cells_[i][j] -> num_row, - cells_[i][j] -> num_row + 1 + row_span, - rows_heights_); + cells_[i][j] -> num_row + 1 + row_span, + rows_heights_); QRect cell_rect(x, y, w, h); renderCell(painter, *cells_[i][j], @@ -1576,7 +1576,7 @@ void TitleBlockTemplate::renderDxf(QRectF &title_block_rect, QList widths = columnsWidth(titleblock_width); // draw the titleblock border - double xCoord = title_block_rect.topLeft().x()*Createdxf::xScale; + double xCoord = title_block_rect.topLeft().x()*Createdxf::xScale; double yCoord = Createdxf::sheetHeight - title_block_rect.bottomLeft().y() @@ -1600,9 +1600,9 @@ void TitleBlockTemplate::renderDxf(QRectF &title_block_rect, // calculate the border rect of the current cell double x = lengthRange(0, cells_[i][j] -> num_col, - widths); + widths); double y = lengthRange(0, cells_[i][j] -> num_row, - rows_heights_); + rows_heights_); int row_span = 0, col_span = 0; if (cells_[i][j] -> span_state @@ -1611,11 +1611,11 @@ void TitleBlockTemplate::renderDxf(QRectF &title_block_rect, col_span = cells_[i][j] -> applied_col_span; } double w = lengthRange(cells_[i][j] -> num_col, - cells_[i][j] -> num_col + 1 + col_span, - widths); + cells_[i][j] -> num_col + 1 + col_span, + widths); double h = lengthRange(cells_[i][j] -> num_row, - cells_[i][j] -> num_row + 1 + row_span, - rows_heights_); + cells_[i][j] -> num_row + 1 + row_span, + rows_heights_); x = xCoord + x*Createdxf::xScale; h *= Createdxf::yScale; @@ -1655,9 +1655,9 @@ void TitleBlockTemplate::renderDxf(QRectF &title_block_rect, Rectangle the cell must be rendered into. */ void TitleBlockTemplate::renderCell(QPainter &painter, - const TitleBlockCell &cell, - const DiagramContext &diagram_context, - const QRect &cell_rect) const + const TitleBlockCell &cell, + const DiagramContext &diagram_context, + const QRect &cell_rect) const { // draw the border rect of the current cell QPen pen(QBrush(), 0.0, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin); @@ -1819,7 +1819,7 @@ void TitleBlockTemplate::renderTextCell(QPainter &painter, QRectF new_world_cell_rect(cell_rect); new_world_cell_rect.moveTo(0, 0.0); new_world_cell_rect.setWidth(new_world_cell_rect.width() - / ratio); + / ratio); painter.drawText(new_world_cell_rect, cell.alignment, text); @@ -2014,11 +2014,11 @@ bool TitleBlockTemplate::checkCellSpan(TitleBlockCell *cell) { // ensure cells that will be spanned are either empty or free for (int i = cell -> num_col ; - i <= cell -> num_col + cell -> applied_col_span ; - ++ i) { + i <= cell -> num_col + cell -> applied_col_span ; + ++ i) { for (int j = cell -> num_row ; - j <= cell -> num_row + cell -> applied_row_span ; - ++ j) { + j <= cell -> num_row + cell -> applied_row_span ; + ++ j) { if (i == cell -> num_col && j == cell -> num_row) continue; #ifdef TITLEBLOCK_TEMPLATE_DEBUG @@ -2031,8 +2031,8 @@ bool TitleBlockTemplate::checkCellSpan(TitleBlockCell *cell) { current_cell -> spanner_cell && current_cell -> spanner_cell != cell - ) - ) { + ) + ) { cell -> span_state = TitleBlockCell::Disabled; return(true); } @@ -2058,11 +2058,11 @@ void TitleBlockTemplate::applyCellSpan(TitleBlockCell *cell) // goes through every spanned cell for (int i = cell -> num_col ; - i <= cell -> num_col + cell -> applied_col_span ; - ++ i) { + i <= cell -> num_col + cell -> applied_col_span ; + ++ i) { for (int j = cell -> num_row ; - j <= cell -> num_row + cell -> applied_row_span ; - ++ j) { + j <= cell -> num_row + cell -> applied_row_span ; + ++ j) { // avoid the spanning cell itself if (i == cell -> num_col && j == cell -> num_row) continue; diff --git a/sources/undocommand/deleteqgraphicsitemcommand.cpp b/sources/undocommand/deleteqgraphicsitemcommand.cpp index a5381ce64..4e3f2a76b 100644 --- a/sources/undocommand/deleteqgraphicsitemcommand.cpp +++ b/sources/undocommand/deleteqgraphicsitemcommand.cpp @@ -1,17 +1,17 @@ /* Copyright 2006-2020 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 . */ @@ -49,9 +49,9 @@ DeleteQGraphicsItemCommand::DeleteQGraphicsItemCommand( { if (m_removed_contents.m_elements.contains(deti->parentElement())) m_removed_contents.m_element_texts.remove(deti); - + } - + //When remove a deti we must to know his parent item, for re-add deti as child of the parent //when undo this command for(DynamicElementTextItem *deti : m_removed_contents.m_element_texts) @@ -61,7 +61,7 @@ DeleteQGraphicsItemCommand::DeleteQGraphicsItemCommand( else m_elmt_text_hash.insert(deti, deti->parentElement()); } - + //If parent element of ElementTextItemGroup is also in m_removed_content, //we remove it, because when the element will be removed from the scene every child's will also be removed. const QSet group_set = m_removed_contents.m_texts_groups; @@ -70,12 +70,12 @@ DeleteQGraphicsItemCommand::DeleteQGraphicsItemCommand( if(m_removed_contents.m_elements.contains(group->parentElement())) m_removed_contents.m_texts_groups.remove(group); } - + //The deletion of the groups is not managed by this undo, but by a RemoveTextsGroupCommand for(ElementTextItemGroup *group : m_removed_contents.m_texts_groups) { new RemoveTextsGroupCommand(group->parentElement(), group, this); } - + m_removed_contents.m_texts_groups.clear(); setPotentialsOfRemovedElements(); @@ -98,7 +98,7 @@ DeleteQGraphicsItemCommand::DeleteQGraphicsItemCommand( m_table_scene_hash.insert(current_table, current_table->scene()); } } - + setText(QString(QObject::tr( "supprimer %1", "undo caption - %1 is a sentence listing the removed content")) @@ -133,17 +133,17 @@ void DeleteQGraphicsItemCommand::setPotentialsOfRemovedElements() if (terminals_list.isEmpty()) { continue; } - + for (Terminal *t : terminals_list) { //All new created conductors will be docked to hub_terminal Terminal *hub_terminal = nullptr; QList terminals_to_connect_list; - + for (Conductor *c : t->conductors()) { Terminal *other_terminal = c->terminal1 == t ? c->terminal2 : c->terminal1; - + if (m_removed_contents.items(DiagramContent::Elements).contains(other_terminal->parentElement())) { other_terminal = terminalInSamePotential(other_terminal, c); @@ -151,7 +151,7 @@ void DeleteQGraphicsItemCommand::setPotentialsOfRemovedElements() continue; } } - + terminals_to_connect_list.append(other_terminal); if (hub_terminal == nullptr) { hub_terminal = other_terminal; @@ -166,12 +166,12 @@ void DeleteQGraphicsItemCommand::setPotentialsOfRemovedElements() } } } - + terminals_to_connect_list.removeAll(hub_terminal); if (hub_terminal == nullptr || terminals_to_connect_list.isEmpty()) { continue; } - + ConductorProperties properties = hub_terminal->conductors().first()->properties(); for (Terminal *t : terminals_to_connect_list) { @@ -188,10 +188,17 @@ void DeleteQGraphicsItemCommand::setPotentialsOfRemovedElements() continue; } } - + if (exist_ == false) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) // ### Qt 6: remove m_connected_terminals.append(qMakePair(hub_terminal, t)); +#else +#if TODO_LIST +#pragma message("@TODO remove code for QT 6 or later") +#endif + qDebug()<<"Help code for QT 6 or later"; +#endif Conductor *new_cond = new Conductor(hub_terminal, t); new_cond->setProperties(properties); new AddItemCommand(new_cond, t->diagram(), QPointF(), this); @@ -210,7 +217,7 @@ void DeleteQGraphicsItemCommand::setPotentialsOfRemovedElements() Return nullptr if a terminal can't be found. @param terminal - terminal from search @param conductor_to_exclude - a conductor to exlcude from search. - @return + @return */ Terminal *DeleteQGraphicsItemCommand::terminalInSamePotential( Terminal *terminal, @@ -234,7 +241,7 @@ Terminal *DeleteQGraphicsItemCommand::terminalInSamePotential( return terminal_to_return; } } - + return nullptr; } @@ -253,7 +260,7 @@ void DeleteQGraphicsItemCommand::undo() for(Element *e : m_removed_contents.m_elements) for(Element *elmt : m_link_hash[e]) e->linkToElement(elmt); - + for(DynamicElementTextItem *deti : m_removed_contents.m_element_texts) { if(m_elmt_text_hash.keys().contains(deti)) @@ -272,7 +279,7 @@ void DeleteQGraphicsItemCommand::undo() m_table_scene_hash.value(table)->addItem(table); } } - + QUndoCommand::undo(); } @@ -298,14 +305,14 @@ void DeleteQGraphicsItemCommand::redo() conductor_list.first() -> calculateTextItemPosition(); } } - + for(Element *e : m_removed_contents.m_elements) { //Get linked element, for relink it at undo if (!e->linkedElements().isEmpty()) m_link_hash.insert(e, e->linkedElements()); } - + for(DynamicElementTextItem *deti : m_removed_contents.m_element_texts) { if(deti->parentGroup() && deti->parentGroup()->parentElement()) @@ -321,9 +328,9 @@ void DeleteQGraphicsItemCommand::redo() m_table_scene_hash.value(table)->removeItem(table); } } - + for(QGraphicsItem *item : m_removed_contents.items()) m_diagram->removeItem(item); - + QUndoCommand::redo(); } diff --git a/sources/undocommand/linkelementcommand.cpp b/sources/undocommand/linkelementcommand.cpp index 8b361fc88..1a56fb981 100644 --- a/sources/undocommand/linkelementcommand.cpp +++ b/sources/undocommand/linkelementcommand.cpp @@ -285,6 +285,10 @@ void LinkElementCommand::makeLink(const QList &element_list) //All elements stored in to_unlink is unwanted we unlink it from m_element if (!to_unlink.isEmpty()) + { foreach(Element *elmt, to_unlink) + { m_element->unlinkElement(elmt); + } + } }